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.

167 lines
3.0KB

  1. // generated by Fast Light User Interface Designer (fluid) version 1.0010
  2. #include "Fl_DragBar.H"
  3. #include <string.h>
  4. Fl_DragBar::Fl_DragBar(int x,int y,int w,int h,const char *l): Fl_Widget(x,y,w,h,l) {
  5. _type = Fl_DragBar::NICEFLDRAG;
  6. }
  7. Fl_DragBar::~Fl_DragBar() {
  8. fl_cursor(FL_CURSOR_DEFAULT);
  9. }
  10. void Fl_DragBar::draw() {
  11. int ww,hh;
  12. uchar r,g,b;
  13. uchar rb,gb,bb;
  14. uchar rd,gd,bd;
  15. int val;
  16. draw_box();
  17. int x1 = x()+5;
  18. int x2 = x()+w()-5;
  19. int y1 = y()+5;
  20. int y2 = y()+h()-5;
  21. Fl::get_color(color(),r,g,b);
  22. val = (int)r + 64; rb = val > 255 ? 255:val;
  23. val = (int)g + 64; gb = val > 255 ? 255:val;
  24. val = (int)b + 64; bb = val > 255 ? 255:val;
  25. val = (int)r - 64; rd = val < 0 ? 0:val;
  26. val = (int)g - 64; gd = val < 0 ? 0:val;
  27. val = (int)b - 64; bd = val < 0 ? 0:val;
  28. if (h()<w())
  29. {
  30. if ((_type==Fl_DragBar::NICEWINDRAG) || (_type==Fl_DragBar::NICEFLDRAG))
  31. {
  32. fl_line_style(FL_DASH);
  33. for (int i = y() + 4; i < y()+h()-5;i+=3)
  34. {
  35. fl_line_style(FL_DASH);
  36. fl_color(rb,gb,bb);
  37. fl_line(x1,i,x2,i);
  38. fl_color(rd,gd,bd);
  39. fl_line(x1,i+1,x2,i+1);
  40. }
  41. fl_line_style(FL_SOLID);
  42. }
  43. fl_color(color());
  44. const char *l = label();
  45. ww = labelsize()*strlen(l)/2;
  46. //ww = (int)fl_width(l);
  47. hh = h() - 4;
  48. if (align() & FL_ALIGN_RIGHT)
  49. {
  50. x1 = x() + w() - 5 - ww;
  51. }
  52. else
  53. if (align() & FL_ALIGN_CENTER)
  54. {
  55. x1 = x() + 5;
  56. }
  57. else
  58. {
  59. x1 = x() + (w() - ww) / 2;
  60. }
  61. //fl_rectf(x1,y()+(h() - hh) / 2, ww, hh);
  62. draw_label();
  63. }
  64. else
  65. if ((_type==Fl_DragBar::NICEWINDRAG) || (_type==Fl_DragBar::NICEFLDRAG))
  66. {
  67. fl_line_style(FL_DASH);
  68. for (int i = x() + 4; i < x()+w()-5;i+=3)
  69. {
  70. fl_color(rb,gb,bb);
  71. fl_line(i,y1,i,y2);
  72. fl_color(rd,gd,bd);
  73. fl_line(i+1,y1,i+1,y2);
  74. }
  75. fl_line_style(FL_SOLID);
  76. }
  77. }
  78. int Fl_DragBar::handle(int event) {
  79. int rx,ry,xx,yy;
  80. int mx,my;
  81. if (Fl::event_button()!=1) return 0;
  82. if (_type < (int)Fl_DragBar::FLDRAG)
  83. {
  84. rx = Fl::event_x_root();
  85. ry = Fl::event_y_root();
  86. }
  87. else
  88. {
  89. rx = Fl::event_x();
  90. ry = Fl::event_y();
  91. }
  92. switch(event)
  93. {
  94. case FL_PUSH:
  95. {
  96. window()->show();
  97. fl_cursor(FL_CURSOR_MOVE);
  98. if (_type < (int)Fl_DragBar::FLDRAG)
  99. {
  100. old_rx = rx - window()->x();
  101. old_ry = ry - window()->y();
  102. }
  103. else
  104. {
  105. old_rx = rx - parent()->x();
  106. old_ry = ry - parent()->y();
  107. }
  108. return 1;
  109. }
  110. case FL_RELEASE:
  111. {
  112. fl_cursor(FL_CURSOR_DEFAULT);
  113. do_callback();
  114. return 1;
  115. }
  116. case FL_DRAG:
  117. {
  118. if ((rx != old_rx) || (ry != old_ry))
  119. {
  120. xx = rx - old_rx;
  121. yy = ry - old_ry;
  122. if (_type < (int)Fl_DragBar::FLDRAG)
  123. {
  124. window()->position(xx,yy);
  125. }
  126. else
  127. {
  128. parent()->position(xx,yy);
  129. if (parent()->parent())
  130. parent()->parent()->redraw();
  131. else
  132. window()->redraw();
  133. }
  134. }
  135. return 1;
  136. }
  137. case FL_MOVE:
  138. {
  139. return 0;
  140. }
  141. case FL_ENTER :
  142. {
  143. return 0;
  144. }
  145. case FL_LEAVE :
  146. {
  147. fl_cursor(FL_CURSOR_DEFAULT);
  148. return 1;
  149. }
  150. default :
  151. return 0;
  152. }
  153. }
  154. void Fl_DragBar::type(int t) {
  155. _type = t;
  156. }