24
#include "PropertyList.h"
25
#include "ColorGradientPropertyItem.h"
26
#include "RGBAProperty.h"
30
RGBAPropertyItem::RGBAPropertyItem(const TCHAR* name, float red /* = 1.0f*/, float green /* = 1.0f*/, float blue /* = 1.0f*/, float alpha /* = 1.0f*/)
31
: SectionProperty(name, NODE_TYPE_RGBA)
32
, m_color_model(CM_RGB)
33
, m_color_format(Color::COLORFORMAT_FLOAT)
35
m_red = new ColorGradientPropertyItem(TEXT("Red"));
36
m_green = new ColorGradientPropertyItem(TEXT("Green"));
37
m_blue = new ColorGradientPropertyItem(TEXT("Blue"));
38
m_alpha = new ColorGradientPropertyItem(TEXT("Alpha"));
40
m_ColorModel = smptr(Button)(new Button(TEXT("RGB")));
41
m_ColorModel->SetMinMaxSize(32, 14);
42
m_ColorModel->SetFont(GFontBold);
43
m_ColorFormat = smptr(Button)(new Button(TEXT("float")));
44
m_ColorFormat->SetMinMaxSize(32, 14);
45
m_ColorFormat->SetFont(GFontBold);
49
PushChildBack(m_green);
50
PushChildBack(m_blue);
51
PushChildBack(m_alpha);
53
float r = Clamp(red, 0.0f, 1.0f);
54
float g = Clamp(green, 0.0f, 1.0f);
55
float b = Clamp(blue, 0.0f, 1.0f);
56
float a = Clamp(alpha, 0.0f, 1.0f);
58
m_red->SetColorFormat(m_color_format);
59
m_green->SetColorFormat(m_color_format);
60
m_blue->SetColorFormat(m_color_format);
61
m_alpha->SetColorFormat(m_color_format);
63
m_red->SetRange(0.0f, 1.0f);
65
m_green->SetRange(0.0f, 1.0f);
67
m_blue->SetRange(0.0f, 1.0f);
69
m_alpha->SetRange(0.0f, 1.0f);
72
m_red->AddColorMark(0, Color(0.0f, g, b), false);
73
m_red->AddColorMark(1, Color(1.0f, g, b), false);
74
m_green->AddColorMark(0, Color(r, 0.0f, b), false);
75
m_green->AddColorMark(1, Color(r, 1.0f, b), false);
76
m_blue->AddColorMark(0, Color(r, g, 0.0f), false);
77
m_blue->AddColorMark(1, Color(r, g, 1.0f), false);
78
m_alpha->AddColorMark(0, Color(0xFF000000), false);
79
m_alpha->AddColorMark(1, Color(0xFFFFFFFF), false);
81
UpdateStartToEndColors();
83
m_red->sigValueChanged.connect( sigc::mem_fun(this, &RGBAPropertyItem::RedChange));
84
m_green->sigValueChanged.connect( sigc::mem_fun(this, &RGBAPropertyItem::GreenChange));
85
m_blue->sigValueChanged.connect( sigc::mem_fun(this, &RGBAPropertyItem::BlueChange));
86
m_alpha->sigValueChanged.connect( sigc::mem_fun(this, &RGBAPropertyItem::AlphaChange));
88
m_ColorModel->sigClick.connect(sigc::mem_fun(this, &RGBAPropertyItem::OnChangeColorModel));
89
m_ColorFormat->sigClick.connect(sigc::mem_fun(this, &RGBAPropertyItem::OnChangeColorFormat));
91
NODE_SIG_CONNECT(m_red->sigValueChanged, RGBAPropertyItem, RecvPropertyChange);
92
NODE_SIG_CONNECT(m_green->sigValueChanged, RGBAPropertyItem, RecvPropertyChange);
93
NODE_SIG_CONNECT(m_blue->sigValueChanged, RGBAPropertyItem, RecvPropertyChange);
94
NODE_SIG_CONNECT(m_alpha->sigValueChanged, RGBAPropertyItem, RecvPropertyChange);
97
RGBAPropertyItem::~RGBAPropertyItem()
99
INL_SAFE_DELETE(m_red);
100
INL_SAFE_DELETE(m_green);
101
INL_SAFE_DELETE(m_blue);
102
INL_SAFE_DELETE(m_alpha);
105
long RGBAPropertyItem::ProcessPropertyEvent(IEvent &ievent, long TraverseInfo, long ProcessEventInfo)
107
long ret = TraverseInfo;
109
ret = m_ColorModel->ProcessEvent(ievent, ret, ProcessEventInfo);
110
ret = m_ColorFormat->ProcessEvent(ievent, ret, ProcessEventInfo);
111
// if(!(ret & eMouseEventSolved))
112
// ret = TableItem::ProcessPropertyEvent(ievent, TraverseInfo, ProcessEventInfo);
116
void RGBAPropertyItem::ComputePropertyLayout(int x, int y, RowHeader* row, const std::vector<header2>& column_vector)
118
if(m_ItemGeometryVector.size() >= 2)
121
geo = m_ItemGeometryVector[1];
122
geo = geo.GetExpand(-PROPERTY_BORDER_X, -PROPERTY_BORDER_Y);
124
m_ColorModel->SetBaseX(geo.x + geo.GetWidth() - PROPERTY_BORDER_X - m_ColorModel->GetBaseWidth() - 2 - m_ColorModel->GetBaseWidth());
125
m_ColorModel->SetBaseY(geo.y);
127
m_ColorFormat->SetBaseX(geo.x + geo.GetWidth() - PROPERTY_BORDER_X - m_ColorModel->GetBaseWidth());
128
m_ColorFormat->SetBaseY(geo.y);
133
int RGBAPropertyItem::GetItemBestHeight()
135
int sz = 16; //m_ColorModel->GetBaseHeight();
136
return sz + 2 * PROPERTY_BORDER_Y;
139
void RGBAPropertyItem::RedChange(const weaksmptr(ColorGradient) slider)
141
if(slider->IsCtrlKeyPressed())
143
m_green->SetValue(slider->GetValue());
144
m_blue->SetValue(slider->GetValue());
146
UpdateStartToEndColors();
147
m_green->NeedRedraw();
148
m_blue->NeedRedraw();
149
m_alpha->NeedRedraw();
152
void RGBAPropertyItem::GreenChange(const weaksmptr(ColorGradient) slider)
154
if(slider->IsCtrlKeyPressed())
156
m_red->SetValue(slider->GetValue());
157
m_blue->SetValue(slider->GetValue());
159
UpdateStartToEndColors();
161
m_blue->NeedRedraw();
162
m_alpha->NeedRedraw();
165
void RGBAPropertyItem::BlueChange(const weaksmptr(ColorGradient) slider)
167
if(slider->IsCtrlKeyPressed())
169
m_red->SetValue(slider->GetValue());
170
m_green->SetValue(slider->GetValue());
172
UpdateStartToEndColors();
174
m_green->NeedRedraw();
175
m_alpha->NeedRedraw();
178
void RGBAPropertyItem::AlphaChange(const weaksmptr(ColorGradient) slider)
180
UpdateStartToEndColors();
183
m_green->NeedRedraw();
184
m_blue->NeedRedraw();
185
m_alpha->NeedRedraw();
188
void RGBAPropertyItem::DrawProperty(GraphicsContext& GfxContext, TableCtrl* table, bool force_draw, Geometry geo, const BasePainter& Painter,
189
RowHeader* row, const std::vector<header2>& column_vector, Color ItemBackgroundColor)
191
bool isSelected = (this == table->GetSelectedItem());
193
m_red->IsRedrawNeeded() ||
194
m_green->IsRedrawNeeded() ||
195
m_blue->IsRedrawNeeded() ||
196
m_alpha->IsRedrawNeeded())
198
UINT nBackground = table->PushItemBackground(GfxContext, this);
199
Painter.PaintTextLineStatic(GfxContext, GFontBold /*GetFont()*/, m_FirstColumnUsableGeometry, row->item->GetName(), GetItemTextColor());
201
if(m_ItemGeometryVector.size() >= 2)
203
Geometry prop_geo = m_ItemGeometryVector[1];
204
prop_geo = prop_geo.GetExpand(-PROPERTY_BORDER_X,
205
-2*PROPERTY_BORDER_Y);
206
prop_geo.OffsetSize( - 2 - m_ColorFormat->GetBaseWidth() - 2 - m_ColorModel->GetBaseWidth() - 2, 0);
208
// Draw the resulting color
209
Painter.Paint2DQuadColor(GfxContext, prop_geo, Color(m_Red, m_Green, m_Blue));
210
// Draw black border around the color
211
Painter.Paint2DQuadWireframe(GfxContext, prop_geo, Color(0));
212
m_ColorModel->ProcessDraw(GfxContext, true);
213
m_ColorFormat->ProcessDraw(GfxContext, true);
215
table->PopItemBackground(GfxContext, nBackground);
219
void RGBAPropertyItem::OnChangeColorModel()
221
if(m_color_model == CM_RGB)
223
SetColorModel(CM_HLS);
225
RGBtoHLS(m_red->GetValue(), m_green->GetValue(), m_blue->GetValue(), H, L, S);
226
m_red->SetValue(H); m_green->SetValue(L); m_blue->SetValue(S);
228
else if(m_color_model == CM_HLS)
230
SetColorModel(CM_HSV);
233
HLStoRGB(R, G, B, m_red->GetValue(), m_green->GetValue(), m_blue->GetValue());
234
RGBtoHSV(R, G, B, H, S, V);
235
m_red->SetValue(H); m_green->SetValue(S); m_blue->SetValue(V);
242
else if(m_color_model == CM_HSV)
244
SetColorModel(CM_RGB);
246
HSVtoRGB(R, G, B, m_red->GetValue(), m_green->GetValue(), m_blue->GetValue());
247
m_red->SetValue(R); m_green->SetValue(G); m_blue->SetValue(B);
251
UpdateStartToEndColors();
252
m_green->NeedRedraw();
253
m_blue->NeedRedraw();
254
m_alpha->NeedRedraw();
257
void RGBAPropertyItem::SetColorModel(eColorModel cm)
261
m_color_model = CM_RGB;
262
m_ColorModel->SetCaption(TEXT("RGB"));
264
m_red->SetName(TEXT("Red"));
265
m_green->SetName(TEXT("Green"));
266
m_blue->SetName(TEXT("Blue"));
267
m_alpha->SetName(TEXT("Alpha"));
271
m_color_model = CM_HSV;
272
m_ColorModel->SetCaption(TEXT("HSV"));
274
m_red->SetName(TEXT("Hue"));
275
m_green->SetName(TEXT("Saturation"));
276
m_blue->SetName(TEXT("Value"));
277
m_alpha->SetName(TEXT("Alpha"));
281
m_color_model = CM_HLS;
282
m_ColorModel->SetCaption(TEXT("HLS"));
284
m_red->SetName(TEXT("Hue"));
285
m_green->SetName(TEXT("Light"));
286
m_blue->SetName(TEXT("Saturation"));
287
m_alpha->SetName(TEXT("Alpha"));
291
m_color_model = CM_YUV;
292
m_ColorModel->SetBaseString(TEXT("YUV"));
294
// m_ComponentLabel0->SetBaseString(TEXT("Y"));
295
// m_ComponentLabel1->SetBaseString(TEXT("U"));
296
// m_ComponentLabel2->SetBaseString(TEXT("V"));
297
// m_ComponentAlpha->SetBaseString(TEXT("A"));
302
void RGBAPropertyItem::OnChangeColorFormat()
304
if(m_color_format == Color::COLORFORMAT_FLOAT)
306
m_color_format = Color::COLORFORMAT_INT;
307
m_ColorFormat->SetCaption(TEXT("int"));
309
else if(m_color_format == Color::COLORFORMAT_INT)
311
m_color_format = Color::COLORFORMAT_HEX;
312
m_ColorFormat->SetCaption(TEXT("hex"));
314
else if(m_color_format == Color::COLORFORMAT_HEX)
316
m_color_format = Color::COLORFORMAT_FLOAT;
317
m_ColorFormat->SetCaption(TEXT("float"));
320
m_red->SetColorFormat(m_color_format);
321
m_green->SetColorFormat(m_color_format);
322
m_blue->SetColorFormat(m_color_format);
323
m_alpha->SetColorFormat(m_color_format);
326
void RGBAPropertyItem::UpdateStartToEndColors()
333
if(m_color_model == CM_RGB)
336
r = m_red->GetValue();
337
g = m_green->GetValue();
338
b = m_blue->GetValue();
339
a = m_alpha->GetValue();
341
m_red->AddColorMark(0, Color(0.0f, g, b), false);
342
m_red->AddColorMark(1, Color(1.0f, g, b), false);
343
m_green->AddColorMark(0, Color(r, 0.0f, b), false);
344
m_green->AddColorMark(1, Color(r, 1.0f, b), false);
345
m_blue->AddColorMark(0, Color(r, g, 0.0f), false);
346
m_blue->AddColorMark(1, Color(r, g, 1.0f), false);
347
m_alpha->AddColorMark(0, Color(0xFF000000), false);
348
m_alpha->AddColorMark(1, Color(0xFFFFFFFF), false);
356
if(m_color_model == CM_HSV)
360
h = m_red->GetValue();
361
s = m_green->GetValue();
362
v = m_blue->GetValue();
363
a = m_alpha->GetValue();
365
HSVtoRGB(r, g, b, h, 1.0f, 1.0f);
367
m_red->AddColorMark(0.0f, Color(1.0f, 0.0, 0.0), false);
368
m_red->AddColorMark(1.0f/6.0f, Color(1.0f, 1.0, 0.0), false);
369
m_red->AddColorMark(2.0f/6.0f, Color(0.0f, 1.0, 0.0), false);
370
m_red->AddColorMark(3.0f/6.0f, Color(0.0f, 1.0, 1.0), false);
371
m_red->AddColorMark(4.0f/6.0f, Color(0.0f, 0.0, 1.0), false);
372
m_red->AddColorMark(5.0f/6.0f, Color(1.0f, 0.0, 1.0), false);
373
m_red->AddColorMark(1.0f, Color(1.0f, 0.0, 0.0), false);
377
HSVtoRGB(r, g, b, h, 1.0f, 1.0f);
378
m_green->AddColorMark(0, Color(v, v, v), false);
379
m_green->AddColorMark(1.0f, Color(r * v, g * v, b * v), false);
381
HSVtoRGB(r, g, b, h, s, 1.0f);
382
m_blue->AddColorMark(0, Color(0, 0, 0), false);
383
m_blue->AddColorMark(1.0f, Color(r, g, b), false);
385
m_alpha->AddColorMark(0, Color(0xFF000000), false);
386
m_alpha->AddColorMark(1, Color(0xFFFFFFFF), false);
388
HSVtoRGB(m_Red, m_Green, m_Blue, h, s, v);
392
if(m_color_model == CM_HLS)
396
h = m_red->GetValue();
397
l = m_green->GetValue();
398
s = m_blue->GetValue();
399
a = m_alpha->GetValue();
401
m_red->AddColorMark(0.0f, Color(1.0f, 0.0, 0.0), false);
402
m_red->AddColorMark(1.0f/6.0f, Color(1.0f, 1.0, 0.0), false);
403
m_red->AddColorMark(2.0f/6.0f, Color(0.0f, 1.0, 0.0), false);
404
m_red->AddColorMark(3.0f/6.0f, Color(0.0f, 1.0, 1.0), false);
405
m_red->AddColorMark(4.0f/6.0f, Color(0.0f, 0.0, 1.0), false);
406
m_red->AddColorMark(5.0f/6.0f, Color(1.0f, 0.0, 1.0), false);
407
m_red->AddColorMark(1.0f, Color(1.0f, 0.0, 0.0), false);
413
// Need to use HSVtoRGB to compute the primary color
414
HSVtoRGB(r, g, b, h, 1.0f, 1.0f);
415
m_green->AddColorMark(0.0f, Color(0, 0, 0), false);
416
m_green->AddColorMark(0.5f, Color(r*(1-s)+0.5f*s, g*(1-s)+0.5f*s, b*(1-s)+0.5f*s), false);
417
m_green->AddColorMark(1.0f, Color(1.0f, 1.0f, 1.0f), false);
422
float factor = (l-0.5f)/0.5f;
423
cr = (1 - factor) * r*(1-s)+0.5*s + factor * 1.0f;
424
cg = (1 - factor) * g*(1-s)+0.5*s + factor * 1.0f;
425
cb = (1 - factor) * b*(1-s)+0.5*s + factor * 1.0f;
429
float factor = l/0.5f;
430
cr = (factor) * r*(1-s)+0.5*s;
431
cg = (factor) * g*(1-s)+0.5*s;
432
cb = (factor) * b*(1-s)+0.5*s;
435
m_blue->AddColorMark(0, Color(l, l, l), false);
436
m_blue->AddColorMark(1.0f, Color(cr, cg, cb), false);
439
m_alpha->AddColorMark(0, Color(0xFF000000), false);
440
m_alpha->AddColorMark(1, Color(0xFFFFFFFF), false);
442
HLStoRGB(m_Red, m_Green, m_Blue, h, l, 1.0f - s);
447
RGBAPropertyItem* RGBAPropertyItem::CreateFromXML(const TiXmlElement* elementxml, NodeNetCom* parent, const char* Name, int id)
449
RGBAPropertyItem *node = new RGBAPropertyItem(Name, 0, 0, 0, 0);
450
double red, green, blue, alpha;
452
const TiXmlElement* childxml = elementxml->FirstChildElement();
453
QueryNodeXMLDoubleAttribute(childxml, TEXT("Red"), &red, -1);
454
childxml = childxml->NextSiblingElement();
455
QueryNodeXMLDoubleAttribute(childxml, TEXT("Green"), &green, -1);
456
childxml = childxml->NextSiblingElement();
457
QueryNodeXMLDoubleAttribute(childxml, TEXT("Blue"), &blue, -1);
458
childxml = childxml->NextSiblingElement();
459
QueryNodeXMLDoubleAttribute(childxml, TEXT("Alpha"), &alpha, -1);
462
node->SetGreen(green);
464
node->SetAlpha(alpha);
470
TiXmlElement* RGBAPropertyItem::ToXML() const
472
TiXmlElement* elementxml = NodeNetCom::ToXML();
473
TiXmlElement* childxml;
474
childxml = new TiXmlElement(TEXT("RGBAComponent"));
475
//childxml->SetAttribute(TEXT("Name"), m_X->GetName());
476
childxml->SetDoubleAttribute(TEXT("Red"), m_Red);
477
elementxml->LinkEndChild(childxml);
478
childxml = new TiXmlElement(TEXT("RGBAComponent"));
479
//childxml->SetAttribute(TEXT("Name"), m_Y->GetName());
480
childxml->SetDoubleAttribute(TEXT("Green"), m_Green);
481
elementxml->LinkEndChild(childxml);
482
childxml = new TiXmlElement(TEXT("RGBAComponent"));
483
//childxml->SetAttribute(TEXT("Name"), m_Z->GetName());
484
childxml->SetDoubleAttribute(TEXT("Blue"), m_Blue);
485
elementxml->LinkEndChild(childxml);
486
childxml = new TiXmlElement(TEXT("RGBAComponent"));
487
//childxml->SetAttribute(TEXT("Name"), m_W->GetName());
488
childxml->SetDoubleAttribute(TEXT("Alpha"), m_Alpha);
489
elementxml->LinkEndChild(childxml);
494
bool RGBAPropertyItem::FromXML(const TiXmlElement* elementxml)
496
double red, green, blue, alpha;
497
tstring NameX, NameY, NameZ, NameW;
498
const TiXmlElement* childxml = elementxml->FirstChildElement();
499
//QueryNodeXMLStringAttribute(childxml, TEXT("Name"), NameX, GetID());
500
QueryNodeXMLDoubleAttribute(childxml, TEXT("Red"), &red, -1);
501
childxml = childxml->NextSiblingElement();
502
//QueryNodeXMLStringAttribute(childxml, TEXT("Name"), NameY, GetID());
503
QueryNodeXMLDoubleAttribute(childxml, TEXT("Green"), &green, -1);
504
childxml = childxml->NextSiblingElement();
505
//QueryNodeXMLStringAttribute(childxml, TEXT("Name"), NameZ, GetID());
506
QueryNodeXMLDoubleAttribute(childxml, TEXT("Blue"), &blue, -1);
507
childxml = childxml->NextSiblingElement();
508
//QueryNodeXMLStringAttribute(childxml, TEXT("Name"), NameW, GetID());
509
QueryNodeXMLDoubleAttribute(childxml, TEXT("Alpha"), &alpha, -1);
510
childxml = childxml->NextSiblingElement();
517
return NodeNetCom::FromXML(elementxml);
24
#include "PropertyList.h"
25
#include "ColorGradientPropertyItem.h"
26
#include "RGBAProperty.h"
30
RGBAPropertyItem::RGBAPropertyItem(const TCHAR* name, float red /* = 1.0f*/, float green /* = 1.0f*/, float blue /* = 1.0f*/, float alpha /* = 1.0f*/)
31
: SectionProperty(name, NODE_TYPE_RGBA)
32
, m_color_model(CM_RGB)
33
, m_color_format(Color::COLORFORMAT_FLOAT)
35
m_red = new ColorGradientPropertyItem(TEXT("Red"));
36
m_green = new ColorGradientPropertyItem(TEXT("Green"));
37
m_blue = new ColorGradientPropertyItem(TEXT("Blue"));
38
m_alpha = new ColorGradientPropertyItem(TEXT("Alpha"));
40
m_ColorModel = smptr(Button)(new Button(TEXT("RGB")));
41
m_ColorModel->SetMinMaxSize(32, 14);
42
m_ColorModel->SetFont(GFontBold);
43
m_ColorFormat = smptr(Button)(new Button(TEXT("float")));
44
m_ColorFormat->SetMinMaxSize(32, 14);
45
m_ColorFormat->SetFont(GFontBold);
49
PushChildBack(m_green);
50
PushChildBack(m_blue);
51
PushChildBack(m_alpha);
53
float r = Clamp(red, 0.0f, 1.0f);
54
float g = Clamp(green, 0.0f, 1.0f);
55
float b = Clamp(blue, 0.0f, 1.0f);
56
float a = Clamp(alpha, 0.0f, 1.0f);
58
m_red->SetColorFormat(m_color_format);
59
m_green->SetColorFormat(m_color_format);
60
m_blue->SetColorFormat(m_color_format);
61
m_alpha->SetColorFormat(m_color_format);
63
m_red->SetRange(0.0f, 1.0f);
65
m_green->SetRange(0.0f, 1.0f);
67
m_blue->SetRange(0.0f, 1.0f);
69
m_alpha->SetRange(0.0f, 1.0f);
72
m_red->AddColorMark(0, Color(0.0f, g, b), false);
73
m_red->AddColorMark(1, Color(1.0f, g, b), false);
74
m_green->AddColorMark(0, Color(r, 0.0f, b), false);
75
m_green->AddColorMark(1, Color(r, 1.0f, b), false);
76
m_blue->AddColorMark(0, Color(r, g, 0.0f), false);
77
m_blue->AddColorMark(1, Color(r, g, 1.0f), false);
78
m_alpha->AddColorMark(0, Color(0xFF000000), false);
79
m_alpha->AddColorMark(1, Color(0xFFFFFFFF), false);
81
UpdateStartToEndColors();
83
m_red->sigValueChanged.connect( sigc::mem_fun(this, &RGBAPropertyItem::RedChange));
84
m_green->sigValueChanged.connect( sigc::mem_fun(this, &RGBAPropertyItem::GreenChange));
85
m_blue->sigValueChanged.connect( sigc::mem_fun(this, &RGBAPropertyItem::BlueChange));
86
m_alpha->sigValueChanged.connect( sigc::mem_fun(this, &RGBAPropertyItem::AlphaChange));
88
m_ColorModel->sigClick.connect(sigc::mem_fun(this, &RGBAPropertyItem::OnChangeColorModel));
89
m_ColorFormat->sigClick.connect(sigc::mem_fun(this, &RGBAPropertyItem::OnChangeColorFormat));
91
NODE_SIG_CONNECT(m_red->sigValueChanged, RGBAPropertyItem, RecvPropertyChange);
92
NODE_SIG_CONNECT(m_green->sigValueChanged, RGBAPropertyItem, RecvPropertyChange);
93
NODE_SIG_CONNECT(m_blue->sigValueChanged, RGBAPropertyItem, RecvPropertyChange);
94
NODE_SIG_CONNECT(m_alpha->sigValueChanged, RGBAPropertyItem, RecvPropertyChange);
97
RGBAPropertyItem::~RGBAPropertyItem()
99
INL_SAFE_DELETE(m_red);
100
INL_SAFE_DELETE(m_green);
101
INL_SAFE_DELETE(m_blue);
102
INL_SAFE_DELETE(m_alpha);
105
long RGBAPropertyItem::ProcessPropertyEvent(IEvent &ievent, long TraverseInfo, long ProcessEventInfo)
107
long ret = TraverseInfo;
109
ret = m_ColorModel->ProcessEvent(ievent, ret, ProcessEventInfo);
110
ret = m_ColorFormat->ProcessEvent(ievent, ret, ProcessEventInfo);
111
// if(!(ret & eMouseEventSolved))
112
// ret = TableItem::ProcessPropertyEvent(ievent, TraverseInfo, ProcessEventInfo);
116
void RGBAPropertyItem::ComputePropertyLayout(int x, int y, RowHeader* row, const std::vector<header2>& column_vector)
118
if(m_ItemGeometryVector.size() >= 2)
121
geo = m_ItemGeometryVector[1];
122
geo = geo.GetExpand(-PROPERTY_BORDER_X, -PROPERTY_BORDER_Y);
124
m_ColorModel->SetBaseX(geo.x + geo.GetWidth() - PROPERTY_BORDER_X - m_ColorModel->GetBaseWidth() - 2 - m_ColorModel->GetBaseWidth());
125
m_ColorModel->SetBaseY(geo.y);
127
m_ColorFormat->SetBaseX(geo.x + geo.GetWidth() - PROPERTY_BORDER_X - m_ColorModel->GetBaseWidth());
128
m_ColorFormat->SetBaseY(geo.y);
133
int RGBAPropertyItem::GetItemBestHeight()
135
int sz = 16; //m_ColorModel->GetBaseHeight();
136
return sz + 2 * PROPERTY_BORDER_Y;
139
void RGBAPropertyItem::RedChange(const weaksmptr(ColorGradient) slider)
141
if(slider->IsCtrlKeyPressed())
143
m_green->SetValue(slider->GetValue());
144
m_blue->SetValue(slider->GetValue());
146
UpdateStartToEndColors();
147
m_green->NeedRedraw();
148
m_blue->NeedRedraw();
149
m_alpha->NeedRedraw();
152
void RGBAPropertyItem::GreenChange(const weaksmptr(ColorGradient) slider)
154
if(slider->IsCtrlKeyPressed())
156
m_red->SetValue(slider->GetValue());
157
m_blue->SetValue(slider->GetValue());
159
UpdateStartToEndColors();
161
m_blue->NeedRedraw();
162
m_alpha->NeedRedraw();
165
void RGBAPropertyItem::BlueChange(const weaksmptr(ColorGradient) slider)
167
if(slider->IsCtrlKeyPressed())
169
m_red->SetValue(slider->GetValue());
170
m_green->SetValue(slider->GetValue());
172
UpdateStartToEndColors();
174
m_green->NeedRedraw();
175
m_alpha->NeedRedraw();
178
void RGBAPropertyItem::AlphaChange(const weaksmptr(ColorGradient) slider)
180
UpdateStartToEndColors();
183
m_green->NeedRedraw();
184
m_blue->NeedRedraw();
185
m_alpha->NeedRedraw();
188
void RGBAPropertyItem::DrawProperty(GraphicsContext& GfxContext, TableCtrl* table, bool force_draw, Geometry geo, const BasePainter& Painter,
189
RowHeader* row, const std::vector<header2>& column_vector, Color ItemBackgroundColor)
191
bool isSelected = (this == table->GetSelectedItem());
193
m_red->IsRedrawNeeded() ||
194
m_green->IsRedrawNeeded() ||
195
m_blue->IsRedrawNeeded() ||
196
m_alpha->IsRedrawNeeded())
198
UINT nBackground = table->PushItemBackground(GfxContext, this);
199
Painter.PaintTextLineStatic(GfxContext, GFontBold /*GetFont()*/, m_FirstColumnUsableGeometry, row->item->GetName(), GetItemTextColor());
201
if(m_ItemGeometryVector.size() >= 2)
203
Geometry prop_geo = m_ItemGeometryVector[1];
204
prop_geo = prop_geo.GetExpand(-PROPERTY_BORDER_X,
205
-2*PROPERTY_BORDER_Y);
206
prop_geo.OffsetSize( - 2 - m_ColorFormat->GetBaseWidth() - 2 - m_ColorModel->GetBaseWidth() - 2, 0);
208
// Draw the resulting color
209
Painter.Paint2DQuadColor(GfxContext, prop_geo, Color(m_Red, m_Green, m_Blue));
210
// Draw black border around the color
211
Painter.Paint2DQuadWireframe(GfxContext, prop_geo, Color(0));
212
m_ColorModel->ProcessDraw(GfxContext, true);
213
m_ColorFormat->ProcessDraw(GfxContext, true);
215
table->PopItemBackground(GfxContext, nBackground);
219
void RGBAPropertyItem::OnChangeColorModel()
221
if(m_color_model == CM_RGB)
223
SetColorModel(CM_HLS);
225
RGBtoHLS(m_red->GetValue(), m_green->GetValue(), m_blue->GetValue(), H, L, S);
226
m_red->SetValue(H); m_green->SetValue(L); m_blue->SetValue(S);
228
else if(m_color_model == CM_HLS)
230
SetColorModel(CM_HSV);
233
HLStoRGB(R, G, B, m_red->GetValue(), m_green->GetValue(), m_blue->GetValue());
234
RGBtoHSV(R, G, B, H, S, V);
235
m_red->SetValue(H); m_green->SetValue(S); m_blue->SetValue(V);
242
else if(m_color_model == CM_HSV)
244
SetColorModel(CM_RGB);
246
HSVtoRGB(R, G, B, m_red->GetValue(), m_green->GetValue(), m_blue->GetValue());
247
m_red->SetValue(R); m_green->SetValue(G); m_blue->SetValue(B);
251
UpdateStartToEndColors();
252
m_green->NeedRedraw();
253
m_blue->NeedRedraw();
254
m_alpha->NeedRedraw();
257
void RGBAPropertyItem::SetColorModel(eColorModel cm)
261
m_color_model = CM_RGB;
262
m_ColorModel->SetCaption(TEXT("RGB"));
264
m_red->SetName(TEXT("Red"));
265
m_green->SetName(TEXT("Green"));
266
m_blue->SetName(TEXT("Blue"));
267
m_alpha->SetName(TEXT("Alpha"));
271
m_color_model = CM_HSV;
272
m_ColorModel->SetCaption(TEXT("HSV"));
274
m_red->SetName(TEXT("Hue"));
275
m_green->SetName(TEXT("Saturation"));
276
m_blue->SetName(TEXT("Value"));
277
m_alpha->SetName(TEXT("Alpha"));
281
m_color_model = CM_HLS;
282
m_ColorModel->SetCaption(TEXT("HLS"));
284
m_red->SetName(TEXT("Hue"));
285
m_green->SetName(TEXT("Light"));
286
m_blue->SetName(TEXT("Saturation"));
287
m_alpha->SetName(TEXT("Alpha"));
291
m_color_model = CM_YUV;
292
m_ColorModel->SetBaseString(TEXT("YUV"));
294
// m_ComponentLabel0->SetBaseString(TEXT("Y"));
295
// m_ComponentLabel1->SetBaseString(TEXT("U"));
296
// m_ComponentLabel2->SetBaseString(TEXT("V"));
297
// m_ComponentAlpha->SetBaseString(TEXT("A"));
302
void RGBAPropertyItem::OnChangeColorFormat()
304
if(m_color_format == Color::COLORFORMAT_FLOAT)
306
m_color_format = Color::COLORFORMAT_INT;
307
m_ColorFormat->SetCaption(TEXT("int"));
309
else if(m_color_format == Color::COLORFORMAT_INT)
311
m_color_format = Color::COLORFORMAT_HEX;
312
m_ColorFormat->SetCaption(TEXT("hex"));
314
else if(m_color_format == Color::COLORFORMAT_HEX)
316
m_color_format = Color::COLORFORMAT_FLOAT;
317
m_ColorFormat->SetCaption(TEXT("float"));
320
m_red->SetColorFormat(m_color_format);
321
m_green->SetColorFormat(m_color_format);
322
m_blue->SetColorFormat(m_color_format);
323
m_alpha->SetColorFormat(m_color_format);
326
void RGBAPropertyItem::UpdateStartToEndColors()
333
if(m_color_model == CM_RGB)
336
r = m_red->GetValue();
337
g = m_green->GetValue();
338
b = m_blue->GetValue();
339
a = m_alpha->GetValue();
341
m_red->AddColorMark(0, Color(0.0f, g, b), false);
342
m_red->AddColorMark(1, Color(1.0f, g, b), false);
343
m_green->AddColorMark(0, Color(r, 0.0f, b), false);
344
m_green->AddColorMark(1, Color(r, 1.0f, b), false);
345
m_blue->AddColorMark(0, Color(r, g, 0.0f), false);
346
m_blue->AddColorMark(1, Color(r, g, 1.0f), false);
347
m_alpha->AddColorMark(0, Color(0xFF000000), false);
348
m_alpha->AddColorMark(1, Color(0xFFFFFFFF), false);
356
if(m_color_model == CM_HSV)
360
h = m_red->GetValue();
361
s = m_green->GetValue();
362
v = m_blue->GetValue();
363
a = m_alpha->GetValue();
365
HSVtoRGB(r, g, b, h, 1.0f, 1.0f);
367
m_red->AddColorMark(0.0f, Color(1.0f, 0.0, 0.0), false);
368
m_red->AddColorMark(1.0f/6.0f, Color(1.0f, 1.0, 0.0), false);
369
m_red->AddColorMark(2.0f/6.0f, Color(0.0f, 1.0, 0.0), false);
370
m_red->AddColorMark(3.0f/6.0f, Color(0.0f, 1.0, 1.0), false);
371
m_red->AddColorMark(4.0f/6.0f, Color(0.0f, 0.0, 1.0), false);
372
m_red->AddColorMark(5.0f/6.0f, Color(1.0f, 0.0, 1.0), false);
373
m_red->AddColorMark(1.0f, Color(1.0f, 0.0, 0.0), false);
377
HSVtoRGB(r, g, b, h, 1.0f, 1.0f);
378
m_green->AddColorMark(0, Color(v, v, v), false);
379
m_green->AddColorMark(1.0f, Color(r * v, g * v, b * v), false);
381
HSVtoRGB(r, g, b, h, s, 1.0f);
382
m_blue->AddColorMark(0, Color(0, 0, 0), false);
383
m_blue->AddColorMark(1.0f, Color(r, g, b), false);
385
m_alpha->AddColorMark(0, Color(0xFF000000), false);
386
m_alpha->AddColorMark(1, Color(0xFFFFFFFF), false);
388
HSVtoRGB(m_Red, m_Green, m_Blue, h, s, v);
392
if(m_color_model == CM_HLS)
396
h = m_red->GetValue();
397
l = m_green->GetValue();
398
s = m_blue->GetValue();
399
a = m_alpha->GetValue();
401
m_red->AddColorMark(0.0f, Color(1.0f, 0.0, 0.0), false);
402
m_red->AddColorMark(1.0f/6.0f, Color(1.0f, 1.0, 0.0), false);
403
m_red->AddColorMark(2.0f/6.0f, Color(0.0f, 1.0, 0.0), false);
404
m_red->AddColorMark(3.0f/6.0f, Color(0.0f, 1.0, 1.0), false);
405
m_red->AddColorMark(4.0f/6.0f, Color(0.0f, 0.0, 1.0), false);
406
m_red->AddColorMark(5.0f/6.0f, Color(1.0f, 0.0, 1.0), false);
407
m_red->AddColorMark(1.0f, Color(1.0f, 0.0, 0.0), false);
413
// Need to use HSVtoRGB to compute the primary color
414
HSVtoRGB(r, g, b, h, 1.0f, 1.0f);
415
m_green->AddColorMark(0.0f, Color(0, 0, 0), false);
416
m_green->AddColorMark(0.5f, Color(r*(1-s)+0.5f*s, g*(1-s)+0.5f*s, b*(1-s)+0.5f*s), false);
417
m_green->AddColorMark(1.0f, Color(1.0f, 1.0f, 1.0f), false);
422
float factor = (l-0.5f)/0.5f;
423
cr = (1 - factor) * r*(1-s)+0.5*s + factor * 1.0f;
424
cg = (1 - factor) * g*(1-s)+0.5*s + factor * 1.0f;
425
cb = (1 - factor) * b*(1-s)+0.5*s + factor * 1.0f;
429
float factor = l/0.5f;
430
cr = (factor) * r*(1-s)+0.5*s;
431
cg = (factor) * g*(1-s)+0.5*s;
432
cb = (factor) * b*(1-s)+0.5*s;
435
m_blue->AddColorMark(0, Color(l, l, l), false);
436
m_blue->AddColorMark(1.0f, Color(cr, cg, cb), false);
439
m_alpha->AddColorMark(0, Color(0xFF000000), false);
440
m_alpha->AddColorMark(1, Color(0xFFFFFFFF), false);
442
HLStoRGB(m_Red, m_Green, m_Blue, h, l, 1.0f - s);
447
RGBAPropertyItem* RGBAPropertyItem::CreateFromXML(const TiXmlElement* elementxml, NodeNetCom* parent, const char* Name, int id)
449
RGBAPropertyItem *node = new RGBAPropertyItem(Name, 0, 0, 0, 0);
450
double red, green, blue, alpha;
452
const TiXmlElement* childxml = elementxml->FirstChildElement();
453
QueryNodeXMLDoubleAttribute(childxml, TEXT("Red"), &red, -1);
454
childxml = childxml->NextSiblingElement();
455
QueryNodeXMLDoubleAttribute(childxml, TEXT("Green"), &green, -1);
456
childxml = childxml->NextSiblingElement();
457
QueryNodeXMLDoubleAttribute(childxml, TEXT("Blue"), &blue, -1);
458
childxml = childxml->NextSiblingElement();
459
QueryNodeXMLDoubleAttribute(childxml, TEXT("Alpha"), &alpha, -1);
462
node->SetGreen(green);
464
node->SetAlpha(alpha);
470
TiXmlElement* RGBAPropertyItem::ToXML() const
472
TiXmlElement* elementxml = NodeNetCom::ToXML();
473
TiXmlElement* childxml;
474
childxml = new TiXmlElement(TEXT("RGBAComponent"));
475
//childxml->SetAttribute(TEXT("Name"), m_X->GetName());
476
childxml->SetDoubleAttribute(TEXT("Red"), m_Red);
477
elementxml->LinkEndChild(childxml);
478
childxml = new TiXmlElement(TEXT("RGBAComponent"));
479
//childxml->SetAttribute(TEXT("Name"), m_Y->GetName());
480
childxml->SetDoubleAttribute(TEXT("Green"), m_Green);
481
elementxml->LinkEndChild(childxml);
482
childxml = new TiXmlElement(TEXT("RGBAComponent"));
483
//childxml->SetAttribute(TEXT("Name"), m_Z->GetName());
484
childxml->SetDoubleAttribute(TEXT("Blue"), m_Blue);
485
elementxml->LinkEndChild(childxml);
486
childxml = new TiXmlElement(TEXT("RGBAComponent"));
487
//childxml->SetAttribute(TEXT("Name"), m_W->GetName());
488
childxml->SetDoubleAttribute(TEXT("Alpha"), m_Alpha);
489
elementxml->LinkEndChild(childxml);
494
bool RGBAPropertyItem::FromXML(const TiXmlElement* elementxml)
496
double red, green, blue, alpha;
497
tstring NameX, NameY, NameZ, NameW;
498
const TiXmlElement* childxml = elementxml->FirstChildElement();
499
//QueryNodeXMLStringAttribute(childxml, TEXT("Name"), NameX, GetID());
500
QueryNodeXMLDoubleAttribute(childxml, TEXT("Red"), &red, -1);
501
childxml = childxml->NextSiblingElement();
502
//QueryNodeXMLStringAttribute(childxml, TEXT("Name"), NameY, GetID());
503
QueryNodeXMLDoubleAttribute(childxml, TEXT("Green"), &green, -1);
504
childxml = childxml->NextSiblingElement();
505
//QueryNodeXMLStringAttribute(childxml, TEXT("Name"), NameZ, GetID());
506
QueryNodeXMLDoubleAttribute(childxml, TEXT("Blue"), &blue, -1);
507
childxml = childxml->NextSiblingElement();
508
//QueryNodeXMLStringAttribute(childxml, TEXT("Name"), NameW, GetID());
509
QueryNodeXMLDoubleAttribute(childxml, TEXT("Alpha"), &alpha, -1);
510
childxml = childxml->NextSiblingElement();
517
return NodeNetCom::FromXML(elementxml);