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.
163 lines
4.8 KiB
163 lines
4.8 KiB
//========= 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
|