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.

163 lines
2.9KB

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