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.
106 lines
3.7 KiB
106 lines
3.7 KiB
5 years ago
|
//========= 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
|