|
- // generated by Fast Light User Interface Designer (fluid) version 1.0010
-
- #include "Fl_SevenSeg.H"
-
- // Andy Preston changed
- // Fl_SevenSeg::Fl_SevenSeg(int x,int y,int w,int h):Fl_Widget(x,y,w,h) {
- // to
- 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) {
- }
-
- // Andy Preston changed
- //void Fl_SevenSeg::value(int v) {
- // if (v <0) digit = -1;
- // else
- // if (v>9) digit = 9;
- // else
- // digit = v;
- // if (active()) redraw();
- //}
- // to
- 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;
- }
-
- // Andy Preston changed
- // void Fl_SevenSeg::dp(int onoff) {
- // decpt =(onoff!=0);
- // }
- // to
- void Fl_SevenSeg::dp (dp_type state) {
- decpt = state;
- }
-
- // Andy Preston changed
- // const int Fl_SevenSeg::dp(void) {
- // to
- 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();
-
- // andy preston
- fl_color (color2());
- fl_rectf (x(), y(), w(), h());
-
- // Andy Preston Changed
- // int xx = x()+4;
- // int ww = w()-8;
- // int yy = y()+4;
- // int hh = h()-8;
- // to
- int xx = x()+2;
- int ww = w()-4;
- int yy = y()+2;
- int hh = h()-4;
-
- // Andy Preston removed
- // fl_clip(xx,yy,ww,hh);
- // fl_color(color2());
- // fl_rectf(xx,yy,ww,hh);
-
- // Andy Preston changed
- // if (digit == -1) return;
- 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)
- {
- // Andy Preston
- 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;
- }
-
- // Andy Preston changed (naughty, naughty, who missed out the dp drawing code then?)
- // fl_line_style(FL_SOLID,1);
- // if (decpt) { }
- // to
- 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();
- }
-
-
- // Andy Preston
- 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);
- }
-
- // Andy Preston
- 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);
- }
|