Text track cues do not update sizes when entering or exiting full screen.
authorjer.noble@apple.com <jer.noble@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 18 Mar 2013 22:51:31 +0000 (22:51 +0000)
committerjer.noble@apple.com <jer.noble@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 18 Mar 2013 22:51:31 +0000 (22:51 +0000)
https://bugs.webkit.org/show_bug.cgi?id=112472

Reviewed by Eric Carlson.

The style properties of the TextCueBoxes were not being updated after the size of the video bounds changed.
Because getDisplayTree() will not do it when the cue itself has not changed, explicitly call videoSizeDidChange()
from updateSizes().

* html/shadow/MediaControlElements.cpp:
(WebCore::MediaControlTextTrackContainerElement::updateSizes): call videoSizeDidChange() on every active cue.
* html/track/TextTrackCue.h:
(WebCore::TextTrackCue::hasDisplayTree): returns whether or not the cue has created a display tree without side effects.
(WebCore::TextTrackCue::videoSizeDidChange): Overridable empty method.
* html/track/TextTrackCueGeneric.cpp:
(WebCore::TextTrackCueGeneric::videoSizeDidChange): Update the CSS height attribute of the cue box using the new video size.
* html/track/TextTrackCueGeneric.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@146140 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/html/shadow/MediaControlElements.cpp
Source/WebCore/html/track/TextTrackCue.h
Source/WebCore/html/track/TextTrackCueGeneric.cpp
Source/WebCore/html/track/TextTrackCueGeneric.h

index 2cea6ce..79758ff 100644 (file)
@@ -1,3 +1,23 @@
+2013-03-15  Jer Noble  <jer.noble@apple.com>
+
+        Text track cues do not update sizes when entering or exiting full screen.
+        https://bugs.webkit.org/show_bug.cgi?id=112472
+
+        Reviewed by Eric Carlson.
+
+        The style properties of the TextCueBoxes were not being updated after the size of the video bounds changed.
+        Because getDisplayTree() will not do it when the cue itself has not changed, explicitly call videoSizeDidChange()
+        from updateSizes().
+
+        * html/shadow/MediaControlElements.cpp:
+        (WebCore::MediaControlTextTrackContainerElement::updateSizes): call videoSizeDidChange() on every active cue.
+        * html/track/TextTrackCue.h:
+        (WebCore::TextTrackCue::hasDisplayTree): returns whether or not the cue has created a display tree without side effects.
+        (WebCore::TextTrackCue::videoSizeDidChange): Overridable empty method.
+        * html/track/TextTrackCueGeneric.cpp:
+        (WebCore::TextTrackCueGeneric::videoSizeDidChange): Update the CSS height attribute of the cue box using the new video size.
+        * html/track/TextTrackCueGeneric.h:
+
 2013-03-18  Mike West  <mkwst@chromium.org>
 
         CSP 1.1: Add 'effective-directive' to violation reports.
index 829eb85..10392ec 100644 (file)
@@ -1339,6 +1339,12 @@ void MediaControlTextTrackContainerElement::updateSizes(bool forceUpdate)
         m_fontSize = fontSize;
         setInlineStyleProperty(CSSPropertyFontSize, String::number(fontSize) + "px", important);
     }
+
+    CueList activeCues = mediaElement->currentlyActiveCues();
+    for (size_t i = 0; i < activeCues.size(); ++i) {
+        TextTrackCue* cue = activeCues[i].data();
+        cue->videoSizeDidChange(m_videoDisplaySize.size());
+    }
 }
 
 void MediaControlTextTrackContainerElement::paintTextTrackRepresentation(GraphicsContext* context, const IntRect& contextRect)
index 4808b19..ec6930c 100644 (file)
@@ -138,6 +138,7 @@ public:
     bool isActive();
     void setIsActive(bool);
 
+    bool hasDisplayTree() const { return m_displayTree; }
     PassRefPtr<TextTrackCueBox> getDisplayTree(const IntSize& videoSize);
     PassRefPtr<HTMLDivElement> element() const { return m_cueBackgroundBox; }
 
@@ -171,6 +172,8 @@ public:
     };
     CueAlignment getAlignment() const { return m_cueAlignment; }
 
+    virtual void videoSizeDidChange(const IntSize&) { }
+
     virtual bool operator==(const TextTrackCue&) const;
     virtual bool operator!=(const TextTrackCue& cue) const
     {
index 26f4472..c1987fe 100644 (file)
@@ -135,6 +135,20 @@ void TextTrackCueGeneric::setPosition(int position, ExceptionCode& ec)
     TextTrackCue::setPosition(position, ec);
 }
 
+void TextTrackCueGeneric::videoSizeDidChange(const IntSize& videoSize)
+{
+    if (!hasDisplayTree())
+        return;
+
+    if (baseFontSizeRelativeToVideoHeight()) {
+        double fontSize = videoSize.height() * baseFontSizeRelativeToVideoHeight() / 100;
+        if (fontSizeMultiplier())
+            fontSize *= fontSizeMultiplier() / 100;
+        displayTreeInternal()->setInlineStyleProperty(CSSPropertyFontSize, String::number(fontSize) + "px");
+    }
+
+}
+
 bool TextTrackCueGeneric::operator==(const TextTrackCue& cue) const
 {
     if (cue.cueType() != TextTrackCue::Generic)
index 5e97ec9..00a7298 100644 (file)
@@ -68,6 +68,8 @@ public:
     Color backgroundColor() const { return m_backgroundColor; }
     void setBackgroundColor(RGBA32 color) { m_backgroundColor.setRGB(color); }
 
+    virtual void videoSizeDidChange(const IntSize&);
+
     virtual bool operator==(const TextTrackCue&) const OVERRIDE;
     virtual bool operator!=(const TextTrackCue& cue) const OVERRIDE
     {