Mercurial > hg > octave-avbm
comparison src/graphics.cc @ 6568:9520d1004a73
[project @ 2007-04-24 21:44:21 by jwe]
author | jwe |
---|---|
date | Tue, 24 Apr 2007 21:44:21 +0000 |
parents | 3e2cfed6c87e |
children | 55586d763de1 |
comparison
equal
deleted
inserted
replaced
6567:e82cb026b893 | 6568:9520d1004a73 |
---|---|
61 // --------------------------------------------------------------------- | 61 // --------------------------------------------------------------------- |
62 | 62 |
63 class color_property | 63 class color_property |
64 { | 64 { |
65 public: | 65 public: |
66 color_property (double r = 0, double g = 0, double b = 1, double a = 1) | 66 color_property (double r = 0, double g = 0, double b = 1) |
67 { | 67 { |
68 xrgba[0] = r; | 68 xrgb[0] = r; |
69 xrgba[1] = g; | 69 xrgb[1] = g; |
70 xrgba[2] = b; | 70 xrgb[2] = b; |
71 xrgba[3] = a; | |
72 | 71 |
73 validate (); | 72 validate (); |
74 } | 73 } |
75 | 74 |
76 color_property (char c) | 75 color_property (char c) |
77 { | 76 { |
78 c2rgba (c); | 77 c2rgb (c); |
79 } | 78 } |
80 | 79 |
81 color_property (const octave_value& val) | 80 color_property (const octave_value& val) |
82 { | 81 { |
83 // FIXME -- need some error checking here. | 82 // FIXME -- need some error checking here. |
84 | 83 |
85 Matrix m = val.matrix_value (); | 84 Matrix m = val.matrix_value (); |
86 | 85 |
87 if (! error_state && m.numel () >= 3 && m.numel () <= 4) | 86 if (! error_state && m.numel () == 3) |
88 { | 87 { |
89 for (int i = 0; i < m.numel (); i++) | 88 for (int i = 0; i < m.numel (); i++) |
90 xrgba[i] = m(i); | 89 xrgb[i] = m(i); |
91 | 90 |
92 validate (); | 91 validate (); |
93 } | 92 } |
94 else | 93 else |
95 { | 94 { |
96 std::string c = val.string_value (); | 95 std::string c = val.string_value (); |
97 | 96 |
98 if (! error_state && c.length () == 1) | 97 if (! error_state && c.length () == 1) |
99 c2rgba (c[0]); | 98 c2rgb (c[0]); |
100 else | 99 else |
101 error ("invalid color specification"); | 100 error ("invalid color specification"); |
102 } | 101 } |
103 } | 102 } |
104 | 103 |
105 void validate (void) const | 104 void validate (void) const |
106 { | 105 { |
107 for (int i = 0; i < 4; i++) | 106 for (int i = 0; i < 3; i++) |
108 { | 107 { |
109 if (xrgba[i] < 0 || xrgba[i] > 1) | 108 if (xrgb[i] < 0 || xrgb[i] > 1) |
110 { | 109 { |
111 error ("invalid RGB color specification"); | 110 error ("invalid RGB color specification"); |
112 break; | 111 break; |
113 } | 112 } |
114 } | 113 } |
117 operator octave_value (void) const | 116 operator octave_value (void) const |
118 { | 117 { |
119 Matrix retval (1, 3); | 118 Matrix retval (1, 3); |
120 | 119 |
121 for (int i = 0; i < 3 ; i++) | 120 for (int i = 0; i < 3 ; i++) |
122 retval(i) = xrgba[i]; | 121 retval(i) = xrgb[i]; |
123 | 122 |
124 return retval; | 123 return retval; |
125 } | 124 } |
126 | 125 |
127 const double* rgba (void) const | 126 const double* rgb (void) const |
128 { | 127 { |
129 return xrgba; | 128 return xrgb; |
130 } | 129 } |
131 | 130 |
132 private: | 131 private: |
133 double xrgba[4]; | 132 double xrgb[3]; |
134 | 133 |
135 void c2rgba (char c) | 134 void c2rgb (char c) |
136 { | 135 { |
137 double tmp_rgba[4] = {0,0,0,1}; | 136 double tmp_rgb[4] = {0, 0, 0}; |
138 | 137 |
139 switch(c) | 138 switch(c) |
140 { | 139 { |
141 case 'r': | 140 case 'r': |
142 tmp_rgba[0] = 1; | 141 tmp_rgb[0] = 1; |
143 break; | 142 break; |
144 | 143 |
145 case 'g': | 144 case 'g': |
146 tmp_rgba[1] = 1; | 145 tmp_rgb[1] = 1; |
147 break; | 146 break; |
148 | 147 |
149 case 'b': | 148 case 'b': |
150 tmp_rgba[2] = 1; | 149 tmp_rgb[2] = 1; |
151 break; | 150 break; |
152 | 151 |
153 case 'c': | 152 case 'c': |
154 tmp_rgba[1] = tmp_rgba[2] = 1; | 153 tmp_rgb[1] = tmp_rgb[2] = 1; |
155 break; | 154 break; |
156 | 155 |
157 case 'm': | 156 case 'm': |
158 tmp_rgba[0] = tmp_rgba[2] = 1; | 157 tmp_rgb[0] = tmp_rgb[2] = 1; |
159 break; | 158 break; |
160 | 159 |
161 case 'y': | 160 case 'y': |
162 tmp_rgba[0] = tmp_rgba[1] = 1; | 161 tmp_rgb[0] = tmp_rgb[1] = 1; |
163 break; | 162 break; |
164 | 163 |
165 case 'w': | 164 case 'w': |
166 tmp_rgba[0] = tmp_rgba[1] = tmp_rgba[2] = 1; | 165 tmp_rgb[0] = tmp_rgb[1] = tmp_rgb[2] = 1; |
167 break; | 166 break; |
168 | 167 |
169 default: | 168 default: |
170 error ("invalid color specification"); | 169 error ("invalid color specification"); |
171 } | 170 } |
172 | 171 |
173 if (! error_state) | 172 if (! error_state) |
174 { | 173 { |
175 for (int i = 0; i < 4; i++) | 174 for (int i = 0; i < 4; i++) |
176 xrgba[i] = tmp_rgba[i]; | 175 xrgb[i] = tmp_rgb[i]; |
177 } | 176 } |
178 } | 177 } |
179 }; | 178 }; |
180 | 179 |
181 class colormap_property | 180 class colormap_property |