Home | History | Annotate | Download | only in shadow
      1 /*
      2  * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
      3  * Copyright (C) 2012 Google Inc. All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  *
      9  * 1.  Redistributions of source code must retain the above copyright
     10  *     notice, this list of conditions and the following disclaimer.
     11  * 2.  Redistributions in binary form must reproduce the above copyright
     12  *     notice, this list of conditions and the following disclaimer in the
     13  *     documentation and/or other materials provided with the distribution.
     14  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     15  *     its contributors may be used to endorse or promote products derived
     16  *     from this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     21  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     22  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28  */
     29 
     30 #ifndef MediaControlElements_h
     31 #define MediaControlElements_h
     32 
     33 #include "core/html/shadow/MediaControlElementTypes.h"
     34 
     35 namespace WebCore {
     36 
     37 // ----------------------------
     38 
     39 class MediaControlPanelElement FINAL : public MediaControlDivElement {
     40 public:
     41     static PassRefPtr<MediaControlPanelElement> create(Document*);
     42 
     43     void setCanBeDragged(bool);
     44     void setIsDisplayed(bool);
     45 
     46     void resetPosition();
     47     void makeOpaque();
     48     void makeTransparent();
     49 
     50     virtual bool willRespondToMouseMoveEvents() OVERRIDE { return true; }
     51     virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
     52 
     53 private:
     54     explicit MediaControlPanelElement(Document*);
     55 
     56     virtual const AtomicString& part() const OVERRIDE;
     57     virtual void defaultEventHandler(Event*) OVERRIDE;
     58 
     59     void startDrag(const LayoutPoint& eventLocation);
     60     void continueDrag(const LayoutPoint& eventLocation);
     61     void endDrag();
     62 
     63     void startTimer();
     64     void stopTimer();
     65     void transitionTimerFired(Timer<MediaControlPanelElement>*);
     66 
     67     void setPosition(const LayoutPoint&);
     68 
     69     bool m_canBeDragged;
     70     bool m_isBeingDragged;
     71     bool m_isDisplayed;
     72     bool m_opaque;
     73     LayoutPoint m_lastDragEventLocation;
     74     LayoutPoint m_cumulativeDragOffset;
     75 
     76     Timer<MediaControlPanelElement> m_transitionTimer;
     77 };
     78 
     79 // ----------------------------
     80 
     81 class MediaControlPanelEnclosureElement FINAL : public MediaControlDivElement {
     82 public:
     83     static PassRefPtr<MediaControlPanelEnclosureElement> create(Document*);
     84 
     85 private:
     86     explicit MediaControlPanelEnclosureElement(Document*);
     87     virtual const AtomicString& part() const OVERRIDE;
     88 };
     89 
     90 // ----------------------------
     91 
     92 class MediaControlOverlayEnclosureElement FINAL : public MediaControlDivElement {
     93 public:
     94     static PassRefPtr<MediaControlOverlayEnclosureElement> create(Document*);
     95 
     96 private:
     97     explicit MediaControlOverlayEnclosureElement(Document*);
     98     virtual const AtomicString& part() const OVERRIDE;
     99 };
    100 
    101 // ----------------------------
    102 
    103 class MediaControlPanelMuteButtonElement FINAL : public MediaControlMuteButtonElement {
    104 public:
    105     static PassRefPtr<MediaControlPanelMuteButtonElement> create(Document*, MediaControls*);
    106 
    107     virtual bool willRespondToMouseMoveEvents() OVERRIDE { return true; }
    108 
    109 private:
    110     explicit MediaControlPanelMuteButtonElement(Document*, MediaControls*);
    111 
    112     virtual const AtomicString& part() const OVERRIDE;
    113     virtual void defaultEventHandler(Event*) OVERRIDE;
    114 
    115     MediaControls* m_controls;
    116 };
    117 
    118 // ----------------------------
    119 
    120 class MediaControlVolumeSliderMuteButtonElement FINAL : public MediaControlMuteButtonElement {
    121 public:
    122     static PassRefPtr<MediaControlVolumeSliderMuteButtonElement> create(Document*);
    123 
    124 private:
    125     explicit MediaControlVolumeSliderMuteButtonElement(Document*);
    126     virtual const AtomicString& part() const OVERRIDE;
    127 };
    128 
    129 
    130 // ----------------------------
    131 
    132 class MediaControlPlayButtonElement FINAL : public MediaControlInputElement {
    133 public:
    134     static PassRefPtr<MediaControlPlayButtonElement> create(Document*);
    135 
    136     virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
    137     virtual void updateDisplayType() OVERRIDE;
    138 
    139 private:
    140     explicit MediaControlPlayButtonElement(Document*);
    141 
    142     virtual const AtomicString& part() const OVERRIDE;
    143     virtual void defaultEventHandler(Event*) OVERRIDE;
    144 };
    145 
    146 // ----------------------------
    147 
    148 class MediaControlOverlayPlayButtonElement FINAL : public MediaControlInputElement {
    149 public:
    150     static PassRefPtr<MediaControlOverlayPlayButtonElement> create(Document*);
    151 
    152     virtual void updateDisplayType() OVERRIDE;
    153 
    154 private:
    155     explicit MediaControlOverlayPlayButtonElement(Document*);
    156 
    157     virtual const AtomicString& part() const OVERRIDE;
    158     virtual void defaultEventHandler(Event*) OVERRIDE;
    159 };
    160 
    161 // ----------------------------
    162 
    163 class MediaControlToggleClosedCaptionsButtonElement FINAL : public MediaControlInputElement {
    164 public:
    165     static PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> create(Document*, MediaControls*);
    166 
    167     virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
    168 
    169     virtual void updateDisplayType() OVERRIDE;
    170 
    171 private:
    172     explicit MediaControlToggleClosedCaptionsButtonElement(Document*, MediaControls*);
    173 
    174     virtual const AtomicString& part() const OVERRIDE;
    175     virtual void defaultEventHandler(Event*) OVERRIDE;
    176 };
    177 
    178 // ----------------------------
    179 
    180 class MediaControlTimelineElement FINAL : public MediaControlInputElement {
    181 public:
    182     static PassRefPtr<MediaControlTimelineElement> create(Document*, MediaControls*);
    183 
    184     virtual bool willRespondToMouseClickEvents() OVERRIDE;
    185 
    186     void setPosition(double);
    187     void setDuration(double);
    188 
    189 private:
    190     explicit MediaControlTimelineElement(Document*, MediaControls*);
    191 
    192     virtual const AtomicString& part() const OVERRIDE;
    193     virtual void defaultEventHandler(Event*) OVERRIDE;
    194 
    195     MediaControls* m_controls;
    196 };
    197 
    198 // ----------------------------
    199 
    200 class MediaControlFullscreenButtonElement FINAL : public MediaControlInputElement {
    201 public:
    202     static PassRefPtr<MediaControlFullscreenButtonElement> create(Document*);
    203 
    204     virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
    205 
    206     virtual void setIsFullscreen(bool);
    207 
    208 private:
    209     explicit MediaControlFullscreenButtonElement(Document*);
    210 
    211     virtual const AtomicString& part() const OVERRIDE;
    212     virtual void defaultEventHandler(Event*) OVERRIDE;
    213 };
    214 
    215 // ----------------------------
    216 
    217 class MediaControlPanelVolumeSliderElement FINAL : public MediaControlVolumeSliderElement {
    218 public:
    219     static PassRefPtr<MediaControlPanelVolumeSliderElement> create(Document*);
    220 
    221 private:
    222     explicit MediaControlPanelVolumeSliderElement(Document*);
    223     virtual const AtomicString& part() const OVERRIDE;
    224 };
    225 
    226 // ----------------------------
    227 
    228 class MediaControlTimeRemainingDisplayElement FINAL : public MediaControlTimeDisplayElement {
    229 public:
    230     static PassRefPtr<MediaControlTimeRemainingDisplayElement> create(Document*);
    231 
    232 private:
    233     explicit MediaControlTimeRemainingDisplayElement(Document*);
    234     virtual const AtomicString& part() const OVERRIDE;
    235 };
    236 
    237 // ----------------------------
    238 
    239 class MediaControlCurrentTimeDisplayElement FINAL : public MediaControlTimeDisplayElement {
    240 public:
    241     static PassRefPtr<MediaControlCurrentTimeDisplayElement> create(Document*);
    242 
    243 private:
    244     explicit MediaControlCurrentTimeDisplayElement(Document*);
    245     virtual const AtomicString& part() const OVERRIDE;
    246 };
    247 
    248 // ----------------------------
    249 
    250 class MediaControlTextTrackContainerElement FINAL : public MediaControlDivElement {
    251 public:
    252     static PassRefPtr<MediaControlTextTrackContainerElement> create(Document*);
    253 
    254     void updateDisplay();
    255     void updateSizes(bool forceUpdate = false);
    256     static const AtomicString& textTrackContainerElementShadowPseudoId();
    257 
    258 private:
    259     explicit MediaControlTextTrackContainerElement(Document*);
    260     virtual const AtomicString& part() const OVERRIDE;
    261 
    262     virtual RenderObject* createRenderer(RenderStyle*);
    263 
    264     IntRect m_videoDisplaySize;
    265     float m_fontSize;
    266 };
    267 
    268 
    269 } // namespace WebCore
    270 
    271 #endif // MediaControlElements_h
    272