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 /game/client/game_controls/slideshowpanel.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/game_controls/slideshowpanel.h')
| -rw-r--r-- | game/client/game_controls/slideshowpanel.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/game/client/game_controls/slideshowpanel.h b/game/client/game_controls/slideshowpanel.h new file mode 100644 index 0000000..498a44c --- /dev/null +++ b/game/client/game_controls/slideshowpanel.h @@ -0,0 +1,105 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +//=======================================================================================// + +#ifndef SLIDESHOWPANEL_H +#define SLIDESHOWPANEL_H +#ifdef _WIN32 +#pragma once +#endif + +#include "vgui_controls/EditablePanel.h" +#include "vgui_controls/ProgressBar.h" +#include "vgui_controls/ImagePanel.h" + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: Allows fade from one image to another +//----------------------------------------------------------------------------- +class CCrossfadableImagePanel : public EditablePanel +{ + DECLARE_CLASS_SIMPLE( CCrossfadableImagePanel, EditablePanel ); +public: + CCrossfadableImagePanel( Panel* pParent, const char *pName ); + ~CCrossfadableImagePanel(); + + virtual void ApplySettings( KeyValues *pInResourceData ); + virtual void ApplySchemeSettings( IScheme *pScheme ); + virtual void PerformLayout(); + + // A duplicate of the ImagePanel interface - the only difference being that + // here we have blend times for SetImage(). + void SetImage( IImage *pImage, float flBlendTime = 0.0f ); + void SetImage( const char *pImageName, float flBlendTime = 0.0f ); + + void SetShouldScaleImage( bool bState ); + void SetScaleAmount( float flScale ); + void SetDrawColor( Color clrDrawColor ); + + IImage *GetImage(); + const char *GetImageName(); + void SetFillColor( Color c ); + float GetScaleAmount(); + bool GetShouldScaleImage(); + Color GetFillColor(); + Color GetDrawColor(); + + virtual void InstallMouseHandler( Panel *pHandler ); + +private: + virtual void OnSizeChanged( int nWide, int nTall ); + virtual void OnTick(); + + inline ImagePanel *SrcImg() { return m_pImages[ m_iSrcImg ]; } + inline ImagePanel *DstImg() { return m_pImages[ !m_iSrcImg ]; } + + void SetupImageBlend( float flBlendTime ); + + float m_flStartBlendTime; // the gpGlobals->realtime when we started blending + float m_flBlendTime; // amount of time to blend from one image to the next one + float m_flBlend; // blend value in [0,1] where 0 maps to the source image, and 1 maps to the dest image + bool m_bBlending; // are we currently transitioning/blending from one image to another? + ImagePanel* m_pImages[2]; + int m_iSrcImg; // 0 or 1 +}; + +//----------------------------------------------------------------------------- +// Purpose: Displays a slideshow of images at a set interval +//----------------------------------------------------------------------------- +class CSlideshowPanel : public EditablePanel +{ + DECLARE_CLASS_SIMPLE( CSlideshowPanel, EditablePanel ); +public: + CSlideshowPanel( Panel *pParent, const char *pName ); + ~CSlideshowPanel(); + + // Pass in a vgui-relative path, like "training/screenshots/cp_dustbowl_", and + // the slideshow panel will add "0.vmt", "1.vmt" etc. until it can't find anymore images. + void FillWithImages( const char *pBasePath ); + + void AddImage( const char *pImageName ); + void AddImage( IImage *pImage ); + + void SetInterval( float flInterval ); + void SetTransitionTime( float flTransitionLength ); + + CCrossfadableImagePanel *GetImagePanel() { return m_pImagePanel; } + + int GetImageCount() const { return m_vecImages.Count(); } + +private: + virtual void ApplySettings( KeyValues *pInResourceData ); + virtual void OnSizeChanged( int nWide, int nTall ); + virtual void OnTick(); + void UpdateNextTransitionTime(); + + CCrossfadableImagePanel *m_pImagePanel; + CUtlVector< IImage * > m_vecImages; + float m_flNextTransitionTime; // gpGlobals->realtime of time when we should transition next + float m_flInterval; // Amount of time between blend begins to next image, in seconds + float m_flTransitionLength; // Length of each transition + int m_iCurImg; // Current image index +}; + +#endif // SLIDESHOWPANEL_H |