mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
9fff18dc96
Backed out changeset d3e7f6392670 (bug 865407) Backed out changeset 7ba94f08b7a5 (bug 865407) Backed out changeset 3de6e32a4346 (bug 865407) Backed out changeset 5c0572c6727b (bug 865407) Backed out changeset 5db43cac79f5 (bug 865407)
121 lines
2.8 KiB
C++
121 lines
2.8 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "mozilla/dom/TextTrackCueList.h"
|
|
#include "mozilla/dom/TextTrackCueListBinding.h"
|
|
#include "mozilla/dom/TextTrackCue.h"
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
class CompareCuesByTime
|
|
{
|
|
public:
|
|
bool Equals(TextTrackCue* aOne, TextTrackCue* aTwo) const {
|
|
return aOne->StartTime() == aTwo->StartTime() &&
|
|
aOne->EndTime() == aTwo->EndTime();
|
|
}
|
|
bool LessThan(TextTrackCue* aOne, TextTrackCue* aTwo) const {
|
|
return aOne->StartTime() < aTwo->StartTime() ||
|
|
(aOne->StartTime() == aTwo->StartTime() &&
|
|
aOne->EndTime() < aTwo->EndTime());
|
|
}
|
|
};
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(TextTrackCueList, mParent, mList)
|
|
|
|
NS_IMPL_CYCLE_COLLECTING_ADDREF(TextTrackCueList)
|
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(TextTrackCueList)
|
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TextTrackCueList)
|
|
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
|
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
|
NS_INTERFACE_MAP_END
|
|
|
|
TextTrackCueList::TextTrackCueList(nsISupports* aParent) : mParent(aParent)
|
|
{
|
|
SetIsDOMBinding();
|
|
}
|
|
|
|
void
|
|
TextTrackCueList::Update(double aTime)
|
|
{
|
|
const uint32_t length = mList.Length();
|
|
for (uint32_t i = 0; i < length; i++) {
|
|
if (aTime > mList[i]->StartTime() && aTime < mList[i]->EndTime()) {
|
|
mList[i]->RenderCue();
|
|
}
|
|
}
|
|
}
|
|
|
|
JSObject*
|
|
TextTrackCueList::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aScope)
|
|
{
|
|
return TextTrackCueListBinding::Wrap(aCx, aScope, this);
|
|
}
|
|
|
|
TextTrackCue*
|
|
TextTrackCueList::IndexedGetter(uint32_t aIndex, bool& aFound)
|
|
{
|
|
aFound = aIndex < mList.Length();
|
|
return aFound ? mList[aIndex] : nullptr;
|
|
}
|
|
|
|
TextTrackCue*
|
|
TextTrackCueList::operator[](uint32_t aIndex)
|
|
{
|
|
return mList.SafeElementAt(aIndex, nullptr);
|
|
}
|
|
|
|
TextTrackCue*
|
|
TextTrackCueList::GetCueById(const nsAString& aId)
|
|
{
|
|
if (aId.IsEmpty()) {
|
|
return nullptr;
|
|
}
|
|
|
|
for (uint32_t i = 0; i < mList.Length(); i++) {
|
|
if (aId.Equals(mList[i]->Id())) {
|
|
return mList[i];
|
|
}
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
void
|
|
TextTrackCueList::AddCue(TextTrackCue& aCue)
|
|
{
|
|
if (mList.Contains(&aCue)) {
|
|
return;
|
|
}
|
|
mList.InsertElementSorted(&aCue, CompareCuesByTime());
|
|
}
|
|
|
|
void
|
|
TextTrackCueList::RemoveCue(TextTrackCue& aCue, ErrorResult& aRv)
|
|
{
|
|
if (!mList.Contains(&aCue)) {
|
|
aRv.Throw(NS_ERROR_DOM_NOT_FOUND_ERR);
|
|
return;
|
|
}
|
|
mList.RemoveElement(&aCue);
|
|
}
|
|
|
|
void
|
|
TextTrackCueList::RemoveCueAt(uint32_t aIndex)
|
|
{
|
|
if (aIndex < mList.Length()) {
|
|
mList.RemoveElementAt(aIndex);
|
|
}
|
|
}
|
|
|
|
void
|
|
TextTrackCueList::RemoveAll()
|
|
{
|
|
mList.Clear();
|
|
}
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|