summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/track/TextTrackCue.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/track/TextTrackCue.h')
-rw-r--r--Source/WebCore/html/track/TextTrackCue.h248
1 files changed, 43 insertions, 205 deletions
diff --git a/Source/WebCore/html/track/TextTrackCue.h b/Source/WebCore/html/track/TextTrackCue.h
index 5d3cf4e9c..4907546a2 100644
--- a/Source/WebCore/html/track/TextTrackCue.h
+++ b/Source/WebCore/html/track/TextTrackCue.h
@@ -1,6 +1,6 @@
/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2012-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -29,62 +29,20 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef TextTrackCue_h
-#define TextTrackCue_h
+#pragma once
#if ENABLE(VIDEO_TRACK)
-#include "EventTarget.h"
-#include "HTMLElement.h"
-#include <wtf/PassOwnPtr.h>
-#include <wtf/RefCounted.h>
+#include "Document.h"
+#include <wtf/MediaTime.h>
namespace WebCore {
-class DocumentFragment;
-class HTMLSpanElement;
-class ScriptExecutionContext;
class TextTrack;
-class TextTrackCue;
-
-// ----------------------------
-
-class TextTrackCueBox : public HTMLElement {
-public:
- static PassRefPtr<TextTrackCueBox> create(Document& document, TextTrackCue* cue)
- {
- return adoptRef(new TextTrackCueBox(document, cue));
- }
-
- TextTrackCue* getCue() const;
- virtual void applyCSSProperties(const IntSize& videoSize);
-
- static const AtomicString& textTrackCueBoxShadowPseudoId();
-
-protected:
- TextTrackCueBox(Document&, TextTrackCue*);
-
- virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
-
- TextTrackCue* m_cue;
-};
-
-// ----------------------------
class TextTrackCue : public RefCounted<TextTrackCue>, public EventTargetWithInlineData {
public:
- static PassRefPtr<TextTrackCue> create(ScriptExecutionContext& context, double start, double end, const String& content)
- {
- return adoptRef(new TextTrackCue(context, start, end, content));
- }
-
- static const AtomicString& cueShadowPseudoId()
- {
- DEFINE_STATIC_LOCAL(const AtomicString, cue, ("cue", AtomicString::ConstructFromLiteral));
- return cue;
- }
-
- virtual ~TextTrackCue();
+ static const AtomicString& cueShadowPseudoId();
TextTrack* track() const;
void setTrack(TextTrack*);
@@ -92,193 +50,73 @@ public:
const String& id() const { return m_id; }
void setId(const String&);
- double startTime() const { return m_startTime; }
- void setStartTime(double, ExceptionCode&);
+ double startTime() const { return startMediaTime().toDouble(); }
+ void setStartTime(double);
- double endTime() const { return m_endTime; }
- void setEndTime(double, ExceptionCode&);
+ double endTime() const { return endMediaTime().toDouble(); }
+ void setEndTime(double);
bool pauseOnExit() const { return m_pauseOnExit; }
void setPauseOnExit(bool);
- const String& vertical() const;
- void setVertical(const String&, ExceptionCode&);
+ MediaTime startMediaTime() const { return m_startTime; }
+ void setStartTime(const MediaTime&);
- bool snapToLines() const { return m_snapToLines; }
- void setSnapToLines(bool);
-
- int line() const { return m_linePosition; }
- virtual void setLine(int, ExceptionCode&);
-
- int position() const { return m_textPosition; }
- virtual void setPosition(int, ExceptionCode&);
-
- int size() const { return m_cueSize; }
- virtual void setSize(int, ExceptionCode&);
-
- const String& align() const;
- void setAlign(const String&, ExceptionCode&);
-
- const String& text() const { return m_content; }
- void setText(const String&);
-
- const String& cueSettings() const { return m_settings; }
- void setCueSettings(const String&);
-
- int cueIndex();
- void invalidateCueIndex();
-
- PassRefPtr<DocumentFragment> getCueAsHTML();
- PassRefPtr<DocumentFragment> createCueRenderingTree();
-
- using EventTarget::dispatchEvent;
- virtual bool dispatchEvent(PassRefPtr<Event>) override;
-
-#if ENABLE(WEBVTT_REGIONS)
- const String& regionId() const { return m_regionId; }
- void setRegionId(const String&);
-#endif
+ MediaTime endMediaTime() const { return m_endTime; }
+ void setEndTime(const MediaTime&);
bool isActive();
- void setIsActive(bool);
+ virtual void setIsActive(bool);
- bool hasDisplayTree() const { return m_displayTree; }
- TextTrackCueBox* getDisplayTree(const IntSize& videoSize);
- HTMLSpanElement* element() const { return m_cueBackgroundBox.get(); }
-
- void updateDisplayTree(double);
- void removeDisplayTree();
- void markFutureAndPastNodes(ContainerNode*, double, double);
-
- int calculateComputedLinePosition();
- std::pair<double, double> getPositionCoordinates() const;
-
- virtual EventTargetInterface eventTargetInterface() const override final { return TextTrackCueEventTargetInterfaceType; }
- virtual ScriptExecutionContext* scriptExecutionContext() const override final { return &m_scriptExecutionContext; }
-
- std::pair<double, double> getCSSPosition() const;
-
- int getCSSSize() const;
- CSSValueID getCSSWritingDirection() const;
- CSSValueID getCSSWritingMode() const;
-
- enum WritingDirection {
- Horizontal,
- VerticalGrowingLeft,
- VerticalGrowingRight,
- NumberOfWritingDirections
- };
- WritingDirection getWritingDirection() const { return m_writingDirection; }
+ virtual bool isOrderedBefore(const TextTrackCue*) const;
+ virtual bool isPositionedAbove(const TextTrackCue* cue) const { return isOrderedBefore(cue); }
- enum CueAlignment {
- Start,
- Middle,
- End
- };
- CueAlignment getAlignment() const { return m_cueAlignment; }
+ bool hasEquivalentStartTime(const TextTrackCue&) const;
- virtual void setFontSize(int, const IntSize&, bool important);
+ enum CueType { Data, Generic, WebVTT };
+ virtual CueType cueType() const = 0;
+ virtual bool isRenderable() const { return false; }
- enum CueMatchRules {
- MatchAllFields,
- IgnoreDuration,
- };
+ enum CueMatchRules { MatchAllFields, IgnoreDuration };
virtual bool isEqual(const TextTrackCue&, CueMatchRules) const;
-
- virtual bool isOrderedBefore(const TextTrackCue*) const;
-
- enum CueType {
- Generic,
- WebVTT
- };
- virtual CueType cueType() const { return WebVTT; }
+ virtual bool doesExtendCue(const TextTrackCue&) const;
void willChange();
- void didChange();
-
- DEFINE_ATTRIBUTE_EVENT_LISTENER(enter);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(exit);
+ virtual void didChange();
- using RefCounted<TextTrackCue>::ref;
- using RefCounted<TextTrackCue>::deref;
+ using RefCounted::ref;
+ using RefCounted::deref;
protected:
- TextTrackCue(ScriptExecutionContext&, double start, double end, const String& content);
-
- Document& ownerDocument() { return toDocument(m_scriptExecutionContext); }
+ TextTrackCue(ScriptExecutionContext&, const MediaTime& start, const MediaTime& end);
- virtual PassRefPtr<TextTrackCueBox> createDisplayTree();
- TextTrackCueBox* displayTreeInternal();
+ Document& ownerDocument() { return downcast<Document>(m_scriptExecutionContext); }
private:
- void createWebVTTNodeTree();
- void copyWebVTTNodeToDOMTree(ContainerNode* WebVTTNode, ContainerNode* root);
-
- void parseSettings(const String&);
-
- void determineTextDirection();
- void calculateDisplayParameters();
-
- virtual void refEventTarget() override final { ref(); }
- virtual void derefEventTarget() override final { deref(); }
-
- enum CueSetting {
- None,
- Vertical,
- Line,
- Position,
- Size,
- Align,
-#if ENABLE(WEBVTT_REGIONS)
- RegionId
-#endif
- };
- CueSetting settingName(const String&);
+ void refEventTarget() final { ref(); }
+ void derefEventTarget() final { deref(); }
- String m_id;
- double m_startTime;
- double m_endTime;
- String m_content;
- String m_settings;
- int m_linePosition;
- int m_computedLinePosition;
- int m_textPosition;
- int m_cueSize;
- int m_cueIndex;
- int m_processingCueChanges;
-
- WritingDirection m_writingDirection;
-
- CueAlignment m_cueAlignment;
-
- RefPtr<DocumentFragment> m_webVTTNodeTree;
- TextTrack* m_track;
-
- ScriptExecutionContext& m_scriptExecutionContext;
-
- bool m_isActive;
- bool m_pauseOnExit;
- bool m_snapToLines;
+ using EventTarget::dispatchEvent;
+ bool dispatchEvent(Event&) final;
- RefPtr<HTMLSpanElement> m_cueBackgroundBox;
+ EventTargetInterface eventTargetInterface() const final { return TextTrackCueEventTargetInterfaceType; }
+ ScriptExecutionContext* scriptExecutionContext() const final { return &m_scriptExecutionContext; }
- bool m_displayTreeShouldChange;
- RefPtr<TextTrackCueBox> m_displayTree;
+ virtual bool cueContentsMatch(const TextTrackCue&) const;
- CSSValueID m_displayDirection;
+ String m_id;
+ MediaTime m_startTime;
+ MediaTime m_endTime;
+ int m_processingCueChanges { 0 };
- CSSValueID m_displayWritingModeMap[NumberOfWritingDirections];
- CSSValueID m_displayWritingMode;
+ TextTrack* m_track { nullptr };
- int m_displaySize;
+ ScriptExecutionContext& m_scriptExecutionContext;
- std::pair<float, float> m_displayPosition;
-#if ENABLE(WEBVTT_REGIONS)
- String m_regionId;
-#endif
+ bool m_isActive : 1;
+ bool m_pauseOnExit : 1;
};
} // namespace WebCore
#endif
-#endif