diff options
Diffstat (limited to 'public/matsys_controls/colorpickerpanel.h')
| -rw-r--r-- | public/matsys_controls/colorpickerpanel.h | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/public/matsys_controls/colorpickerpanel.h b/public/matsys_controls/colorpickerpanel.h new file mode 100644 index 0000000..6b79b17 --- /dev/null +++ b/public/matsys_controls/colorpickerpanel.h @@ -0,0 +1,163 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//============================================================================= + +#ifndef COLORPICKERPANEL_H +#define COLORPICKERPANEL_H + +#ifdef _WIN32 +#pragma once +#endif + + +#include "vgui_controls/EditablePanel.h" +#include "vgui_controls/Frame.h" +#include "vgui_controls/Button.h" +#include "bitmap/imageformat.h" +#include "mathlib/vector.h" + + +//----------------------------------------------------------------------------- +// Forward declarations +//----------------------------------------------------------------------------- +class CColorXYPreview; +class CColorZPreview; + +namespace vgui +{ + class RadioButton; + class TextEntry; + class IScheme; +} + + +//----------------------------------------------------------------------------- +// +// Color picker panel +// +//----------------------------------------------------------------------------- +class CColorPickerPanel : public vgui::EditablePanel +{ + DECLARE_CLASS_SIMPLE( CColorPickerPanel, vgui::EditablePanel ); + +public: + // constructor + CColorPickerPanel( vgui::Panel *pParent, const char *pName ); + void SetInitialColor( Color initialColor ); + void GetCurrentColor( Color *pColor ); + void GetInitialColor( Color *pColor ); + + // Inherited from Panel + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void OnMousePressed( vgui::MouseCode code ); + +private: + MESSAGE_FUNC_PARAMS( OnRadioButtonChecked, "RadioButtonChecked", kv ); + MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); + MESSAGE_FUNC_PARAMS( OnHSVSelected, "HSVSelected", data ); + MESSAGE_FUNC_PARAMS( OnColorSelected, "ColorSelected", data ); + + // Called when the color changes + void OnColorChanged( vgui::TextEntry *pChanged = NULL ); + + // Updates the preview colors + void UpdatePreviewColors(); + + CColorXYPreview *m_pColorXYPreview; + CColorZPreview *m_pColorZPreview; + vgui::RadioButton* m_pHueRadio; + vgui::RadioButton* m_pSaturationRadio; + vgui::RadioButton* m_pValueRadio; + vgui::RadioButton* m_pRedRadio; + vgui::RadioButton* m_pGreenRadio; + vgui::RadioButton* m_pBlueRadio; + vgui::TextEntry* m_pHueText; + vgui::TextEntry* m_pSaturationText; + vgui::TextEntry* m_pValueText; + vgui::TextEntry* m_pRedText; + vgui::TextEntry* m_pGreenText; + vgui::TextEntry* m_pBlueText; + vgui::Panel* m_pInitialColor; + vgui::Panel* m_pCurrentColor; + vgui::TextEntry* m_pAlphaText; + + RGB888_t m_InitialColor; + RGB888_t m_CurrentColor; + unsigned char m_InitialAlpha; + unsigned char m_CurrentAlpha; + Vector m_CurrentHSVColor; +}; + + +//----------------------------------------------------------------------------- +// Purpose: Modal dialog for picker +//----------------------------------------------------------------------------- +class CColorPickerFrame : public vgui::Frame +{ + DECLARE_CLASS_SIMPLE( CColorPickerFrame, vgui::Frame ); + +public: + CColorPickerFrame( vgui::Panel *pParent, const char *pTitle ); + ~CColorPickerFrame(); + + // Inherited from Frame + virtual void OnCommand( const char *pCommand ); + + // Purpose: Activate the dialog + // If a color is picked, the message 'ColorPickerPicked' is sent with the "color" field set to the color + // If cancel is hit, the message 'ColorPickerCancel' is sent + // If the color is changed in the preview, the message 'ColorPickerPreview' is sent with the "color" field set to the color + void DoModal( Color initialColor, KeyValues *pContextKeys = NULL ); + + // Gets the initial color + void GetInitialColor( Color *pColor ); + +private: + void CleanUpMessage(); + + CColorPickerPanel *m_pPicker; + vgui::Button *m_pOpenButton; + vgui::Button *m_pCancelButton; + KeyValues *m_pContextKeys; +}; + + +//----------------------------------------------------------------------------- +// Purpose: A button which brings up the color picker +//----------------------------------------------------------------------------- +class CColorPickerButton : public vgui::Button +{ + DECLARE_CLASS_SIMPLE( CColorPickerButton, vgui::Button ); + + /* + NOTE: Sends ColorPickerPicked message when a color is picked + color - picked color + Sends ColorPickerPreview message when a color is previewed + color - current preview color + Sends ColorPickerCancelled message when the cancel button was hit + startingColor - color before the picking occurred + */ + +public: + CColorPickerButton( vgui::Panel *pParent, const char *pName, vgui::Panel *pActionSignalTarget = NULL ); + ~CColorPickerButton(); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + virtual void DoClick(); + + void SetColor( const Color& clr ); + void SetColor( int r, int g, int b, int a ); + Color GetColor( void ) { return m_CurrentColor; } + +private: + MESSAGE_FUNC_PARAMS( OnPicked, "ColorPickerPicked", data ); + MESSAGE_FUNC_PARAMS( OnPreview, "ColorPickerPreview", data ); + MESSAGE_FUNC( OnCancelled, "ColorPickerCancel" ); + + void UpdateButtonColor(); + Color m_CurrentColor; +}; + +#endif // COLORPICKERPANEL_H
\ No newline at end of file |