|
- // generated by Fast Light User Interface Designer (fluid) version 1.0010
-
- #include "Fl_SevenSeg.H"
-
- Fl_SevenSeg::Fl_SevenSeg(int x, int y, int w, int h) :
- Fl_Widget (x, y, w, h),
- decpt (off) {
-
- color2(FL_BLACK);
- color(FL_RED);
- digit = 8;
- segwidth = (w-8)/13;
- segwidth = segwidth<(h-8)/13 ?(h-8)/13: segwidth;
- if (segwidth<1) segwidth =1;
- }
-
- Fl_SevenSeg::~Fl_SevenSeg(void) {
- }
-
- void Fl_SevenSeg::value (int v) {
- if (v>9) digit = 9;
- else digit = v;
- if (active()) redraw();
- }
-
- void Fl_SevenSeg::value(char c) {
- int v = c - '0';
- value(v);
- }
-
- const int Fl_SevenSeg::value(void) {
- return digit;
- }
-
- void Fl_SevenSeg::dp (dp_type state) {
- decpt = state;
- }
-
- const dp_type Fl_SevenSeg::dp(void) {
- return decpt;
- }
-
- const int Fl_SevenSeg::bar_width(void) {
- return segwidth;
- }
-
- void Fl_SevenSeg::bar_width(int w) {
- segwidth = w > 2 ? w:2;
- if (active()) redraw();
- }
- // PRIVATE METHODS
-
- void Fl_SevenSeg::draw() {
- uchar r,g,b;
- int val;
-
- draw_box();
-
- fl_color (color2());
- fl_rectf (x(), y(), w(), h());
-
- int xx = x()+2;
- int ww = w()-4;
- int yy = y()+2;
- int hh = h()-4;
-
- if (digit < -1) return;
-
- Fl::get_color(color(),r,g,b);
- if (!active())
- {
- val = 64+(int)r/4; r = val > 255 ? 255:val;
- val = 64+(int)g/4; g = val > 255 ? 255:val;
- val = 64+(int)b/4; b = val > 255 ? 255:val;
- }
- fl_color(r,g,b);
-
- fl_line_style(FL_SOLID|FL_CAP_ROUND,segwidth);
-
- switch(digit)
- {
- case -1:
- draw_seg_g (xx, yy, ww, hh);
- break;
-
-
- case 0:
- draw_seg_a(xx,yy,ww,hh);
- draw_seg_b(xx,yy,ww,hh);
- draw_seg_c(xx,yy,ww,hh);
- draw_seg_d(xx,yy,ww,hh);
- draw_seg_e(xx,yy,ww,hh);
- draw_seg_f(xx,yy,ww,hh);
- break;
- case 1:
- draw_seg_b(xx,yy,ww,hh);
- draw_seg_c(xx,yy,ww,hh);
- break;
- case 2:
- draw_seg_a(xx,yy,ww,hh);
- draw_seg_b(xx,yy,ww,hh);
- draw_seg_g(xx,yy,ww,hh);
- draw_seg_e(xx,yy,ww,hh);
- draw_seg_d(xx,yy,ww,hh);
- break;
- case 3:
- draw_seg_a(xx,yy,ww,hh);
- draw_seg_b(xx,yy,ww,hh);
- draw_seg_c(xx,yy,ww,hh);
- draw_seg_d(xx,yy,ww,hh);
- draw_seg_g(xx,yy,ww,hh);
- break;
- case 4:
- draw_seg_b(xx,yy,ww,hh);
- draw_seg_c(xx,yy,ww,hh);
- draw_seg_f(xx,yy,ww,hh);
- draw_seg_g(xx,yy,ww,hh);
- break;
- case 5:
- draw_seg_a(xx,yy,ww,hh);
- draw_seg_c(xx,yy,ww,hh);
- draw_seg_d(xx,yy,ww,hh);
- draw_seg_f(xx,yy,ww,hh);
- draw_seg_g(xx,yy,ww,hh);
- break;
- case 6:
- draw_seg_a(xx,yy,ww,hh);
- draw_seg_c(xx,yy,ww,hh);
- draw_seg_d(xx,yy,ww,hh);
- draw_seg_e(xx,yy,ww,hh);
- draw_seg_f(xx,yy,ww,hh);
- draw_seg_g(xx,yy,ww,hh);
- break;
- case 7:
- draw_seg_a(xx,yy,ww,hh);
- draw_seg_b(xx,yy,ww,hh);
- draw_seg_c(xx,yy,ww,hh);
- break;
- case 8:
- draw_seg_a(xx,yy,ww,hh);
- draw_seg_b(xx,yy,ww,hh);
- draw_seg_c(xx,yy,ww,hh);
- draw_seg_d(xx,yy,ww,hh);
- draw_seg_e(xx,yy,ww,hh);
- draw_seg_f(xx,yy,ww,hh);
- draw_seg_g(xx,yy,ww,hh);
- break;
- case 9:
- draw_seg_a(xx,yy,ww,hh);
- draw_seg_b(xx,yy,ww,hh);
- draw_seg_c(xx,yy,ww,hh);
- draw_seg_d(xx,yy,ww,hh);
- draw_seg_g(xx,yy,ww,hh);
- draw_seg_f(xx,yy,ww,hh);
- break;
- }
-
- if (decpt==point) draw_seg_dp (xx, yy, ww, hh);
- else if (decpt==colon) draw_seg_col (xx, yy, ww, hh);
- fl_line_style(FL_SOLID,1);
-
- //fl_pop_clip();
- }
-
-
- void Fl_SevenSeg::draw_seg_dp (int xx, int yy, int ww, int hh) {
- int x1 = xx - segwidth / 2;
- int y1 = yy + hh - segwidth;
- int x2 = x1 + segwidth / 3;
- fl_line (x1, y1, x2, y1);
- }
-
- void Fl_SevenSeg::draw_seg_col (int xx, int yy, int ww, int hh) {
- int x1 = xx - segwidth/2;
- int x2 = x1 + segwidth/3;
- int y1 = yy + 1 + hh/4;
- int y2 = yy - 1 + (hh/4) * 3;
- fl_line (x1, y1, x2, y1);
- fl_line (x1, y2, x2, y2);
- }
-
- void Fl_SevenSeg::draw_seg_a(int xx,int yy,int ww,int hh) {
- int x1 = xx+2*segwidth+1;
- int y1 = yy+segwidth;
- int x2 = xx+ww-2*segwidth-1;
- fl_line(x1,y1,x2,y1);
- }
-
- void Fl_SevenSeg::draw_seg_b(int xx,int yy,int ww,int hh) {
- int x1 = xx+ww-segwidth;
- int y1 = yy+(3*segwidth)/2+1;
- int y2 = y1+hh/2-2*segwidth-1;
- fl_line(x1,y1,x1,y2);
- }
-
- void Fl_SevenSeg::draw_seg_c(int xx,int yy,int ww,int hh) {
- int x1 = xx+ww-segwidth;
- int y1 = yy+(hh+segwidth)/2+1;
- int y2 = y1+hh/2-2*segwidth-1;
- fl_line(x1,y1,x1,y2);
- }
-
- void Fl_SevenSeg::draw_seg_d(int xx,int yy,int ww,int hh) {
- int x1 = xx+2*segwidth+1;
- int y1 = yy+hh-segwidth;
- int x2 = xx+ww-2*segwidth-1;
- fl_line(x1,y1,x2,y1);
- }
-
- void Fl_SevenSeg::draw_seg_e(int xx,int yy,int ww,int hh) {
- int x1 = xx+segwidth;
- int y1 = yy+(hh+segwidth)/2+1;
- int y2 = y1+hh/2-2*segwidth-1;
- fl_line(x1,y1,x1,y2);
- }
-
- void Fl_SevenSeg::draw_seg_f(int xx,int yy,int ww,int hh) {
- int x1 = xx+segwidth;
- int y1 = yy+(3*segwidth)/2+1;
- int y2 = y1+hh/2-2*segwidth-1;
- fl_line(x1,y1,x1,y2);
- }
-
- void Fl_SevenSeg::draw_seg_g(int xx,int yy,int ww,int hh) {
- int x1 = xx+2*segwidth+1;
- int y1 = yy+(hh-segwidth/2)/2;
- int x2 = xx+ww-2*segwidth-1;
- fl_line(x1,y1,x2,y1);
- }
|