drawing_manipulator.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <geometry/gtk/drawing_manipulator.h>
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 namespace fawkes {
00037
00038
00039 DrawingManipulator::DrawingManipulator()
00040 {
00041 m_line_width = -1.0;
00042 m_color_r = -1.0;
00043 m_color_g = -1.0;
00044 m_color_b = -1.0;
00045
00046 m_line_width_set = false;
00047 m_point_size_set = false;
00048 m_color_set = false;
00049 }
00050
00051
00052 DrawingManipulator::~DrawingManipulator()
00053 {
00054 }
00055
00056
00057
00058
00059
00060
00061 void
00062 DrawingManipulator::integrate(const DrawingManipulator* m)
00063 {
00064 if ( !m_line_width_set && m->m_line_width_set )
00065 { m_line_width = m->m_line_width; }
00066
00067 if ( !m_point_size_set && m->m_point_size_set)
00068 { m_point_size = m->m_point_size; }
00069
00070 if ( !m_color_set && m->m_color_set)
00071 {
00072 m_color_r = m->m_color_r;
00073 m_color_g = m->m_color_g;
00074 m_color_b = m->m_color_b;
00075 }
00076 }
00077
00078
00079
00080
00081 void
00082 DrawingManipulator::set_line_width(float w)
00083 {
00084 if (0 > w)
00085 { return; }
00086
00087 m_line_width = w;
00088 m_line_width_set = true;
00089 }
00090
00091
00092
00093
00094 float
00095 DrawingManipulator::get_line_width() const
00096 {
00097 return m_line_width;
00098 }
00099
00100
00101
00102
00103 void
00104 DrawingManipulator::set_point_size(float s)
00105 {
00106 if (0 > s)
00107 { return; }
00108
00109 m_point_size = s;
00110 m_point_size_set = true;
00111 }
00112
00113
00114
00115
00116 float
00117 DrawingManipulator::get_point_size() const
00118 {
00119 return m_point_size;
00120 }
00121
00122
00123
00124
00125 void
00126 DrawingManipulator::set_color(Color c)
00127 {
00128 switch (c)
00129 {
00130 case BLACK:
00131 m_color_r = 0.0;
00132 m_color_g = 0.0;
00133 m_color_b = 0.0;
00134 m_color_set = true;
00135 break;
00136
00137 case WHITE:
00138 m_color_r = 1.0;
00139 m_color_g = 1.0;
00140 m_color_b = 1.0;
00141 m_color_set = true;
00142 break;
00143
00144 case RED:
00145 m_color_r = 1.0;
00146 m_color_g = 0.0;
00147 m_color_b = 0.0;
00148 m_color_set = true;
00149 break;
00150
00151 case GREEN:
00152 m_color_r = 0.0;
00153 m_color_g = 1.0;
00154 m_color_b = 0.0;
00155 m_color_set = true;
00156 break;
00157
00158 case BLUE:
00159 m_color_r = 0.0;
00160 m_color_g = 0.0;
00161 m_color_b = 1.0;
00162 m_color_set = true;
00163 break;
00164
00165 default:
00166 break;
00167 }
00168 }
00169
00170
00171
00172
00173
00174
00175 void
00176 DrawingManipulator::set_color(float r, float g, float b)
00177 {
00178 if ( 0 > r || 1 < r || 0 > g || 1 < g || 0 > b || 1 < b )
00179 { return; }
00180
00181 m_color_r = r;
00182 m_color_g = g;
00183 m_color_b = b;
00184
00185 m_color_set = true;
00186 }
00187
00188
00189
00190
00191
00192
00193 void
00194 DrawingManipulator::get_color(float& r, float& g, float& b) const
00195 {
00196 r = m_color_r;
00197 g = m_color_g;
00198 b = m_color_b;
00199 }
00200
00201 void
00202 DrawingManipulator::draw(Cairo::RefPtr<Cairo::Context>& context)
00203 {
00204 if (m_line_width_set)
00205 { context->set_line_width(m_line_width); }
00206
00207 if (m_color_set)
00208 { context->set_source_rgb(m_color_r, m_color_g, m_color_b); }
00209 }
00210
00211
00212
00213
00214
00215 DrawingManipulator* set_line_width(float w)
00216 {
00217 DrawingManipulator* m = new DrawingManipulator();
00218 m->set_line_width(w);
00219 return m;
00220 }
00221
00222
00223
00224
00225
00226
00227
00228 DrawingManipulator* set_color(float r, float g, float b)
00229 {
00230 DrawingManipulator* m = new DrawingManipulator();
00231 m->set_color(r, g, b);
00232 return m;
00233 }
00234
00235
00236
00237
00238
00239 DrawingManipulator* set_color(DrawingManipulator::Color c)
00240 {
00241 DrawingManipulator* m = new DrawingManipulator();
00242 m->set_color(c);
00243 return m;
00244 }
00245
00246
00247
00248
00249
00250 DrawingManipulator* set_point_size(float s)
00251 {
00252 DrawingManipulator* m = new DrawingManipulator();
00253 m->set_point_size(s);
00254 return m;
00255 }
00256
00257 }