Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2004-2024 German Aerospace Center (DLR) and others.
4 : // This program and the accompanying materials are made available under the
5 : // terms of the Eclipse Public License 2.0 which is available at
6 : // https://www.eclipse.org/legal/epl-2.0/
7 : // This Source Code may also be made available under the following Secondary
8 : // Licenses when the conditions for such availability set forth in the Eclipse
9 : // Public License 2.0 are satisfied: GNU General Public License, version 2
10 : // or later which is available at
11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 : /****************************************************************************/
14 : /// @file MFXSevenSegment.cpp
15 : /// @author Mathew Robertson
16 : /// @author Daniel Krajzewicz
17 : /// @author Michael Behrisch
18 : /// @date 2004-03-19
19 : ///
20 : //
21 : /****************************************************************************/
22 : #include <config.h>
23 :
24 : #include "MFXSevenSegment.h"
25 :
26 :
27 : /// @brief note: this class may change into FXLCDsegment, so as to support 7 or 14 segment display
28 : #define ASCII_ZERO 48
29 :
30 : // ===========================================================================
31 : // FOX callback mapping
32 : // ===========================================================================
33 :
34 : FXDEFMAP(MFXSevenSegment) MFXSevenSegmentMap[] = {
35 : FXMAPFUNC(SEL_PAINT, 0, MFXSevenSegment::onPaint),
36 : FXMAPFUNC(SEL_COMMAND, FXWindow::ID_SETVALUE, MFXSevenSegment::onCmdSetValue),
37 : FXMAPFUNC(SEL_COMMAND, FXWindow::ID_SETINTVALUE, MFXSevenSegment::onCmdSetIntValue),
38 : FXMAPFUNC(SEL_COMMAND, FXWindow::ID_GETINTVALUE, MFXSevenSegment::onCmdGetIntValue),
39 : FXMAPFUNC(SEL_COMMAND, FXWindow::ID_SETSTRINGVALUE, MFXSevenSegment::onCmdSetStringValue),
40 : FXMAPFUNC(SEL_COMMAND, FXWindow::ID_GETSTRINGVALUE, MFXSevenSegment::onCmdGetStringValue),
41 : //FXMAPFUNC(SEL_UPDATE, FXWindow::ID_QUERY_TIP, MFXSevenSegment::onQueryTip),
42 : //FXMAPFUNC(SEL_UPDATE, FXWindow::ID_QUERY_HELP, MFXSevenSegment::onQueryHelp),
43 : };
44 :
45 : // Object implementation
46 118821111 : FXIMPLEMENT(MFXSevenSegment, FXFrame, MFXSevenSegmentMap, ARRAYNUMBER(MFXSevenSegmentMap))
47 :
48 :
49 : // ===========================================================================
50 : // method definitions
51 : // ===========================================================================
52 :
53 513468 : MFXSevenSegment::MFXSevenSegment(FXComposite* p, FXObject* tgt, FXSelector sel, FXuint opts, FXint pl, FXint pr, FXint pt, FXint pb) :
54 : FXFrame(p, opts, 0, 0, 0, 0, pl, pr, pt, pb),
55 513468 : myValue(' '),
56 513468 : myLCDTextColor(FXRGB(0, 255, 0)),
57 513468 : myBackGroundColor(FXRGB(0, 0, 0)),
58 513468 : myHorizontalSegmentLength(8),
59 513468 : myVerticalSegmentLength(8),
60 513468 : mySegmentThickness(3),
61 513468 : myGroove(1) {
62 : setTarget(tgt);
63 : setSelector(sel);
64 513468 : enable();
65 513468 : }
66 :
67 :
68 : FXint
69 4282322 : MFXSevenSegment::getDefaultWidth() {
70 4282322 : return padleft + (myGroove << 1) + myHorizontalSegmentLength + padright + (border << 1);
71 : }
72 :
73 :
74 : FXint
75 4079512 : MFXSevenSegment::getDefaultHeight() {
76 4079512 : return padtop + (myGroove << 2) + (myVerticalSegmentLength << 1) + padbottom + (border << 1);
77 : }
78 :
79 :
80 : void
81 11558720 : MFXSevenSegment::setText(FXchar val) {
82 11558720 : if (FXString(val, 1).upper() != FXString(myValue, 1).upper()) {
83 1011760 : myValue = val;
84 1011760 : recalc();
85 1011760 : update();
86 : }
87 11558720 : }
88 :
89 :
90 : void
91 0 : MFXSevenSegment::setFgColor(const FXColor clr) {
92 0 : if (myLCDTextColor != clr) {
93 0 : myLCDTextColor = clr;
94 0 : recalc();
95 0 : update();
96 : }
97 0 : }
98 :
99 :
100 : void
101 0 : MFXSevenSegment::setBgColor(const FXColor clr) {
102 0 : if (myBackGroundColor != clr) {
103 0 : myBackGroundColor = clr;
104 0 : recalc();
105 0 : update();
106 : }
107 0 : }
108 :
109 :
110 : void
111 513468 : MFXSevenSegment::setHorizontal(const FXint len) {
112 513468 : if (len != myHorizontalSegmentLength) {
113 513468 : myHorizontalSegmentLength = (FXshort)len;
114 513468 : checkSize();
115 513468 : recalc();
116 513468 : update();
117 : }
118 513468 : }
119 :
120 :
121 : void
122 513468 : MFXSevenSegment::setVertical(const FXint len) {
123 513468 : if (len != myVerticalSegmentLength) {
124 513468 : myVerticalSegmentLength = (FXshort)len;
125 513468 : checkSize();
126 513468 : recalc();
127 513468 : update();
128 : }
129 513468 : }
130 :
131 :
132 : void
133 513468 : MFXSevenSegment::setThickness(const FXint w) {
134 513468 : if (w != mySegmentThickness) {
135 513468 : mySegmentThickness = (FXshort)w;
136 513468 : checkSize();
137 513468 : recalc();
138 513468 : update();
139 : }
140 513468 : }
141 :
142 :
143 : void
144 513468 : MFXSevenSegment::setGroove(const FXint w) {
145 513468 : if (w != myGroove) {
146 513468 : myGroove = (FXshort)w;
147 513468 : checkSize();
148 513468 : recalc();
149 513468 : update();
150 : }
151 513468 : }
152 :
153 :
154 : long
155 1001986 : MFXSevenSegment::onPaint(FXObject*, FXSelector, void* ptr) {
156 : FXEvent* event = (FXEvent*) ptr;
157 1001986 : FXDCWindow dc(this, event);
158 1001986 : drawFrame(dc, 0, 0, width, height);
159 1001986 : dc.setForeground(myBackGroundColor);
160 1001986 : dc.fillRectangle(border, border, width - (border << 1), height - (border << 1));
161 1001986 : dc.setForeground(myLCDTextColor);
162 1001986 : drawFigure(dc, myValue);
163 1001986 : return 1;
164 1001986 : }
165 :
166 :
167 : long
168 0 : MFXSevenSegment::onCmdSetValue(FXObject*, FXSelector, void* ptr) {
169 : FXchar* c = (FXchar*)ptr;
170 0 : if (c[0] != '\0') {
171 0 : setText(c[0]);
172 : }
173 0 : return 1;
174 : }
175 :
176 :
177 : long
178 0 : MFXSevenSegment::onCmdGetIntValue(FXObject* sender, FXSelector, void*) {
179 0 : FXint i = myValue - ASCII_ZERO;
180 0 : if (i < 0) {
181 0 : i = 0;
182 : }
183 0 : if (i > 9) {
184 0 : i = 9;
185 : }
186 0 : sender->handle(this, FXSEL(SEL_COMMAND, ID_SETINTVALUE), (void*)&i);
187 0 : return 1;
188 : }
189 :
190 :
191 : long
192 0 : MFXSevenSegment::onCmdSetIntValue(FXObject*, FXSelector, void* ptr) {
193 0 : FXint i = *((FXint*)ptr);
194 : if (i < 0) {
195 : i = 0;
196 : }
197 0 : if (i > 9) {
198 : i = 9;
199 : }
200 0 : setText((FXchar)(i + ASCII_ZERO));
201 0 : return 1;
202 : }
203 :
204 :
205 : long
206 0 : MFXSevenSegment::onCmdGetStringValue(FXObject* sender, FXSelector, void*) {
207 0 : FXString s(myValue, 1);
208 0 : sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), (void*)&s);
209 0 : return 1;
210 0 : }
211 :
212 :
213 : long
214 0 : MFXSevenSegment::onCmdSetStringValue(FXObject*, FXSelector, void* ptr) {
215 : FXString* s = (FXString*)ptr;
216 0 : if (s->length()) {
217 0 : setText(s->at(0));
218 : }
219 0 : return 1;
220 : }
221 :
222 :
223 : void
224 0 : MFXSevenSegment::save(FXStream& store) const {
225 0 : FXFrame::save(store);
226 0 : store << myValue;
227 0 : store << myLCDTextColor;
228 0 : store << myBackGroundColor;
229 0 : store << myHorizontalSegmentLength;
230 0 : store << myVerticalSegmentLength;
231 0 : store << mySegmentThickness;
232 0 : store << myGroove;
233 0 : }
234 :
235 :
236 : void
237 0 : MFXSevenSegment::load(FXStream& store) {
238 0 : FXFrame::load(store);
239 0 : store >> myValue;
240 0 : store >> myLCDTextColor;
241 0 : store >> myBackGroundColor;
242 0 : store >> myHorizontalSegmentLength;
243 0 : store >> myVerticalSegmentLength;
244 0 : store >> mySegmentThickness;
245 0 : store >> myGroove;
246 0 : }
247 :
248 :
249 : long
250 0 : MFXSevenSegment::onQueryTip(FXObject* sender, FXSelector sel, void* ptr) {
251 0 : if (getParent()) {
252 0 : return getParent()->handle(sender, sel, ptr);
253 : }
254 : return 0;
255 : }
256 :
257 :
258 : long
259 0 : MFXSevenSegment::onQueryHelp(FXObject* sender, FXSelector sel, void* ptr) {
260 0 : if (getParent()) {
261 0 : return getParent()->handle(sender, sel, ptr);
262 : }
263 : return 0;
264 : }
265 :
266 :
267 : void
268 646390 : MFXSevenSegment::drawTopSegment(FXDCWindow& dc, FXshort x, FXshort y) {
269 : FXPoint points[4];
270 646390 : points[0].x = x;
271 646390 : points[0].y = y;
272 646390 : points[1].x = x + myHorizontalSegmentLength;
273 646390 : points[1].y = y;
274 646390 : points[2].x = x + myHorizontalSegmentLength - mySegmentThickness;
275 646390 : points[2].y = y + mySegmentThickness;
276 646390 : points[3].x = x + mySegmentThickness;
277 646390 : points[3].y = y + mySegmentThickness;
278 646390 : dc.fillPolygon(points, 4);
279 646390 : }
280 :
281 :
282 : void
283 494744 : MFXSevenSegment::drawLeftTopSegment(FXDCWindow& dc, FXshort x, FXshort y) {
284 : FXPoint points[4];
285 494744 : points[0].x = x;
286 494744 : points[0].y = y;
287 494744 : points[1].x = x + mySegmentThickness;
288 494744 : points[1].y = y + mySegmentThickness;
289 494744 : points[2].x = x + mySegmentThickness;
290 494744 : points[2].y = y + myVerticalSegmentLength - (mySegmentThickness >> 1);
291 494744 : points[3].x = x;
292 494744 : points[3].y = y + myVerticalSegmentLength;
293 494744 : dc.fillPolygon(points, 4);
294 494744 : }
295 :
296 :
297 : void
298 635623 : MFXSevenSegment::drawRightTopSegment(FXDCWindow& dc, FXshort x, FXshort y) {
299 : FXPoint points[4];
300 635623 : points[0].x = x + mySegmentThickness;
301 635623 : points[0].y = y;
302 635623 : points[1].x = x + mySegmentThickness;
303 635623 : points[1].y = y + myVerticalSegmentLength;
304 635623 : points[2].x = x;
305 635623 : points[2].y = y + myVerticalSegmentLength - (mySegmentThickness >> 1);
306 635623 : points[3].x = x;
307 635623 : points[3].y = y + mySegmentThickness;
308 635623 : dc.fillPolygon(points, 4);
309 635623 : }
310 :
311 :
312 : void
313 659953 : MFXSevenSegment::drawMiddleSegment(FXDCWindow& dc, FXshort x, FXshort y) {
314 : FXPoint points[6];
315 659953 : points[0].x = x + mySegmentThickness;
316 659953 : points[0].y = y;
317 659953 : points[1].x = x + myHorizontalSegmentLength - mySegmentThickness;
318 659953 : points[1].y = y;
319 659953 : points[2].x = x + myHorizontalSegmentLength;
320 659953 : points[2].y = y + (mySegmentThickness >> 1);
321 659953 : points[3].x = x + myHorizontalSegmentLength - mySegmentThickness;
322 659953 : points[3].y = y + mySegmentThickness;
323 659953 : points[4].x = x + mySegmentThickness;
324 659953 : points[4].y = y + mySegmentThickness;
325 659953 : points[5].x = x;
326 659953 : points[5].y = y + (mySegmentThickness >> 1);
327 659953 : dc.fillPolygon(points, 6);
328 659953 : }
329 :
330 :
331 : void
332 339581 : MFXSevenSegment::drawLeftBottomSegment(FXDCWindow& dc, FXshort x, FXshort y) {
333 : FXPoint points[4];
334 339581 : points[0].x = x;
335 339581 : points[0].y = y;
336 339581 : points[1].x = x + mySegmentThickness;
337 339581 : points[1].y = y + (mySegmentThickness >> 1);
338 339581 : points[2].x = x + mySegmentThickness;
339 339581 : points[2].y = y + myVerticalSegmentLength - mySegmentThickness;
340 339581 : points[3].x = x;
341 339581 : points[3].y = y + myVerticalSegmentLength;
342 339581 : dc.fillPolygon(points, 4);
343 339581 : }
344 :
345 :
346 : void
347 716774 : MFXSevenSegment::drawRightBottomSegment(FXDCWindow& dc, FXshort x, FXshort y) {
348 : FXPoint points[4];
349 716774 : points[0].x = x + mySegmentThickness;
350 716774 : points[0].y = y;
351 716774 : points[1].x = x + mySegmentThickness;
352 716774 : points[1].y = y + myVerticalSegmentLength;
353 716774 : points[2].x = x;
354 716774 : points[2].y = y + myVerticalSegmentLength - mySegmentThickness;
355 716774 : points[3].x = x;
356 716774 : points[3].y = y + (mySegmentThickness >> 1);
357 716774 : dc.fillPolygon(points, 4);
358 716774 : }
359 :
360 :
361 : void
362 571810 : MFXSevenSegment::drawBottomSegment(FXDCWindow& dc, FXshort x, FXshort y) {
363 : FXPoint points[4];
364 571810 : points[0].x = x + mySegmentThickness;
365 571810 : points[0].y = y;
366 571810 : points[1].x = x + myHorizontalSegmentLength - mySegmentThickness;
367 571810 : points[1].y = y;
368 571810 : points[2].x = x + myHorizontalSegmentLength;
369 571810 : points[2].y = y + mySegmentThickness;
370 571810 : points[3].x = x;
371 571810 : points[3].y = y + mySegmentThickness;
372 571810 : dc.fillPolygon(points, 4);
373 571810 : }
374 :
375 :
376 : void
377 1001986 : MFXSevenSegment::drawSegments(FXDCWindow& dc, FXbool s1, FXbool s2, FXbool s3, FXbool s4, FXbool s5, FXbool s6, FXbool s7) {
378 1001986 : FXshort sx = (FXshort)(border + padleft), sy = (FXshort)(border + padtop);
379 : FXshort x, y;
380 1001986 : if (options & LAYOUT_FILL) {
381 0 : if (options & LAYOUT_FILL_X) {
382 0 : myHorizontalSegmentLength = (FXshort)(width - padleft - padright - (border << 1));
383 0 : if (myHorizontalSegmentLength < 4) {
384 0 : myHorizontalSegmentLength = 4;
385 : }
386 : }
387 0 : if (options & LAYOUT_FILL_Y) {
388 0 : myVerticalSegmentLength = (FXshort)(height - padtop - padbottom - (border << 1)) >> 1;
389 0 : if (myVerticalSegmentLength < 4) {
390 0 : myVerticalSegmentLength = 4;
391 : }
392 : }
393 0 : mySegmentThickness = FXMIN(myHorizontalSegmentLength, myVerticalSegmentLength) / 4;
394 0 : myGroove = mySegmentThickness / 4;
395 0 : if (mySegmentThickness < 1) {
396 0 : mySegmentThickness = 1;
397 : }
398 0 : if (myGroove < 1) {
399 0 : myGroove = 1;
400 : }
401 0 : if (options & LAYOUT_FILL_X) {
402 0 : myHorizontalSegmentLength -= myGroove << 1;
403 : }
404 0 : if (options & LAYOUT_FILL_Y) {
405 0 : myVerticalSegmentLength -= myGroove << 1;
406 : }
407 : }
408 1001986 : if (s1) {
409 646390 : x = sx + myGroove;
410 : y = sy;
411 646390 : drawTopSegment(dc, x, y);
412 : }
413 1001986 : if (s2) {
414 : x = sx;
415 494744 : y = sy + myGroove;
416 494744 : drawLeftTopSegment(dc, x, y);
417 : }
418 1001986 : if (s3) {
419 635623 : x = sx + myGroove + myHorizontalSegmentLength - mySegmentThickness + myGroove;
420 635623 : y = sy + myGroove;
421 635623 : drawRightTopSegment(dc, x, y);
422 : }
423 1001986 : if (s4) {
424 659953 : x = sx + myGroove;
425 659953 : y = sy + myGroove + myVerticalSegmentLength - (mySegmentThickness >> 1) + myGroove;
426 659953 : drawMiddleSegment(dc, x, y);
427 : }
428 1001986 : if (s5) {
429 : x = sx;
430 339581 : y = sy + (myGroove << 1) + myVerticalSegmentLength + myGroove;
431 339581 : drawLeftBottomSegment(dc, x, y);
432 : }
433 1001986 : if (s6) {
434 716774 : x = sx + myGroove + myHorizontalSegmentLength - mySegmentThickness + myGroove;
435 716774 : y = sy + (myGroove << 1) + myVerticalSegmentLength + myGroove;
436 716774 : drawRightBottomSegment(dc, x, y);
437 : }
438 1001986 : if (s7) {
439 571810 : x = sx + myGroove;
440 571810 : y = sy + (myGroove << 1) + myVerticalSegmentLength + myGroove + myVerticalSegmentLength + myGroove - mySegmentThickness;
441 571810 : drawBottomSegment(dc, x, y);
442 : }
443 1001986 : }
444 :
445 :
446 : void
447 1001986 : MFXSevenSegment::drawFigure(FXDCWindow& dc, FXchar figure) {
448 1001986 : switch (figure) {
449 85429 : case ' ' :
450 85429 : drawSegments(dc, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
451 85429 : break;
452 0 : case '(' :
453 0 : drawSegments(dc, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE);
454 0 : break;
455 0 : case ')' :
456 0 : drawSegments(dc, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE);
457 0 : break;
458 0 : case '[' :
459 0 : drawSegments(dc, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE);
460 0 : break;
461 0 : case ']' :
462 0 : drawSegments(dc, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE);
463 0 : break;
464 0 : case '=' :
465 0 : drawSegments(dc, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE);
466 0 : break;
467 : // case '+' : drawSegments (dc, FALSE,FALSE,FALSE,TRUE ,FALSE,FALSE,FALSE); break;
468 117474 : case '-' :
469 : case ':' :
470 117474 : drawSegments(dc, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE);
471 117474 : break;
472 688 : case '_' :
473 : case '.' :
474 : case ',' :
475 688 : drawSegments(dc, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE);
476 688 : break;
477 105728 : case '0' :
478 105728 : drawSegments(dc, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE);
479 105728 : break;
480 74920 : case '1' :
481 74920 : drawSegments(dc, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE);
482 74920 : break;
483 81621 : case '2' :
484 81621 : drawSegments(dc, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE);
485 81621 : break;
486 71842 : case '3' :
487 71842 : drawSegments(dc, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE);
488 71842 : break;
489 77085 : case '4' :
490 77085 : drawSegments(dc, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE);
491 77085 : break;
492 86744 : case '5' :
493 86744 : drawSegments(dc, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE);
494 86744 : break;
495 76028 : case '6' :
496 76028 : drawSegments(dc, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE);
497 76028 : break;
498 75268 : case '7' :
499 75268 : drawSegments(dc, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE);
500 75268 : break;
501 76204 : case '8' :
502 76204 : drawSegments(dc, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
503 76204 : break;
504 72955 : case '9' :
505 72955 : drawSegments(dc, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE);
506 72955 : break;
507 0 : case 'a' :
508 : case 'A' :
509 0 : drawSegments(dc, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE);
510 0 : break;
511 0 : case 'b' :
512 : case 'B' :
513 0 : drawSegments(dc, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE);
514 0 : break;
515 0 : case 'c' :
516 : case 'C' :
517 0 : drawSegments(dc, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE);
518 0 : break;
519 0 : case 'd' :
520 : case 'D' :
521 0 : drawSegments(dc, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE);
522 0 : break;
523 0 : case 'e' :
524 : case 'E' :
525 0 : drawSegments(dc, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE);
526 0 : break;
527 0 : case 'f' :
528 : case 'F' :
529 0 : drawSegments(dc, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE);
530 0 : break;
531 0 : case 'g' :
532 : case 'G' :
533 0 : drawSegments(dc, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE);
534 0 : break;
535 0 : case 'h' :
536 : case 'H' :
537 0 : drawSegments(dc, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE);
538 0 : break;
539 0 : case 'i' :
540 : case 'I' :
541 0 : drawSegments(dc, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
542 0 : break;
543 0 : case 'j' :
544 : case 'J' :
545 0 : drawSegments(dc, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE);
546 0 : break;
547 : // case 'k' :
548 : // case 'k' : drawSegments (dc, FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE); break;
549 0 : case 'l' :
550 : case 'L' :
551 0 : drawSegments(dc, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE);
552 0 : break;
553 : // case 'm' :
554 : // case 'M' : drawSegments (dc, FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE); break;
555 0 : case 'n' :
556 : case 'N' :
557 0 : drawSegments(dc, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE);
558 0 : break;
559 0 : case 'o' :
560 : case 'O' :
561 0 : drawSegments(dc, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE);
562 0 : break;
563 0 : case 'p' :
564 : case 'P' :
565 0 : drawSegments(dc, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE);
566 0 : break;
567 0 : case 'q' :
568 : case 'Q' :
569 0 : drawSegments(dc, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE);
570 0 : break;
571 0 : case 'r' :
572 : case 'R' :
573 0 : drawSegments(dc, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE);
574 0 : break;
575 0 : case 's' :
576 : case 'S' :
577 0 : drawSegments(dc, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE);
578 0 : break;
579 0 : case 't' :
580 : case 'T' :
581 0 : drawSegments(dc, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE);
582 0 : break;
583 0 : case 'u' :
584 : case 'U' :
585 0 : drawSegments(dc, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE);
586 0 : break;
587 : // case 'v' :
588 : // case 'V' : drawSegments (dc, FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE); break;
589 : // case 'w' :
590 : // case 'W' : drawSegments (dc, FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE); break;
591 0 : case 'x' :
592 : case 'X' :
593 0 : drawSegments(dc, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE);
594 0 : break;
595 0 : case 'y' :
596 : case 'Y' :
597 0 : drawSegments(dc, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE);
598 0 : break;
599 : // case 'z' :
600 : // case 'Z' :
601 0 : default :
602 0 : fxerror("MFXSevenSegment doesn't support: %c\n", figure);
603 : }
604 1001986 : }
605 :
606 :
607 : void
608 2053872 : MFXSevenSegment::checkSize() {
609 2053872 : if (myHorizontalSegmentLength < 3) {
610 513468 : myHorizontalSegmentLength = 3;
611 513468 : mySegmentThickness = 1;
612 : }
613 2053872 : if (myVerticalSegmentLength < 3) {
614 0 : myVerticalSegmentLength = 3;
615 0 : mySegmentThickness = 1;
616 : }
617 2053872 : if (mySegmentThickness < 1) {
618 0 : mySegmentThickness = 1;
619 : }
620 2053872 : if (myHorizontalSegmentLength < (mySegmentThickness << 1)) {
621 513468 : myHorizontalSegmentLength = (mySegmentThickness << 1) + 1;
622 : }
623 2053872 : if (myVerticalSegmentLength < (mySegmentThickness << 1)) {
624 0 : myVerticalSegmentLength = (mySegmentThickness << 1) + 1;
625 : }
626 2053872 : if (myHorizontalSegmentLength < 8 || myVerticalSegmentLength < 8) {
627 2053872 : myGroove = 2;
628 : }
629 2053872 : if (myHorizontalSegmentLength < 1 || myVerticalSegmentLength < 3 || mySegmentThickness < 3) {
630 2053872 : myGroove = 1;
631 : }
632 2053872 : if (myGroove >= mySegmentThickness) {
633 1026936 : myGroove = mySegmentThickness - 1;
634 : }
635 2053872 : }
|