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.

196 lines
3.6KB

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