diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/panorama/controls/movieplayer.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'public/panorama/controls/movieplayer.h')
| -rw-r--r-- | public/panorama/controls/movieplayer.h | 320 |
1 files changed, 320 insertions, 0 deletions
diff --git a/public/panorama/controls/movieplayer.h b/public/panorama/controls/movieplayer.h new file mode 100644 index 0000000..b76f100 --- /dev/null +++ b/public/panorama/controls/movieplayer.h @@ -0,0 +1,320 @@ +//=========== Copyright Valve Corporation, All rights reserved. ===============// +// +// Purpose: +//=============================================================================// + +#ifndef PANORAMA_MOVIEPLAYER_H +#define PANORAMA_MOVIEPLAYER_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "panel2d.h" +#include "../data/iimagesource.h" +#include "../data/panoramavideoplayer.h" +#include "panorama/uischeduleddel.h" + +namespace panorama +{ +class CToggleButton; +class CLabel; +class CSlider; + +DECLARE_PANEL_EVENT0( MoviePlayerAudioStart ); +DECLARE_PANEL_EVENT0( MoviePlayerAudioStop ); +DECLARE_PANEL_EVENT0( MoviePlayerPlaybackStart ); +DECLARE_PANEL_EVENT0( MoviePlayerPlaybackStop ); +DECLARE_PANEL_EVENT1( MoviePlayerPlaybackEnded, EVideoPlayerPlaybackError ); +DECLARE_PANORAMA_EVENT0( MoviePlayerTogglePlayPause ); +DECLARE_PANORAMA_EVENT0( MoviePlayerFastForward ); +DECLARE_PANEL_EVENT0( MoviePlayerUIVisible ); +DECLARE_PANORAMA_EVENT0( MoviePlayerJumpBack ); +DECLARE_PANORAMA_EVENT0( MoviePlayerVolumeControl ); +DECLARE_PANORAMA_EVENT0( MoviePlayerFullscreenControl ); +DECLARE_PANORAMA_EVENT1( MoviePlayerSetRepresentation, int ); +DECLARE_PANORAMA_EVENT0( MoviePlayerSelectVideoQuality ); + + +//----------------------------------------------------------------------------- +// Purpose: Base class for controls that pop above movie button bar +//----------------------------------------------------------------------------- +class CMovieControlPopupBase : public CPanel2D +{ +public: + CMovieControlPopupBase( CPanel2D *pInvokingPanel, const char *pchPanelID ); + virtual ~CMovieControlPopupBase() {} + + void Show( float flVolume ); + void Close(); + + virtual void OnLayoutTraverse( float flFinalWidth, float flFinalHeight ) OVERRIDE; + +protected: + bool EventCancelled( const CPanelPtr< IUIPanel > &pPanel, EPanelEventSource_t eSource ); + + CPanel2D *m_pInvisibleBackground; + CPanel2D *m_pInvokingPanel; + CPanel2D *m_pPopupBackground; +}; + + +//----------------------------------------------------------------------------- +// Purpose: Top level menu for volume slider +//----------------------------------------------------------------------------- +class CVolumeSliderPopup : public CMovieControlPopupBase +{ + DECLARE_PANEL2D( CVolumeSliderPopup, CMovieControlPopupBase ); + +public: + CVolumeSliderPopup( CPanel2D *pInvokingPanel, const char *pchPanelID ); + virtual ~CVolumeSliderPopup() {} + + void Show( float flVolume ); + virtual bool OnKeyDown( const KeyData_t &unichar ) OVERRIDE; + +private: + bool EventSliderValueChanged( const CPanelPtr< IUIPanel > &pPanel, float flValue ); + + CSlider *m_pSlider; +}; + + +//----------------------------------------------------------------------------- +// Purpose: Top level menu for showing video resolutions to select +//----------------------------------------------------------------------------- +class CMovieVideoQualityPopup : public CMovieControlPopupBase +{ + DECLARE_PANEL2D( CMovieVideoQualityPopup, CMovieControlPopupBase ); + +public: + CMovieVideoQualityPopup( CPanel2D *pInvokingPanel, const char *pchPanelID ); + virtual ~CMovieVideoQualityPopup() {} + + void AddRepresentation( int iRep, int nHeight ); + void Show( int iFocusRep, int nVideoHeight ); + +private: + struct Representation_t + { + int m_iRep; + int m_nHeight; + }; + + bool EventSetRepresentation( int iRep ); + static bool SortRepresentations( const Representation_t &lhs, const Representation_t &rhs ); + + CUtlVector< Representation_t > m_vecRepresentations; +}; + + +//----------------------------------------------------------------------------- +// Purpose: Movie panel. Just displays the movie +//----------------------------------------------------------------------------- +class CMoviePanel : public CPanel2D +{ + DECLARE_PANEL2D( CMoviePanel, CPanel2D ); + +public: + CMoviePanel( CPanel2D *parent, const char *pchPanelID ); + virtual ~CMoviePanel(); + + CVideoPlayerPtr GetMovie() { return m_pVideoPlayer; } + void SetMovie( const char *pchFile ); + void SetMovie( CVideoPlayerPtr pVideoPlayer ); + bool IsSet() { return (m_pVideoPlayer != NULL); } + void Clear(); + void SetPlaybackVolume( float flVolume ); + void SuggestMovieHeight(); + + virtual void Paint(); + +#ifdef DBGFLAG_VALIDATE + virtual void ValidateClientPanel( CValidator &validator, const tchar *pchName ) OVERRIDE; +#endif + +protected: + virtual void OnContentSizeTraverse( float *pflContentWidth, float *pflContentHeight, float flMaxWidth, float flMaxHeight, bool bFinalDimensions ) OVERRIDE; + virtual void OnLayoutTraverse( float flFinalWidth, float flFinalHeight ) OVERRIDE; + bool EventVideoPlayerInitialized( IVideoPlayer *pIMovie ); + +private: + CVideoPlayerPtr m_pVideoPlayer; +}; + + +//----------------------------------------------------------------------------- +// Purpose: Displays debug info for a movie +//----------------------------------------------------------------------------- +class CMovieDebug : public CPanel2D +{ + DECLARE_PANEL2D( CMovieDebug, CPanel2D ); + +public: + CMovieDebug( CPanel2D *pParent, const char *pchID ); + virtual ~CMovieDebug() {} + + void Show( CVideoPlayerPtr pVideoPlayer ); + +private: + void Update(); + + CVideoPlayerPtr m_pVideoPlayer; + CLabel *m_pDimensions; + CLabel *m_pResolution; + CLabel *m_pFileType; + CLabel *m_pVideoSegment; + CLabel *m_pVideoBandwidth; + + panorama::CUIScheduledDel m_scheduledUpdate; +}; + + +//----------------------------------------------------------------------------- +// Purpose: Movie player. Includes UI +//----------------------------------------------------------------------------- +class CMoviePlayer : public CPanel2D +{ + DECLARE_PANEL2D( CMoviePlayer, CPanel2D ); + +public: + CMoviePlayer( CPanel2D *parent, const char *pchPanelID ); + virtual ~CMoviePlayer(); + + virtual void SetupJavascriptObjectTemplate() OVERRIDE; + + CVideoPlayerPtr GetMovie() { return m_pMoviePanel->GetMovie(); } + void SetMovie( const char *pchFile ); + void SetMovie( CVideoPlayerPtr pVideoPlayer ); + bool IsSet() { return m_pMoviePanel->IsSet(); } + void Clear(); + + enum EAutoplay + { + k_EAutoplayOff, + k_EAutoplayOnLoad, + k_EAutoplayOnFocus + }; + + enum EControls + { + k_EControlsNone, + k_EControlsMinimal, + k_EControlsFull, + k_EControlsInvalid + }; + + void SetAutoplay( EAutoplay eAutoPlay, bool bSkipPlay = false ); + void SetRepeat( bool bRepeat ); + void SetControls( EControls eControls ); + void SetControls( const char *pchControls ); + + + virtual bool OnGamePadDown( const GamePadData_t &code ) OVERRIDE; + virtual bool OnKeyTyped( const KeyData_t &unichar ) OVERRIDE; + virtual panorama::IUIPanel *OnGetDefaultInputFocus() OVERRIDE; + + void Play(); + void Pause(); + void Stop(); + void TogglePlayPause(); + void FastForward(); + void Rewind(); + void SetPlaybackVolume( float flVolume ); + + // title control + void SetTitleText( const char *pchText ); + void ShowTitle( bool bImmediatelyVisible = false ); + void HideTitle(); + bool BAdjustingVolume(); + + virtual bool OnMouseButtonDown( const MouseData_t &code ); + +protected: + virtual bool BSetProperties( const CUtlVector< ParsedPanelProperty_t > &vecProperties ); + + static EControls EControlsFromString( const char *pchControls ); + + bool EventInputFocusSet( const CPanelPtr< IUIPanel > &ptrPanel ); + bool EventInputFocusLost( const CPanelPtr< IUIPanel > &ptrPanel ); + bool EventMovieInitialized( IVideoPlayer *pIMovie ); + bool EventVideoPlayerPlaybackStateChanged( IVideoPlayer *pIMovie ); + bool EventVideoPlayerChangedRepresentation( IVideoPlayer *pIMovie ); + bool EventVideoPlayerEnded( IVideoPlayer *pIMovie ); + bool EventActivated( const CPanelPtr< IUIPanel > &ptrPanel, EPanelEventSource_t eSource ); + bool EventCancelled( const CPanelPtr< IUIPanel > &ptrPanel, EPanelEventSource_t eSource ); + bool EventMovieTogglePlayPause(); + bool EventMoviePlayerFastForward(); + bool EventMoviePlayerJumpBack(); + bool EventMoviePlayerVolumeControl(); + bool EventMoviePlayerSelectQuality(); + bool EventSoundVolumeChanged( ESoundType eSoundType, float flVolume ); + bool EventSoundMuteChanged( bool bMute ); + bool EventSetRepresentation( int iRep ); + + void UpdateFullUI(); + void UpdateTimeline(); + void UpdatePlayPauseButton(); + void UpdatePlaybackSpeed(); + void Seek( uint unOffset ); + void RaisePlaybackStartEvents(); + void RaisePlaybackStopEvents(); + void DisplayControls( bool bVisible ); + void DisplayTimeline( bool bVisible ); + bool BAnyControlsVisible(); + bool BControlBarVisible(); + bool BTimelineVisible(); + void UpdateMovingPlayingStyle(); + void UpdateVolumeControls(); + void SetAudioVolumeStyle( CPanoramaSymbol symStyle ); + + void ShowTitleInternal( bool bImmediatelyVisible = false ); + void HideTitleInternal(); + +private: + CMoviePanel *m_pMoviePanel; + CPanelPtr< CMovieDebug > m_ptrDebug; + + // minimal UI + CPanel2D *m_pLoadingThrobber; + CPanel2D *m_pPlayIndicator; + CPanoramaSymbol m_symMoviePlaybackStyle; + + // title sections + CPanel2D *m_pPlaybackTitleAndControls; + CLabel *m_pPlaybackTitle; + bool m_bExternalShowTitle; + + // full UI + CPanel2D *m_pPlaybackControls; + CPanel2D *m_pPlaybackProgressBar; + CToggleButton *m_pPlayPauseBtn; + CLabel *m_pPlaybackSpeed; + CPanel2D *m_pTimeline; + CPanel2D *m_pControlBarRow; + CPanel2D *m_pVolumeControl; + CLabel *m_pErrorMessage; + CPanelPtr< CVolumeSliderPopup > m_ptrVolumeSlider; + CPanelPtr< CMovieVideoQualityPopup > m_ptrVideoQualityPopup; + CButton *m_pVideoQualityBtn; + + bool m_bInConstructor; + bool m_bRaisedAudioStartEvent; + bool m_bRaisedPlaybackStartEvent; + bool m_bHadFocus; + bool m_bCloseControlsOnPlay; + + EAutoplay m_eAutoplay; + EControls m_eControls; + bool m_bDisableActivatePause; + bool m_bShowControlsNotFullscreen; + bool m_bRepeat; + bool m_bMuted; // muted flag + float m_flVolume; // playback volume, defaults to movie volume setting + int m_iDesiredVideoRepresentation; // representation selected by user or -1. Video player might not yet have changed to playing this rep +}; + + +} // namespace panorama + +#endif // PANORAMA_MOVIEPLAYER_H |