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.

212 lines
4.2KB

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