|  | // 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);
}
 |