diff options
Diffstat (limited to 'Source/WebCore/html/track/TextTrackCue.h')
-rw-r--r-- | Source/WebCore/html/track/TextTrackCue.h | 248 |
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 |