You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
4.8KB

  1. // generated by Fast Light User Interface Designer (fluid) version 1.0010
  2. #include "Fl_SevenSeg.H"
  3. Fl_SevenSeg::Fl_SevenSeg(int x, int y, int w, int h) :
  4. Fl_Widget (x, y, w, h),
  5. decpt (off) {
  6. color2(FL_BLACK);
  7. color(FL_RED);
  8. digit = 8;
  9. segwidth = (w-8)/13;
  10. segwidth = segwidth<(h-8)/13 ?(h-8)/13: segwidth;
  11. if (segwidth<1) segwidth =1;
  12. }
  13. Fl_SevenSeg::~Fl_SevenSeg(void) {
  14. }
  15. void Fl_SevenSeg::value (int v) {
  16. if (v>9) digit = 9;
  17. else digit = v;
  18. if (active()) redraw();
  19. }
  20. void Fl_SevenSeg::value(char c) {
  21. int v = c - '0';
  22. value(v);
  23. }
  24. const int Fl_SevenSeg::value(void) {
  25. return digit;
  26. }
  27. void Fl_SevenSeg::dp (dp_type state) {
  28. decpt = state;
  29. }
  30. const dp_type Fl_SevenSeg::dp(void) {
  31. return decpt;
  32. }
  33. const int Fl_SevenSeg::bar_width(void) {
  34. return segwidth;
  35. }
  36. void Fl_SevenSeg::bar_width(int w) {
  37. segwidth = w > 2 ? w:2;
  38. if (active()) redraw();
  39. }
  40. // PRIVATE METHODS
  41. void Fl_SevenSeg::draw() {
  42. uchar r,g,b;
  43. int val;
  44. draw_box();
  45. fl_color (color2());
  46. fl_rectf (x(), y(), w(), h());
  47. int xx = x()+2;
  48. int ww = w()-4;
  49. int yy = y()+2;
  50. int hh = h()-4;
  51. if (digit < -1) return;
  52. Fl::get_color(color(),r,g,b);
  53. if (!active())
  54. {
  55. val = 64+(int)r/4; r = val > 255 ? 255:val;
  56. val = 64+(int)g/4; g = val > 255 ? 255:val;
  57. val = 64+(int)b/4; b = val > 255 ? 255:val;
  58. }
  59. fl_color(r,g,b);
  60. fl_line_style(FL_SOLID|FL_CAP_ROUND,segwidth);
  61. switch(digit)
  62. {
  63. case -1:
  64. draw_seg_g (xx, yy, ww, hh);
  65. break;
  66. case 0:
  67. draw_seg_a(xx,yy,ww,hh);
  68. draw_seg_b(xx,yy,ww,hh);
  69. draw_seg_c(xx,yy,ww,hh);
  70. draw_seg_d(xx,yy,ww,hh);
  71. draw_seg_e(xx,yy,ww,hh);
  72. draw_seg_f(xx,yy,ww,hh);
  73. break;
  74. case 1:
  75. draw_seg_b(xx,yy,ww,hh);
  76. draw_seg_c(xx,yy,ww,hh);
  77. break;
  78. case 2:
  79. draw_seg_a(xx,yy,ww,hh);
  80. draw_seg_b(xx,yy,ww,hh);
  81. draw_seg_g(xx,yy,ww,hh);
  82. draw_seg_e(xx,yy,ww,hh);
  83. draw_seg_d(xx,yy,ww,hh);
  84. break;
  85. case 3:
  86. draw_seg_a(xx,yy,ww,hh);
  87. draw_seg_b(xx,yy,ww,hh);
  88. draw_seg_c(xx,yy,ww,hh);
  89. draw_seg_d(xx,yy,ww,hh);
  90. draw_seg_g(xx,yy,ww,hh);
  91. break;
  92. case 4:
  93. draw_seg_b(xx,yy,ww,hh);
  94. draw_seg_c(xx,yy,ww,hh);
  95. draw_seg_f(xx,yy,ww,hh);
  96. draw_seg_g(xx,yy,ww,hh);
  97. break;
  98. case 5:
  99. draw_seg_a(xx,yy,ww,hh);
  100. draw_seg_c(xx,yy,ww,hh);
  101. draw_seg_d(xx,yy,ww,hh);
  102. draw_seg_f(xx,yy,ww,hh);
  103. draw_seg_g(xx,yy,ww,hh);
  104. break;
  105. case 6:
  106. draw_seg_a(xx,yy,ww,hh);
  107. draw_seg_c(xx,yy,ww,hh);
  108. draw_seg_d(xx,yy,ww,hh);
  109. draw_seg_e(xx,yy,ww,hh);
  110. draw_seg_f(xx,yy,ww,hh);
  111. draw_seg_g(xx,yy,ww,hh);
  112. break;
  113. case 7:
  114. draw_seg_a(xx,yy,ww,hh);
  115. draw_seg_b(xx,yy,ww,hh);
  116. draw_seg_c(xx,yy,ww,hh);
  117. break;
  118. case 8:
  119. draw_seg_a(xx,yy,ww,hh);
  120. draw_seg_b(xx,yy,ww,hh);
  121. draw_seg_c(xx,yy,ww,hh);
  122. draw_seg_d(xx,yy,ww,hh);
  123. draw_seg_e(xx,yy,ww,hh);
  124. draw_seg_f(xx,yy,ww,hh);
  125. draw_seg_g(xx,yy,ww,hh);
  126. break;
  127. case 9:
  128. draw_seg_a(xx,yy,ww,hh);
  129. draw_seg_b(xx,yy,ww,hh);
  130. draw_seg_c(xx,yy,ww,hh);
  131. draw_seg_d(xx,yy,ww,hh);
  132. draw_seg_g(xx,yy,ww,hh);
  133. draw_seg_f(xx,yy,ww,hh);
  134. break;
  135. }
  136. if (decpt==point) draw_seg_dp (xx, yy, ww, hh);
  137. else if (decpt==colon) draw_seg_col (xx, yy, ww, hh);
  138. fl_line_style(FL_SOLID,1);
  139. //fl_pop_clip();
  140. }
  141. void Fl_SevenSeg::draw_seg_dp (int xx, int yy, int ww, int hh) {
  142. int x1 = xx - segwidth / 2;
  143. int y1 = yy + hh - segwidth;
  144. int x2 = x1 + segwidth / 3;
  145. fl_line (x1, y1, x2, y1);
  146. }
  147. void Fl_SevenSeg::draw_seg_col (int xx, int yy, int ww, int hh) {
  148. int x1 = xx - segwidth/2;
  149. int x2 = x1 + segwidth/3;
  150. int y1 = yy + 1 + hh/4;
  151. int y2 = yy - 1 + (hh/4) * 3;
  152. fl_line (x1, y1, x2, y1);
  153. fl_line (x1, y2, x2, y2);
  154. }
  155. void Fl_SevenSeg::draw_seg_a(int xx,int yy,int ww,int hh) {
  156. int x1 = xx+2*segwidth+1;
  157. int y1 = yy+segwidth;
  158. int x2 = xx+ww-2*segwidth-1;
  159. fl_line(x1,y1,x2,y1);
  160. }
  161. void Fl_SevenSeg::draw_seg_b(int xx,int yy,int ww,int hh) {
  162. int x1 = xx+ww-segwidth;
  163. int y1 = yy+(3*segwidth)/2+1;
  164. int y2 = y1+hh/2-2*segwidth-1;
  165. fl_line(x1,y1,x1,y2);
  166. }
  167. void Fl_SevenSeg::draw_seg_c(int xx,int yy,int ww,int hh) {
  168. int x1 = xx+ww-segwidth;
  169. int y1 = yy+(hh+segwidth)/2+1;
  170. int y2 = y1+hh/2-2*segwidth-1;
  171. fl_line(x1,y1,x1,y2);
  172. }
  173. void Fl_SevenSeg::draw_seg_d(int xx,int yy,int ww,int hh) {
  174. int x1 = xx+2*segwidth+1;
  175. int y1 = yy+hh-segwidth;
  176. int x2 = xx+ww-2*segwidth-1;
  177. fl_line(x1,y1,x2,y1);
  178. }
  179. void Fl_SevenSeg::draw_seg_e(int xx,int yy,int ww,int hh) {
  180. int x1 = xx+segwidth;
  181. int y1 = yy+(hh+segwidth)/2+1;
  182. int y2 = y1+hh/2-2*segwidth-1;
  183. fl_line(x1,y1,x1,y2);
  184. }
  185. void Fl_SevenSeg::draw_seg_f(int xx,int yy,int ww,int hh) {
  186. int x1 = xx+segwidth;
  187. int y1 = yy+(3*segwidth)/2+1;
  188. int y2 = y1+hh/2-2*segwidth-1;
  189. fl_line(x1,y1,x1,y2);
  190. }
  191. void Fl_SevenSeg::draw_seg_g(int xx,int yy,int ww,int hh) {
  192. int x1 = xx+2*segwidth+1;
  193. int y1 = yy+(hh-segwidth/2)/2;
  194. int x2 = xx+ww-2*segwidth-1;
  195. fl_line(x1,y1,x2,y1);
  196. }