Changeset 48822 in webkit


Ignore:
Timestamp:
Sep 28, 2009 11:43:54 AM (15 years ago)
Author:
eric@webkit.org
Message:

2009-09-28 Andrew Scherkus <scherkus@chromium.org>

Reviewed by Eric Carlson.

Delegate implementation of rendererIsNeeded() for media control elements to RenderTheme.

https://bugs.webkit.org/show_bug.cgi?id=28689

Covered by LayoutTests/media/video-no-audio.html

  • rendering/MediaControlElements.cpp: Removed subclass implementations of rendererIsNeeded(). (WebCore::MediaControlElement::rendererIsNeeded): Include calling shouldRenderMediaControlPart(). (WebCore::MediaControlInputElement::rendererIsNeeded): Include calling shouldRenderMediaControlPart().
  • rendering/MediaControlElements.h:
  • rendering/RenderTheme.cpp: (WebCore::RenderTheme::shouldRenderMediaControlPart): New method. Contains logic moved from subclass implementations of rendererIsNeeded().
  • rendering/RenderTheme.h:
  • rendering/RenderThemeChromiumSkia.cpp: (WebCore::RenderThemeChromiumSkia::shouldRenderMediaControlPart): Override to always render mute button.
  • rendering/RenderThemeChromiumSkia.h:
Location:
trunk/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r48821 r48822  
     12009-09-28  Andrew Scherkus  <scherkus@chromium.org>
     2
     3        Reviewed by Eric Carlson.
     4
     5        Delegate implementation of rendererIsNeeded() for media control elements to RenderTheme.
     6
     7        https://bugs.webkit.org/show_bug.cgi?id=28689
     8
     9        Covered by LayoutTests/media/video-no-audio.html
     10
     11        * rendering/MediaControlElements.cpp: Removed subclass implementations of rendererIsNeeded().
     12        (WebCore::MediaControlElement::rendererIsNeeded): Include calling shouldRenderMediaControlPart().
     13        (WebCore::MediaControlInputElement::rendererIsNeeded): Include calling shouldRenderMediaControlPart().
     14        * rendering/MediaControlElements.h:
     15        * rendering/RenderTheme.cpp:
     16        (WebCore::RenderTheme::shouldRenderMediaControlPart): New method.  Contains logic moved from subclass implementations of rendererIsNeeded().
     17        * rendering/RenderTheme.h:
     18        * rendering/RenderThemeChromiumSkia.cpp:
     19        (WebCore::RenderThemeChromiumSkia::shouldRenderMediaControlPart): Override to always render mute button.
     20        * rendering/RenderThemeChromiumSkia.h:
     21
    1222009-09-28  Jian Li  <jianli@chromium.org>
    223
  • trunk/WebCore/rendering/MediaControlElements.cpp

    r47774 r48822  
    136136bool MediaControlElement::rendererIsNeeded(RenderStyle* style)
    137137{
    138     return HTMLDivElement::rendererIsNeeded(style) && parent() && parent()->renderer();
     138    ASSERT(document()->page());
     139
     140    return HTMLDivElement::rendererIsNeeded(style) && parent() && parent()->renderer()
     141        && document()->page()->theme()->shouldRenderMediaControlPart(style->appearance(), m_mediaElement);
    139142}
    140143   
     
    361364bool MediaControlInputElement::rendererIsNeeded(RenderStyle* style)
    362365{
    363     return HTMLInputElement::rendererIsNeeded(style) && parent() && parent()->renderer();
     366    ASSERT(document()->page());
     367
     368    return HTMLInputElement::rendererIsNeeded(style) && parent() && parent()->renderer()
     369        && document()->page()->theme()->shouldRenderMediaControlPart(style->appearance(), m_mediaElement);
    364370}
    365371
     
    443449{
    444450    setDisplayType(m_mediaElement->muted() ? MediaUnMuteButton : MediaMuteButton);
    445 }
    446 
    447 bool MediaControlMuteButtonElement::disabled() const
    448 {
    449     return !m_mediaElement->hasAudio();
    450 }
    451 
    452 bool MediaControlMuteButtonElement::rendererIsNeeded(RenderStyle* style)
    453 {
    454     return MediaControlInputElement::rendererIsNeeded(style) && !disabled();
    455451}
    456452
     
    552548}
    553549
    554 bool MediaControlRewindButtonElement::rendererIsNeeded(RenderStyle* style)
    555 {
    556     return MediaControlInputElement::rendererIsNeeded(style) && m_mediaElement->movieLoadType() != MediaPlayer::LiveStream;
    557 }
    558 
    559550
    560551// ----------------------------
     
    574565}
    575566
    576 bool MediaControlReturnToRealtimeButtonElement::rendererIsNeeded(RenderStyle* style)
    577 {
    578     return MediaControlInputElement::rendererIsNeeded(style) && m_mediaElement->movieLoadType() == MediaPlayer::LiveStream;
    579 }
    580567
    581568// ----------------------------
     
    663650    }
    664651    HTMLInputElement::defaultEventHandler(event);
    665 }
    666 
    667 bool MediaControlFullscreenButtonElement::rendererIsNeeded(RenderStyle* style)
    668 {
    669     return MediaControlInputElement::rendererIsNeeded(style) && m_mediaElement->supportsFullscreen();
    670652}
    671653
  • trunk/WebCore/rendering/MediaControlElements.h

    r47763 r48822  
    156156    MediaControlElementType displayType() const { return m_displayType; }
    157157
    158     // Some elements are disabled by movie state (eg. mute if no audio).
    159     virtual bool disabled() const  { return false; }
    160 
    161158    HTMLMediaElement* mediaElement() const { return m_mediaElement; }
    162159    virtual bool isMediaControlElement() const { return true; }
     
    178175    virtual void defaultEventHandler(Event*);
    179176    virtual void updateDisplayType();
    180     virtual bool disabled() const;
    181     virtual bool rendererIsNeeded(RenderStyle*);
    182177};
    183178
     
    213208    MediaControlRewindButtonElement(Document*, HTMLMediaElement*);
    214209    virtual void defaultEventHandler(Event*);
    215     virtual bool rendererIsNeeded(RenderStyle*);
    216210};
    217211
     
    222216    MediaControlReturnToRealtimeButtonElement(Document*, HTMLMediaElement*);
    223217    virtual void defaultEventHandler(Event*);
    224     virtual bool rendererIsNeeded(RenderStyle*);
    225218};   
    226219
     
    248241    MediaControlFullscreenButtonElement(Document*, HTMLMediaElement*);
    249242    virtual void defaultEventHandler(Event*);
    250     virtual bool rendererIsNeeded(RenderStyle*);
    251243};
    252244
  • trunk/WebCore/rendering/RenderTheme.cpp

    r47744 r48822  
    3131#include "HTMLInputElement.h"
    3232#include "HTMLNames.h"
     33#include "MediaControlElements.h"
    3334#include "Page.h"
    3435#include "RenderStyle.h"
     
    397398    return toRenderBox(o)->borderBoxRect().contains(roundedIntPoint(localPoint));
    398399}
     400
     401bool RenderTheme::shouldRenderMediaControlPart(ControlPart part, Element* e)
     402{
     403    HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(e);
     404    switch (part) {
     405    case MediaMuteButtonPart:
     406        return mediaElement->hasAudio();
     407    case MediaRewindButtonPart:
     408        return mediaElement->movieLoadType() != MediaPlayer::LiveStream;
     409    case MediaReturnToRealtimeButtonPart:
     410        return mediaElement->movieLoadType() == MediaPlayer::LiveStream;
     411    case MediaFullscreenButtonPart:
     412        return mediaElement->supportsFullscreen();
     413    default:
     414        return true;
     415    }
     416}
    399417#endif
    400418
  • trunk/WebCore/rendering/RenderTheme.h

    r47744 r48822  
    173173    // Media controls
    174174    virtual bool hitTestMediaControlPart(RenderObject*, const IntPoint& absPoint);
     175    virtual bool shouldRenderMediaControlPart(ControlPart, Element*);
    175176#endif
    176177
  • trunk/WebCore/rendering/RenderThemeChromiumSkia.cpp

    r48499 r48822  
    869869}
    870870
     871#if ENABLE(VIDEO)
     872bool RenderThemeChromiumSkia::shouldRenderMediaControlPart(ControlPart part, Element* e)
     873{
     874    HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(e);
     875    switch (part) {
     876    case MediaMuteButtonPart:
     877        return true;
     878    default:
     879        return RenderTheme::shouldRenderMediaControlPart(part, e);
     880    }
     881}
     882#endif
     883
    871884// static
    872885void RenderThemeChromiumSkia::setDefaultFontSize(int fontSize)
  • trunk/WebCore/rendering/RenderThemeChromiumSkia.h

    r48045 r48822  
    127127        virtual int buttonInternalPaddingBottom() const;
    128128
     129#if ENABLE(VIDEO)
     130        // Media controls
     131        virtual bool shouldRenderMediaControlPart(ControlPart, Element*);
     132#endif
     133
    129134        // Provide a way to pass the default font size from the Settings object
    130135        // to the render theme.  FIXME: http://b/1129186 A cleaner way would be
Note: See TracChangeset for help on using the changeset viewer.