You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
320 lines
9.6 KiB
320 lines
9.6 KiB
//=========== 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
|
|
|