summaryrefslogtreecommitdiff
path: root/public/matsys_controls/colorpickerpanel.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/matsys_controls/colorpickerpanel.h')
-rw-r--r--public/matsys_controls/colorpickerpanel.h163
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