MediaControlElementTypes.h [plain text]
#ifndef MediaControlElementTypes_h
#define MediaControlElementTypes_h
#if ENABLE(VIDEO)
#include "HTMLDivElement.h"
#include "HTMLInputElement.h"
#include "HTMLMediaElement.h"
#include "MediaControllerInterface.h"
#include "RenderBlock.h"
namespace WebCore {
enum MediaControlElementType {
MediaEnterFullscreenButton = 0,
MediaMuteButton,
MediaPlayButton,
MediaSeekBackButton,
MediaSeekForwardButton,
MediaSlider,
MediaSliderThumb,
MediaRewindButton,
MediaReturnToRealtimeButton,
MediaShowClosedCaptionsButton,
MediaHideClosedCaptionsButton,
MediaUnMuteButton,
MediaPauseButton,
MediaTimelineContainer,
MediaCurrentTimeDisplay,
MediaTimeRemainingDisplay,
MediaStatusDisplay,
MediaControlsPanel,
MediaVolumeSliderContainer,
MediaVolumeSlider,
MediaVolumeSliderThumb,
MediaFullScreenVolumeSlider,
MediaFullScreenVolumeSliderThumb,
MediaVolumeSliderMuteButton,
MediaTextTrackDisplayContainer,
MediaTextTrackDisplay,
MediaExitFullscreenButton,
MediaOverlayPlayButton,
MediaClosedCaptionsContainer,
MediaClosedCaptionsTrackList,
};
HTMLMediaElement* parentMediaElement(Node*);
inline HTMLMediaElement* parentMediaElement(const RenderObject& renderer) { return parentMediaElement(renderer.node()); }
MediaControlElementType mediaControlElementType(Node*);
class MediaControlElement {
public:
virtual void hide();
virtual void show();
virtual bool isShowing() const;
virtual MediaControlElementType displayType() { return m_displayType; }
virtual const AtomicString& shadowPseudoId() const = 0;
virtual void setMediaController(MediaControllerInterface* controller) { m_mediaController = controller; }
virtual MediaControllerInterface* mediaController() const { return m_mediaController; }
protected:
explicit MediaControlElement(MediaControlElementType, HTMLElement*);
~MediaControlElement() { }
virtual void setDisplayType(MediaControlElementType);
virtual bool isMediaControlElement() const { return true; }
private:
MediaControllerInterface* m_mediaController;
MediaControlElementType m_displayType;
HTMLElement* m_element;
};
class MediaControlDivElement : public HTMLDivElement, public MediaControlElement {
protected:
virtual bool isMediaControlElement() const override { return MediaControlElement::isMediaControlElement(); }
explicit MediaControlDivElement(Document&, MediaControlElementType);
};
class MediaControlInputElement : public HTMLInputElement, public MediaControlElement {
protected:
virtual bool isMediaControlElement() const override { return MediaControlElement::isMediaControlElement(); }
explicit MediaControlInputElement(Document&, MediaControlElementType);
private:
virtual void updateDisplayType() { }
};
class MediaControlTimeDisplayElement : public MediaControlDivElement {
public:
void setCurrentValue(double);
double currentValue() const { return m_currentValue; }
protected:
explicit MediaControlTimeDisplayElement(Document&, MediaControlElementType);
private:
double m_currentValue;
};
class MediaControlMuteButtonElement : public MediaControlInputElement {
public:
void changedMute();
virtual bool willRespondToMouseClickEvents() override { return true; }
protected:
explicit MediaControlMuteButtonElement(Document&, MediaControlElementType);
virtual void defaultEventHandler(Event*) override;
private:
virtual void updateDisplayType() override;
};
class MediaControlSeekButtonElement : public MediaControlInputElement {
public:
virtual bool willRespondToMouseClickEvents() override { return true; }
protected:
explicit MediaControlSeekButtonElement(Document&, MediaControlElementType);
virtual void defaultEventHandler(Event*) override;
virtual bool isForwardButton() const = 0;
private:
virtual void setActive(bool = true, bool = false) override final;
};
class MediaControlVolumeSliderElement : public MediaControlInputElement {
public:
virtual bool willRespondToMouseMoveEvents() override;
virtual bool willRespondToMouseClickEvents() override;
void setVolume(double);
void setClearMutedOnUserInteraction(bool);
protected:
explicit MediaControlVolumeSliderElement(Document&);
virtual void defaultEventHandler(Event*) override;
private:
bool m_clearMutedOnUserInteraction;
};
}
#endif // ENABLE(VIDEO)
#endif // MediaControlElementTypes_h