Changeset 116900 in webkit


Ignore:
Timestamp:
May 13, 2012 12:11:51 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Volume slider needs to be displayed below the mute button
https://bugs.webkit.org/show_bug.cgi?id=85990

Patch by Victor Carbune <vcarbune@adobe.com> on 2012-05-13
Reviewed by Dimitri Glazkov.

Source/WebCore:

Added back code for rendering offset, but used only when the volume slider
needs to be displayed below the controls.

Test: media/media-volume-slider-rendered-below.html

  • css/mediaControlsChromium.css:

(audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
Changed positioning of the slider to absolute, otherwise it is not possible to position it from the layout() method.

  • css/mediaControlsQuickTime.css:

Added back the double mute-button and changed the z-index of the original button. When the slider is displayed
the second mute button is actually there.
(audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
(audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
(audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
Added copy.

  • html/shadow/MediaControlElements.cpp:

(WebCore::MediaControlPanelElement::makeTransparent): Disabled the possible of hiding controls. WebVTT rendering
in the place of controls when these are visible is not possible with the current code.
(RenderMediaVolumeSliderContainer):
(WebCore):
(WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
(WebCore::RenderMediaVolumeSliderContainer::layout):
Checked if the absolute coordinates of the corner of the slider would be rendered outside the page. This part of the
code is faulty if display:none is toggled on the controls.
(WebCore::MediaControlVolumeSliderContainerElement::createRenderer):

  • html/shadow/MediaControlElements.h:

(MediaControlVolumeSliderContainerElement):

  • html/shadow/MediaControlRootElement.cpp:

(WebCore::MediaControlRootElement::create):

LayoutTests:

Updated tests expectation and marked failing tests accordingly.

  • media/media-volume-slider-rendered-below.html: Added.
  • media/media-volume-slider-rendered-expected.txt: Added.
  • platform/chromium/test_expectations.txt: Updated.
  • platform/mac/media/audio-controls-rendering-expected.txt: Updated (z-index change).
  • platform/mac/media/controls-after-reload-expected.txt: Same.
  • platform/mac/media/controls-strict-expected.txt: Same.
  • platform/mac/media/video-controls-rendering-expected.txt: Same.
  • platform/mac/media/video-display-toggle-expected.txt: Same.
  • platform/mac/media/video-playing-and-pause-expected.txt: Same.
  • platform/mac/test_expectations.txt: Updated.
Location:
trunk
Files:
2 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r116864 r116900  
     12012-05-13  Victor Carbune  <vcarbune@adobe.com>
     2
     3        Volume slider needs to be displayed below the mute button
     4        https://bugs.webkit.org/show_bug.cgi?id=85990
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        Updated tests expectation and marked failing tests accordingly.
     9
     10        * media/media-volume-slider-rendered-below.html: Added.
     11        * media/media-volume-slider-rendered-expected.txt: Added.
     12        * platform/chromium/test_expectations.txt: Updated.
     13        * platform/mac/media/audio-controls-rendering-expected.txt: Updated (z-index change).
     14        * platform/mac/media/controls-after-reload-expected.txt: Same.
     15        * platform/mac/media/controls-strict-expected.txt: Same.
     16        * platform/mac/media/video-controls-rendering-expected.txt: Same.
     17        * platform/mac/media/video-display-toggle-expected.txt: Same.
     18        * platform/mac/media/video-playing-and-pause-expected.txt: Same.
     19        * platform/mac/test_expectations.txt: Updated.
     20
    1212012-05-12  Abhishek Arya  <inferno@chromium.org>
    222
  • trunk/LayoutTests/platform/chromium/test_expectations.txt

    r116849 r116900  
    30483048BUGWK83882 : media/track/track-mode.html = PASS TEXT TIMEOUT
    30493049
     3050BUGWK85990 : media/video-controls-rendering-toggle-display-none.html = TEXT
     3051BUGWK85990 : media/video-controls-toggling.html = TIMEOUT
     3052
     3053// Needs rebaseline.
     3054BUGWK85990 : media/video-volume-slider.html = TEXT
     3055
    30503056BUGWK72271 MAC DEBUG : fast/loader/javascript-url-in-embed.html = PASS CRASH
    30513057BUGWK72271 SNOWLEOPARD DEBUG : fast/dom/node-iterator-reference-node-moved-crash.html = PASS CRASH
  • trunk/LayoutTests/platform/mac/media/audio-controls-rendering-expected.txt

    r115885 r116900  
    3030  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    3131layer at (185,48) size 14x12
    32   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     32  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
    3333layer at (8,85) size 320x25
    3434  RenderDeprecatedFlexibleBox (relative positioned) {DIV} at (0,0) size 320x25
     
    5656  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    5757layer at (305,91) size 14x12
    58   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     58  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
    5959layer at (8,128) size 320x100
    6060  RenderMedia {AUDIO} at (8,128) size 320x100 [bgcolor=#0000FF]
     
    8484  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    8585layer at (305,209) size 14x12
    86   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     86  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
  • trunk/LayoutTests/platform/mac/media/controls-after-reload-expected.txt

    r115879 r116900  
    3737  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    3838layer at (275,263) size 14x12
    39   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     39  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
  • trunk/LayoutTests/platform/mac/media/controls-strict-expected.txt

    r115879 r116900  
    3737  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    3838layer at (275,271) size 14x12
    39   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     39  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
  • trunk/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt

    r115879 r116900  
    4242  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    4343layer at (275,263) size 14x12
    44   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     44  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
    4545layer at (8,282) size 320x240
    4646  RenderDeprecatedFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     
    6969  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    7070layer at (275,503) size 14x12
    71   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     71  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
    7272layer at (8,522) size 320x240
    7373  RenderVideo {VIDEO} at (8,522) size 320x240
     
    9898  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    9999layer at (275,743) size 14x12
    100   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     100  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
  • trunk/LayoutTests/platform/mac/media/video-display-toggle-expected.txt

    r115879 r116900  
    3636  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    3737layer at (275,247) size 14x12
    38   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     38  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
  • trunk/LayoutTests/platform/mac/media/video-playing-and-pause-expected.txt

    r115879 r116900  
    3838  RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
    3939layer at (275,289) size 14x12
    40   RenderButton zI: 2 {INPUT} at (2,0) size 14x12
     40  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
  • trunk/LayoutTests/platform/mac/test_expectations.txt

    r116808 r116900  
    205205BUGWK85689 SKIP : fast/animation/request-animation-frame-disabled.html = TEXT
    206206
     207BUGWK85990 : media/video-controls-rendering-toggle-display-none.html = TEXT
     208BUGWK85990 : media/video-controls-toggling.html = TIMEOUT TEXT
     209
    207210BUGWK85308 : ietestcenter/css3/valuesandunits/units-000.htm = IMAGE
    208211BUGWK85310 : ietestcenter/css3/valuesandunits/units-010.htm = IMAGE
  • trunk/Source/WebCore/ChangeLog

    r116899 r116900  
     12012-05-13  Victor Carbune  <vcarbune@adobe.com>
     2
     3        Volume slider needs to be displayed below the mute button
     4        https://bugs.webkit.org/show_bug.cgi?id=85990
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        Added back code for rendering offset, but used only when the volume slider
     9        needs to be displayed below the controls.
     10
     11        Test: media/media-volume-slider-rendered-below.html
     12
     13        * css/mediaControlsChromium.css:
     14        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
     15        Changed positioning of the slider to absolute, otherwise it is not possible to position it from the layout() method.
     16        * css/mediaControlsQuickTime.css:
     17        Added back the double mute-button and changed the z-index of the original button. When the slider is displayed
     18        the second mute button is actually there.
     19        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
     20        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
     21        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
     22        Added copy.
     23        * html/shadow/MediaControlElements.cpp:
     24        (WebCore::MediaControlPanelElement::makeTransparent): Disabled the possible of hiding controls. WebVTT rendering
     25        in the place of controls when these are visible is not possible with the current code.
     26        (RenderMediaVolumeSliderContainer):
     27        (WebCore):
     28        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
     29        (WebCore::RenderMediaVolumeSliderContainer::layout):
     30        Checked if the absolute coordinates of the corner of the slider would be rendered outside the page. This part of the
     31        code is faulty if display:none is toggled on the controls.
     32        (WebCore::MediaControlVolumeSliderContainerElement::createRenderer):
     33        * html/shadow/MediaControlElements.h:
     34        (MediaControlVolumeSliderContainerElement):
     35        * html/shadow/MediaControlRootElement.cpp:
     36        (WebCore::MediaControlRootElement::create):
     37
    1382012-05-13  Igor Oliveira  <igor.o@sisa.samsung.com>
    239
  • trunk/Source/WebCore/css/mediaControlsChromium.css

    r114957 r116900  
    155155audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container {
    156156    -webkit-appearance: media-volume-slider-container;
    157     position: relative;
     157    position: absolute;
     158    bottom: 32px;
    158159
    159160    width: 34px;
  • trunk/Source/WebCore/css/mediaControlsQuickTime.css

    r114957 r116900  
    5151
    5252    position: relative;
    53     z-index: 2;
     53    z-index: 1;
    5454}
    5555
     
    205205
    206206    bottom: 0px;
    207     z-index: 1;
     207    z-index: 2;
    208208
    209209    width: 22px;
     
    222222    height: 80px;
    223223}
     224
     225audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button {
     226    -webkit-appearance: media-volume-slider-mute-button;
     227    display: inline;
     228
     229    position: absolute;
     230
     231    bottom: 7px;
     232    left: 0px;
     233
     234    width: 14px;
     235    height: 12px;
     236
     237    margin-left: 2px;
     238    margin-right: 9px;
     239
     240    border: none !important;
     241}
  • trunk/Source/WebCore/html/shadow/MediaControlElements.cpp

    r115215 r116900  
    257257
    258258    m_opaque = false;
    259 
    260     startTimer();
    261259}
    262260
     
    323321// ----------------------------
    324322
     323class RenderMediaVolumeSliderContainer : public RenderBlock {
     324public:
     325    RenderMediaVolumeSliderContainer(Node*);
     326
     327private:
     328    virtual void layout();
     329};
     330
     331RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer(Node* node)
     332    : RenderBlock(node)
     333{
     334}
     335
     336void RenderMediaVolumeSliderContainer::layout()
     337{
     338    RenderBlock::layout();
     339
     340    if (style()->display() == NONE || !nextSibling() || !nextSibling()->isBox())
     341        return;
     342
     343    RenderBox* buttonBox = toRenderBox(nextSibling());
     344    int absoluteOffsetTop = buttonBox->localToAbsolute(FloatPoint(0, -size().height())).y();
     345
     346    LayoutStateDisabler layoutStateDisabler(view());
     347
     348    // If the slider would be rendered outside the page, it should be moved below the controls.
     349    if (UNLIKELY(absoluteOffsetTop < 0))
     350        setY(buttonBox->offsetTop() + theme()->volumeSliderOffsetFromMuteButton(buttonBox, pixelSnappedSize()).y());
     351}
     352
    325353inline MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement(Document* document)
    326354    : MediaControlElement(document)
     
    333361    element->hide();
    334362    return element.release();
     363}
     364
     365RenderObject* MediaControlVolumeSliderContainerElement::createRenderer(RenderArena* arena, RenderStyle*)
     366{
     367    return new (arena) RenderMediaVolumeSliderContainer(this);
    335368}
    336369
  • trunk/Source/WebCore/html/shadow/MediaControlElements.h

    r115125 r116900  
    162162private:
    163163    MediaControlVolumeSliderContainerElement(Document*);
     164    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
    164165    virtual void defaultEventHandler(Event*);
    165166    virtual MediaControlElementType displayType() const;
  • trunk/Source/WebCore/html/shadow/MediaControlRootElement.cpp

    r115125 r116900  
    184184        controls->m_volumeSlider = slider.get();
    185185        volumeSliderContainer->appendChild(slider.release(), ec, true);
     186        if (ec)
     187            return 0;
     188
     189        // This is a duplicate mute button, which is visible in some ports at the bottom of the volume bar.
     190        // It's important only when the volume bar is displayed below the controls.
     191        RefPtr<MediaControlVolumeSliderMuteButtonElement> volumeSliderMuteButton = MediaControlVolumeSliderMuteButtonElement::create(document);
     192        controls->m_volumeSliderMuteButton = volumeSliderMuteButton.get();
     193        volumeSliderContainer->appendChild(volumeSliderMuteButton.release(), ec, true);
     194
    186195        if (ec)
    187196            return 0;
Note: See TracChangeset for help on using the changeset viewer.