-
Notifications
You must be signed in to change notification settings - Fork 388
Expand file tree
/
Copy pathWBrush.C
More file actions
148 lines (123 loc) · 2.96 KB
/
WBrush.C
File metadata and controls
148 lines (123 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
* Copyright (C) 2008 Emweb bv, Herent, Belgium.
*
* See the LICENSE file for terms of use.
*/
#include "Wt/WBrush.h"
#include "Wt/WLogger.h"
#include "Wt/WStringStream.h"
#include "Wt/Json/Array.h"
#include "Wt/Json/Object.h"
#include "Wt/Json/Value.h"
namespace Wt {
LOGGER("WBrush");
WBrush::WBrush()
: style_(BrushStyle::None),
color_(StandardColor::Black)
{ }
WBrush::WBrush(BrushStyle style)
: style_(style),
color_(StandardColor::Black)
{ }
WBrush::WBrush(const WColor& color)
: style_(BrushStyle::Solid),
color_(color)
{ }
WBrush::WBrush(StandardColor color)
: style_(BrushStyle::Solid),
color_(color)
{ }
WBrush::WBrush(const WGradient& gradient)
: style_(BrushStyle::Gradient),
gradient_(gradient)
{ }
#ifdef WT_TARGET_JAVA
WBrush WBrush::clone() const
{
WBrush result;
if (isJavaScriptBound()) result.assignBinding(*this);
result.color_ = color_;
result.gradient_ = gradient_;
result.style_ = style_;
return result;
}
#endif // WT_TARGET_JAVA
void WBrush::setColor(const WColor& color)
{
checkModifiable();
color_ = color;
if (style_ == BrushStyle::Gradient)
style_ = BrushStyle::Solid;
}
void WBrush::setGradient(const WGradient& gradient)
{
checkModifiable();
if (!gradient_.isEmpty()) {
gradient_ = gradient;
style_ = BrushStyle::Gradient;
}
}
void WBrush::setStyle(BrushStyle style)
{
checkModifiable();
style_ = style;
}
WBrush &WBrush::operator=(const WBrush &rhs)
{
WJavaScriptExposableObject::operator=(rhs);
color_ = rhs.color_;
gradient_ = rhs.gradient_;
style_ = rhs.style_;
return *this;
}
bool WBrush::operator==(const WBrush& other) const
{
return
sameBindingAs(other)
&& color_ == other.color_
&& style_ == other.style_
&& gradient_ == other.gradient_;
}
bool WBrush::operator!=(const WBrush& other) const
{
return !(*this == other);
}
std::string WBrush::jsValue() const
{
WStringStream ss;
ss << "{\"color\":["
<< color_.red() << ","
<< color_.green() << ","
<< color_.blue() << ","
<< color_.alpha() << "]}";
return ss.str();
}
void WBrush::assignFromJSON(const Json::Value &value)
{
try {
#ifndef WT_TARGET_JAVA
const Json::Object &o = value;
const Json::Value &color = o.get("color");
const Json::Array &col = color;
#else
const Json::Object &o = static_cast<const Json::Object &>(value);
const Json::Value &color = o.get("color");
const Json::Array &col = static_cast<const Json::Array &>(color);
#endif
if (col.size() == 4 &&
!col[0].toNumber().isNull() &&
!col[1].toNumber().isNull() &&
!col[2].toNumber().isNull() &&
!col[3].toNumber().isNull()) {
color_ = WColor(col[0].toNumber().orIfNull(0),
col[1].toNumber().orIfNull(0),
col[2].toNumber().orIfNull(0),
col[3].toNumber().orIfNull(255));
} else {
LOG_ERROR("Couldn't convert JSON to WBrush");
}
} catch (std::exception& e) {
LOG_ERROR("Couldn't convert JSON to WBrush: " + std::string(e.what()));
}
}
}