summaryrefslogtreecommitdiff
path: root/public/panorama/controls/movieplayer.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/panorama/controls/movieplayer.h
downloadarchived-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.h320
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