//=========== Copyright Valve Corporation, All rights reserved. ===============// // // Purpose: //=============================================================================// #ifndef PANORAMA_IMAGEPANEL_H #define PANORAMA_IMAGEPANEL_H #ifdef _WIN32 #pragma once #endif #include "panel2d.h" #include "../data/iimagesource.h" namespace panorama { DECLARE_PANEL_EVENT1( SetImageSource, const char * ); DECLARE_PANEL_EVENT0( ClearImageSource ); enum EImageScaling { k_EImageScalingNone, k_EImageScalingStretchBoth, k_EImageScalingStretchX, k_EImageScalingStretchY, k_EImageScalingStretchBothToFitPreserveAspectRatio, k_EImageScalingStretchXToFitPreserveAspectRatio, k_EImageScalingStretchYToFitPreserveAspectRatio, k_EImageScalingStretchBothToCoverPreserveAspectRatio }; enum EImageHorizontalAlignment { k_EImageHorizontalAlignmentCenter, k_EImageHorizontalAlignmentLeft, k_EImageHorizontalAlignmentRight, }; enum EImageVerticalAlignment { k_EImageVerticalAlignmentCenter, k_EImageVerticalAlignmentTop, k_EImageVerticalAlignmentBottom, }; //----------------------------------------------------------------------------- // Purpose: ImagePanel //----------------------------------------------------------------------------- class CImagePanel : public CPanel2D { DECLARE_PANEL2D( CImagePanel, CPanel2D ); public: CImagePanel( CPanel2D *parent, const char * pchPanelID ); virtual ~CImagePanel(); virtual void Paint(); virtual bool BSetProperties( const CUtlVector< ParsedPanelProperty_t > &vecProperties ); bool OnImageLoaded( const CPanelPtr< IUIPanel > &pPanel, IImageSource *pImage ); bool OnSetImageSource( const CPanelPtr &pPanel, const char *pchImageSource ); bool OnClearImageSource( const CPanelPtr &pPanel ); IImageSource *GetImage() { return m_pImage; } // Set an image from a URL (file://, http://), if pchDefaultImage is specified it must be a file:// url and will be // used while the actual image is loaded asynchronously, it will also remain in use if the actual image fails to load void SetImage( const char *pchImageURL, const char *pchDefaultImageURL = NULL, bool bPrioritizeLoad = false, int nResizeWidth = -1, int nResizeHeight = -1 ); // Set an image from an already created IImageSource, you should almost always use the simpler SetImage( pchImageURL, pchDefaultImageURL ) call. void SetImage( IImageSource *pImage ); void Clear(); bool IsSet() { return (m_pImage != NULL); } void SetScaling( EImageScaling eScale ); void SetScaling( CPanoramaSymbol symScale ); void SetAlignment( EImageHorizontalAlignment horAlign, EImageVerticalAlignment verAlign ); void SetVisibleImageSlice( int nX, int nY, int nWidth, int nHeight ); virtual void SetupJavascriptObjectTemplate() OVERRIDE; void GetDebugPropertyInfo( CUtlVector< DebugPropertyOutput_t *> *pvecProperties ); virtual bool BRequiresContentClipLayer(); void SetImageJS( const char *pchImageURL ); virtual bool IsClonable() OVERRIDE { return AreChildrenClonable(); } virtual CPanel2D *Clone() OVERRIDE; #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 ); virtual void InitClonedPanel( CPanel2D *pPanel ) OVERRIDE; private: EImageScaling m_eScaling; EImageHorizontalAlignment m_eHorAlignment; EImageVerticalAlignment m_eVerAlignment; int m_nVisibleSliceX; int m_nVisibleSliceY; int m_nVisibleSliceWidth; int m_nVisibleSliceHeight; CUtlString m_strSource; CUtlString m_strSourceDefault; bool m_bAnimate; IImageSource *m_pImage; float m_flPrevAnimateWidth; float m_flPrevAnimateHeight; }; } // namespace panorama #endif // PANORAMA_IMAGEPANEL_H