diff options
Diffstat (limited to 'public/panorama/panoramatypes.h')
| -rw-r--r-- | public/panorama/panoramatypes.h | 594 |
1 files changed, 594 insertions, 0 deletions
diff --git a/public/panorama/panoramatypes.h b/public/panorama/panoramatypes.h new file mode 100644 index 0000000..e7cb836 --- /dev/null +++ b/public/panorama/panoramatypes.h @@ -0,0 +1,594 @@ +//=========== Copyright Valve Corporation, All rights reserved. ===============// +// +// Purpose: Public header for panorama UI framework +// +// +//=============================================================================// +#ifndef PANORAMATYPES_H +#define PANORAMATYPES_H +#pragma once + +#ifdef POSIX +#include <float.h> +#endif +#include "mathlib/vector.h" + +#ifdef SOURCE2_PANORAMA +#include "tier1/mempool.h" +#include "tier1/checksum_sha1.h" + +class ISceneView; +class IRenderContext; +class ISceneLayer; +typedef void (RenderCallbackFunction_t)( ISceneView *, IRenderContext **, ISceneLayer *, float, float, float, float ); + +#endif + +#if !defined( SOURCE2_PANORAMA ) +#define VPROF_BUDGET_THREAD VPROF_BUDGET +#else +#define VPROF_BUDGET_THREAD( name, group ) ((void)0) + +const uint32 k_cubSHA1Hash = k_cubHash; + +#ifndef SAFE_DELETE +#define SAFE_DELETE( x ) if ( (x) != NULL ) { delete (x); x = NULL; } +#endif +#ifndef SAFE_RELEASE +#define SAFE_RELEASE( x ) if ( NULL != ( x ) ) { ( x )->Release(); x = NULL; } +#endif +#define AssertFatalMsg2( b, msg, p1, p2 ) AssertFatalMsg( b, msg, p1, p2 ) +#define AssertFatalMsg1( b, msg, p1 ) AssertFatalMsg( b, msg, p1 ) + +template <class T, class P> +inline void ConstructOneArg( T* pMemory, P const& arg ) +{ + HINT( pMemory != 0 ); + ::new(pMemory)T( arg ); +} + +template <class T, class P, class P2 > +inline void ConstructTwoArg( T* pMemory, P const& arg1, P2 const &arg2 ) +{ + HINT( pMemory != 0 ); + ::new(pMemory)T( arg1, arg2 ); +} + +template <class T, class P, class P2, class P3, class P4, class P5, class P6, class P7 > +inline void ConstructSevenArg( T* pMemory, P const& arg1, P2 const &arg2, P3 const &arg3, P4 const &arg4, P5 const &arg5, P6 const &arg6, P7 const &arg7 ) +{ + HINT( pMemory != 0 ); + ::new(pMemory)T( arg1, arg2, arg3, arg4, arg5, arg6, arg7 ); +} +#endif + + +namespace panorama +{ + +class IUIPanelClient; + + +//----------------------------------------------------------------------------- +// Purpose: Text/font related types +//----------------------------------------------------------------------------- +enum EFontWeight +{ + k_EFontWeightUnset = -1, + k_EFontWeightNormal = 0, + k_EFontWeightMedium = 1, + k_EFontWeightBold = 2, + k_EFontWeightBlack = 3, + k_EFontWeightThin = 4, + k_EFontWeightLight = 5, + k_EFontWeightSemiBold = 6, +}; + +enum EFontStyle +{ + k_EFontStyleUnset = -1, + k_EFontStyleNormal = 0, + k_EFontStyleItalic = 2, +}; + +enum ETextAlign +{ + k_ETextAlignUnset = -1, + k_ETextAlignLeft = 0, + k_ETextAlignCenter = 1, + k_ETextAlignRight = 2 +}; + +enum ETextDecoration +{ + k_ETextDecorationUnset = -1, + k_ETextDecorationNone = 0, + k_ETextDecorationUnderline = 1, + k_ETextDecorationLineThrough = 2, +}; + +enum ETextTransform +{ + k_ETextTransformUnset = -1, + k_ETextTransformNone = 0, + k_ETextTransformUppercase = 1, + k_ETextTransformLowercase = 2, +}; + + +//----------------------------------------------------------------------------- +// Purpose: Transform related types +//----------------------------------------------------------------------------- +enum ETransform3DType +{ + k_ETransform3DRotate, + k_ETransform3DTranslate, + k_ETransform3DScale +}; + + +//----------------------------------------------------------------------------- +// Purpose: Types for border images +//----------------------------------------------------------------------------- +enum EBorderImageRepeatType +{ + k_EBorderImageStretchStretch = 0, + k_EBorderImageStretchRepeat = 1, + k_EBorderImageStretchRound = 2, + k_EBorderImageStretchSpace = 3, +}; + + +enum EBorderImageWidthType +{ + k_EBorderImageWidthAuto = 0, + k_EBorderImageWidthNumber = 1, + k_EBorderImageWidthPercentage = 2 +}; + + +//----------------------------------------------------------------------------- +// Purpose: Transition timing functions +//----------------------------------------------------------------------------- +enum EAnimationTimingFunction +{ + k_EAnimationNone = 0, // Indicates that there is no transition set, do not animate. Don't change from zero! + k_EAnimationEase, + k_EAnimationEaseIn, + k_EAnimationEaseOut, + k_EAnimationEaseInOut, + k_EAnimationLinear, + k_EAnimationCustomBezier, + + k_EAnimationUnset, + // if you add another, update BParseTimingFunction() +}; + + +//----------------------------------------------------------------------------- +// Purpose: Possible animation directions +//----------------------------------------------------------------------------- +enum EAnimationDirection +{ + k_EAnimationDirectionUnset = 0, + k_EAnimationDirectionNormal, + k_EAnimationDirectionAlternate, + k_EAnimationDirectionReverse, + k_EAnimationDirectionAlternateReverse, + + // if you add another, update BParseAnimationDirectionFunction() +}; + + +//----------------------------------------------------------------------------- +// Purpose: Supported style psuedo classes +//----------------------------------------------------------------------------- +enum EStyleFlags : uint16 +{ + k_EStyleFlagNone = 0, + k_EStyleFlagHover = 1 << 0, // mouse is over the panel + k_EStyleFlagFocus = 1 << 1, // panel has keyboard focus + k_EStyleFlagActive = 1 << 2, // panel is being actively used (mouse-down on the panel) + k_EStyleFlagDisabled = 1 << 3, // panel is disabled + k_EStyleFlagInspect = 1 << 4, // panel is being inspected by the debugger + k_EStyleFlagSelected = 1 << 5, // panel is selected (button checked) + k_EStyleFlagDescendantFocused = 1 << 6, // a descendant of the panel has keyboard focus + k_EStyleFlagParentDisabled = 1 << 7, // a parent of this panel is disabled, thus implicitly disabling it + k_EStyleFlagLayoutLoading = 1 << 8, // panel is in-progress loading it's layout file and thus may want to display specially + k_EStyleFlagLayoutLoadFailed = 1 << 9, // panel failed to load requested layout file, and thus may want to display specially + k_EStyleFlagActivationDisabled = 1 << 10, // panel is disabled for activation, may still be enabled for focus (normal disabled disallows all input/focus) +}; + + +//----------------------------------------------------------------------------- +// Purpose: Supported border styles +//----------------------------------------------------------------------------- +enum EBorderStyle +{ + k_EBorderStyleUnset = -1, + k_EBorderStyleNone = 0, + k_EBorderStyleSolid = 1, +}; + + +//----------------------------------------------------------------------------- +// Purpose: Horizontal alignments +//----------------------------------------------------------------------------- +enum EHorizontalAlignment +{ + k_EHorizontalAlignmentUnset, + k_EHorizontalAlignmentLeft, + k_EHorizontalAlignmentCenter, + k_EHorizontalAlignmentRight +}; + + +//----------------------------------------------------------------------------- +// Purpose: Vertical alignments +//----------------------------------------------------------------------------- +enum EVerticalAlignment +{ + k_EVerticalAlignmentUnset, + k_EVerticalAlignmentTop, + k_EVerticalAlignmentCenter, + k_EVerticalAlignmentBottom +}; + +//----------------------------------------------------------------------------- +// Purpose: ContextUI (tooltips + context menus) position +//----------------------------------------------------------------------------- +enum EContextUIPosition +{ + k_EContextUIPositionUnset, + k_EContextUIPositionLeft, + k_EContextUIPositionTop, + k_EContextUIPositionRight, + k_EContextUIPositionBottom, +}; + +//----------------------------------------------------------------------------- +// Purpose: Possible flow directions +//----------------------------------------------------------------------------- +enum EBackgroundRepeat +{ + k_EBackgroundRepeatUnset, + k_EBackgroundRepeatRepeat, + k_EBackgroundRepeatSpace, + k_EBackgroundRepeatRound, + k_EBackgroundRepeatNo, +}; + + +//----------------------------------------------------------------------------- +// Purpose: Special words for background sizes when not length or percentage +//----------------------------------------------------------------------------- +enum EBackgroundSizeConstant +{ + k_EBackgroundSizeConstantNone, + k_EBackgroundSizeConstantContain, + k_EBackgroundSizeConstantCover +}; + + +//----------------------------------------------------------------------------- +// Purpose: type of repaint to do for a render target/panel +//----------------------------------------------------------------------------- +enum EPanelRepaint : uint8 +{ + k_EPanelRepaintFull, + k_EPanelRepaintComposition, + k_EPanelRepaintNone +}; + + +//----------------------------------------------------------------------------- +// Purpose: Specifies what category a sound is; each one of these maps to a volume control in the UI +//----------------------------------------------------------------------------- +enum ESoundType +{ + k_ESoundType_Ambient, // ambient sounds, intro movie + k_ESoundType_Movies, // movies in store + k_ESoundType_Effects, // daisywheel, navigation + k_ESoundType_Passthrough, // special sound type for volume-changing UI - bypasses volume controls +}; + + +//----------------------------------------------------------------------------- +// Purpose: Text Input handler types +//----------------------------------------------------------------------------- +enum ETextInputHandlerType_t +{ + k_ETextInputHandlerType_DaisyWheel, + k_ETextInputHandlerType_DualTouch, + + k_ETextInputHandlerTypeDefault = k_ETextInputHandlerType_DualTouch, // if we fail at gathering the information to figure out which is the most appropriate input method, fall back to this one +}; + + +//----------------------------------------------------------------------------- +// Purpose: Possible flow directions +//----------------------------------------------------------------------------- +enum EFlowDirection : uint8 +{ + k_EFlowNone, + k_EFlowDown, + k_EFlowRight, + k_EFlowDownWrap, + k_EFlowRightWrap +}; + + +//----------------------------------------------------------------------------- +// Purpose: Possible overflow settings +//----------------------------------------------------------------------------- +enum EOverflowValue : uint8 +{ + k_EOverflowSquish, + k_EOverflowClip, + k_EOverflowScroll, + k_EOverflowNoClip, +}; + + +enum EMouseCanActivate : uint8 +{ + k_EMouseCanActivateUnfocused = 0, + k_EMouseCanActivateIfFocused, + k_EMouseCanActivateIfParentFocused, + k_EMouseCanActivateIfAnyParentFocused +}; + +// Focus navigation +enum EFocusMoveDirection +{ + k_ENextInTabOrder = 1, + k_EPrevInTabOrder = 2, + k_ENextByXPosition = 4, + k_EPrevByXPosition = 8, + k_ENextByYPosition = 16, + k_EPrevByYPosition = 32 +}; + + +enum ELoadLayoutAsyncDetails +{ + k_ELoadLayoutAsyncDetailsNone, + k_ELoadLayoutAsyncDetailsNotLoggedIn +}; + + +enum EMixBlendMode +{ + k_EMixBlendModeNormal, + k_EMixBlendModeMultiply, + k_EMixBlendModeScreen +}; + + +enum ETextureSampleMode +{ + k_ETextureSampleModeNormal, + k_ETextureSampleModeAlphaOnly, +}; + +//----------------------------------------------------------------------------- +// Purpose: Enum for the parts of layout a style invalidates when applied +//----------------------------------------------------------------------------- +enum EStyleInvalidateLayout +{ + k_EStyleInvalidateLayoutNone, + k_EStyleInvalidateLayoutSizeAndPosition, + k_EStyleInvalidateLayoutPosition +}; + + +enum EStyleRepaint +{ + k_EStyleRepaintFull, + k_EStyleRepaintComposition, + k_EStyleRepaintNone, +}; + + +enum EAntialiasing +{ + k_EAntialiasingNone, + k_EAntialisingEnabled +}; + +enum EOverlayWindowAlignment +{ + k_EOverlayWindowAlignment_FullscreenLetterboxed = 1, + k_EOverlayWindowAlignment_FullscreenNoLetterBox = 2, + k_EOverlayWindowAlignment_BottomRight = 3, +}; + +enum EStylePresentFlags : uint32 +{ + k_EStylePresentTransformMatrix = 1 << 0, + k_EStylePresentPerspective = 1 << 1, + k_EStylePresentPerspectiveOrigin = 1 << 2, + k_EStylePresentOpacity = 1 << 3, + k_EStylePresentWashColor = 1 << 4, + k_EStylePresentDesaturation = 1 << 5, + k_EStylePresentBlur = 1 << 6, + k_EStylePresentBorderRadius = 1 << 7, + k_EStylePresentOpacityMaskImage = 1 << 8, + k_EStylePresentBackgroundImage = 1 << 9, + k_EStylePresentBackgroundFillColor = 1 << 10, + k_EStylePresentBorder = 1 << 11, + k_EStylePresentBoxShadow = 1 << 12, + k_EStylePresentBorderImage = 1 << 13, + k_EStylePresentScale2DCentered = 1 << 14, + k_EStylePresentRotate2DCentered = 1 << 15, + k_EStylePresentTextShadow = 1 << 16, + k_EStylePresentClip = 1 << 17, + k_EStylePresentMixBlendMode = 1 << 18, + +}; + +// constants, these must remain matching +const float k_flTabIndexInvalid = -1.0 * FLT_MAX; +const float k_flSelectionPosInvalid = k_flTabIndexInvalid; +const float k_flTabIndexAuto = FLT_MAX; +const float k_flSelectionPosAuto = k_flTabIndexAuto; + +// These constants are duplicated in CSS files, so if you change them make sure to change the CSS values as well. +const double k_flScrollTransitionTime = 0.2; +const EAnimationTimingFunction k_flScrollTransitionFunc = k_EAnimationEaseInOut; + + +//----------------------------------------------------------------------------- +// Purpose: bit flags used to control panel construction behavior +//----------------------------------------------------------------------------- +enum EPanelFlags +{ + ePanelFlags_DontAddAsChild = 0x1, // don't automatically add this panel as a child to its parent + ePanelFlags_DontFireOnLoad = 0x2, // don't fire the onload event when constructed, useful for image panel that waits until its contents load +}; + + +enum EPanelEventSource_t +{ + k_ePanelEventSourceProgram, + k_ePanelEventSourceGamepad, + k_ePanelEventSourceKeyboard, + k_ePanelEventSourceMouse, + + k_ePanelEventSourceInvalid +}; + + +class IUIPanel; +class IUIEvent; +typedef IUIEvent* (*PFN_ParseUIEvent)(panorama::IUIPanel *pTarget, const char *pchEvent, const char **pchEventEnd); +typedef IUIEvent* (*PFN_MakeUIEvent0)(const panorama::IUIPanelClient *pTarget); +typedef IUIEvent* (*PFN_MakeUIEvent1Source)(const panorama::IUIPanelClient *pTarget, EPanelEventSource_t eSource); +typedef IUIEvent* (*PFN_MakeUIEvent1Repeats)(const panorama::IUIPanelClient *pTarget, int nRepeats); +struct UIEventFactory +{ + int m_cParams; + bool m_bPanelEvent; + PFN_ParseUIEvent m_pfnParseUIEvent; + PFN_MakeUIEvent0 m_pfnMakeUIEvent0; + PFN_MakeUIEvent1Repeats m_pfnMakeUIEvent1Repeats; + PFN_MakeUIEvent1Source m_pfnMakeUIEvent1Source; +}; + + +//----------------------------------------------------------------------------- +// Simple refcounted base class that doesn't auto-delete when refs hit zero. +//----------------------------------------------------------------------------- +class CLayoutRefCounted +{ +public: + CLayoutRefCounted() + { + m_nRefCount = 0; + } + int AddRef() + { + return ++m_nRefCount; + } + int Release() + { + int nResult = --m_nRefCount; + Assert( nResult >= 0 ); + return nResult; + } + int GetRefCount() const + { + return m_nRefCount; + } +private: + int m_nRefCount; +}; + + +//----------------------------------------------------------------------------- +// Pointer to a CLayoutRefCounted that owns a ref of the pointee +//----------------------------------------------------------------------------- +template< class T > +class CLayoutRefPtr +{ +public: + CLayoutRefPtr() : m_pObject( NULL ) {} + CLayoutRefPtr( T *pFrom ) { Set( pFrom ); } + CLayoutRefPtr( const CLayoutRefPtr< T > &from ) { Set( from.m_pObject ); } + ~CLayoutRefPtr() + { + if ( m_pObject ) + { + m_pObject->Release(); + } + } + + void operator=( const CLayoutRefPtr<T> &from ) { Set( from.m_pObject ); } + + operator const T *() const { return m_pObject; } + operator T *() { return m_pObject; } + + operator bool() const { return ( m_pObject != NULL ); } + + T *operator=( T *p ) { Set( p ); return p; } + + bool operator!() const { return ( !m_pObject ); } + bool operator==( T *p ) const { return ( m_pObject == p ); } + bool operator!=( T *p ) const { return ( m_pObject != p ); } + bool operator==( const CLayoutRefPtr<T> &p ) const { return ( m_pObject == p.m_pObject ); } + bool operator!=( const CLayoutRefPtr<T> &p ) const { return ( m_pObject != p.m_pObject ); } + + T * operator->() { return m_pObject; } + T & operator *() { return *m_pObject; } + T ** operator &() { return &m_pObject; } + + const T * operator->() const { return m_pObject; } + const T & operator *() const { return *m_pObject; } + T * const * operator &() const { return &m_pObject; } + + void Set( T *pObject ) + { + if ( m_pObject ) + { + m_pObject->Release(); + } + + m_pObject = pObject; + + if ( pObject ) + { + pObject->AddRef(); + } + } + +protected: + T *m_pObject; +}; + + +enum EWindowFocusBehavior +{ + // By default, controls in this window will take focus whenever they're interacted with. + k_EWindowFocusBehavior_Default, + + // By default, clicking on controls in this window will avoid taking focus unless it's necessary. + // Useful if you only plan on supporting keyboard focus in a few specific spots and otherwise + // don't display keyboard focus. + k_EWindowFocusBehavior_Shy, +}; + + +struct SteamPadPointer_t +{ + bool bVisible; + Vector2D vecCenter; + float flRadius; + uint32 nTextureID; + int iControllerID; + float (* funcPreRenderCalculatePadOffset)( float, bool ); +}; + + +} // namespace panorama + +#endif // PANORAMATYPES_H
\ No newline at end of file |