wrb 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (271) hide show
  1. checksums.yaml +7 -0
  2. data/README +28 -0
  3. data/Rakefile +66 -0
  4. data/bin/wrb +41 -0
  5. data/bin/wrb.bat +6 -0
  6. data/ext/rwin/aatree.c +192 -0
  7. data/ext/rwin/aatree.h +55 -0
  8. data/ext/rwin/extconf.rb +47 -0
  9. data/ext/rwin/rw_api.c +2058 -0
  10. data/ext/rwin/rw_devices.c +215 -0
  11. data/ext/rwin/rw_gdiplus.h +278 -0
  12. data/ext/rwin/rw_graphics.c +1583 -0
  13. data/ext/rwin/rw_resources.c +1988 -0
  14. data/ext/rwin/rw_ubfuncs.c +281 -0
  15. data/ext/rwin/rw_windows.c +1936 -0
  16. data/ext/rwin/rwin.c +451 -0
  17. data/ext/rwin/rwin.h +442 -0
  18. data/lib/rwin.rb +820 -0
  19. data/lib/wrb.rb +20 -0
  20. data/lib/wrb/applications/frmdesigner/angle.cur +0 -0
  21. data/lib/wrb/applications/frmdesigner/angle2.cur +0 -0
  22. data/lib/wrb/applications/frmdesigner/controls/Button.bmp +0 -0
  23. data/lib/wrb/applications/frmdesigner/controls/Button.rb +34 -0
  24. data/lib/wrb/applications/frmdesigner/controls/Checkbox.bmp +0 -0
  25. data/lib/wrb/applications/frmdesigner/controls/Checkbox.rb +10 -0
  26. data/lib/wrb/applications/frmdesigner/controls/Combobox.bmp +0 -0
  27. data/lib/wrb/applications/frmdesigner/controls/Combobox.rb +88 -0
  28. data/lib/wrb/applications/frmdesigner/controls/ComboboxEx.rb +97 -0
  29. data/lib/wrb/applications/frmdesigner/controls/Comboboxex.bmp +0 -0
  30. data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.bmp +0 -0
  31. data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.rb +11 -0
  32. data/lib/wrb/applications/frmdesigner/controls/Edit.bmp +0 -0
  33. data/lib/wrb/applications/frmdesigner/controls/Edit.rb +8 -0
  34. data/lib/wrb/applications/frmdesigner/controls/Groupbox.bmp +0 -0
  35. data/lib/wrb/applications/frmdesigner/controls/Groupbox.rb +9 -0
  36. data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.bmp +0 -0
  37. data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.rb +9 -0
  38. data/lib/wrb/applications/frmdesigner/controls/Imagelist.bmp +0 -0
  39. data/lib/wrb/applications/frmdesigner/controls/Imagelist.rb +115 -0
  40. data/lib/wrb/applications/frmdesigner/controls/Listbox.bmp +0 -0
  41. data/lib/wrb/applications/frmdesigner/controls/Listbox.rb +77 -0
  42. data/lib/wrb/applications/frmdesigner/controls/Listview.bmp +0 -0
  43. data/lib/wrb/applications/frmdesigner/controls/Listview.rb +157 -0
  44. data/lib/wrb/applications/frmdesigner/controls/Menu.bmp +0 -0
  45. data/lib/wrb/applications/frmdesigner/controls/Menu.rb +198 -0
  46. data/lib/wrb/applications/frmdesigner/controls/Menubar.bmp +0 -0
  47. data/lib/wrb/applications/frmdesigner/controls/Menubar.rb +9 -0
  48. data/lib/wrb/applications/frmdesigner/controls/MonthCalender.bmp +0 -0
  49. data/lib/wrb/applications/frmdesigner/controls/Monthcalender.rb +9 -0
  50. data/lib/wrb/applications/frmdesigner/controls/Panel.bmp +0 -0
  51. data/lib/wrb/applications/frmdesigner/controls/Panel.rb +30 -0
  52. data/lib/wrb/applications/frmdesigner/controls/Progressbar.rb +10 -0
  53. data/lib/wrb/applications/frmdesigner/controls/Radiobutton.bmp +0 -0
  54. data/lib/wrb/applications/frmdesigner/controls/Radiobutton.rb +13 -0
  55. data/lib/wrb/applications/frmdesigner/controls/Rebar.bmp +0 -0
  56. data/lib/wrb/applications/frmdesigner/controls/Rebar.rb +162 -0
  57. data/lib/wrb/applications/frmdesigner/controls/Splitter.bmp +0 -0
  58. data/lib/wrb/applications/frmdesigner/controls/Splitter.rb +66 -0
  59. data/lib/wrb/applications/frmdesigner/controls/Static.bmp +0 -0
  60. data/lib/wrb/applications/frmdesigner/controls/Static.rb +9 -0
  61. data/lib/wrb/applications/frmdesigner/controls/Statusbar.bmp +0 -0
  62. data/lib/wrb/applications/frmdesigner/controls/Statusbar.rb +103 -0
  63. data/lib/wrb/applications/frmdesigner/controls/Tabctrl.bmp +0 -0
  64. data/lib/wrb/applications/frmdesigner/controls/Tabctrl.rb +136 -0
  65. data/lib/wrb/applications/frmdesigner/controls/Timer.bmp +0 -0
  66. data/lib/wrb/applications/frmdesigner/controls/Timer.rb +36 -0
  67. data/lib/wrb/applications/frmdesigner/controls/Toolbar.bmp +0 -0
  68. data/lib/wrb/applications/frmdesigner/controls/Toolbar.rb +165 -0
  69. data/lib/wrb/applications/frmdesigner/controls/Trackbar.bmp +0 -0
  70. data/lib/wrb/applications/frmdesigner/controls/Trackbar.rb +34 -0
  71. data/lib/wrb/applications/frmdesigner/controls/Treeview.bmp +0 -0
  72. data/lib/wrb/applications/frmdesigner/controls/Treeview.rb +107 -0
  73. data/lib/wrb/applications/frmdesigner/controls/Updown.bmp +0 -0
  74. data/lib/wrb/applications/frmdesigner/controls/Updown.rb +31 -0
  75. data/lib/wrb/applications/frmdesigner/controls/default.bmp +0 -0
  76. data/lib/wrb/applications/frmdesigner/controls/progressbar.bmp +0 -0
  77. data/lib/wrb/applications/frmdesigner/controls/unselect.bmp +0 -0
  78. data/lib/wrb/applications/frmdesigner/fddialogs.rb +87 -0
  79. data/lib/wrb/applications/frmdesigner/fdesign.rb +1315 -0
  80. data/lib/wrb/applications/frmdesigner/fdmodules.rb +1394 -0
  81. data/lib/wrb/applications/frmdesigner/fdparseform.rb +197 -0
  82. data/lib/wrb/applications/frmdesigner/img13.bmp +0 -0
  83. data/lib/wrb/base.rb +1294 -0
  84. data/lib/wrb/combocommon.rb +77 -0
  85. data/lib/wrb/commctrlconst.rb +139 -0
  86. data/lib/wrb/commdlg.rb +77 -0
  87. data/lib/wrb/components/animate.rb +114 -0
  88. data/lib/wrb/components/bitmap.rb +116 -0
  89. data/lib/wrb/components/button.rb +134 -0
  90. data/lib/wrb/components/canvas.rb +266 -0
  91. data/lib/wrb/components/checkbox.rb +118 -0
  92. data/lib/wrb/components/choosecolordlg.rb +87 -0
  93. data/lib/wrb/components/choosefontdlg.rb +142 -0
  94. data/lib/wrb/components/clipboard.rb +174 -0
  95. data/lib/wrb/components/combobox.rb +282 -0
  96. data/lib/wrb/components/comboboxex.rb +574 -0
  97. data/lib/wrb/components/cursor.rb +91 -0
  98. data/lib/wrb/components/datetimepicker.rb +197 -0
  99. data/lib/wrb/components/ddeclient.rb +180 -0
  100. data/lib/wrb/components/ddeserver.rb +131 -0
  101. data/lib/wrb/components/dialog.rb +228 -0
  102. data/lib/wrb/components/edit.rb +412 -0
  103. data/lib/wrb/components/font.rb +35 -0
  104. data/lib/wrb/components/form.rb +65 -0
  105. data/lib/wrb/components/groupbox.rb +122 -0
  106. data/lib/wrb/components/header.rb +479 -0
  107. data/lib/wrb/components/hotkeyctrl.rb +72 -0
  108. data/lib/wrb/components/icon.rb +109 -0
  109. data/lib/wrb/components/imagelist.rb +396 -0
  110. data/lib/wrb/components/inifile.rb +97 -0
  111. data/lib/wrb/components/listbox.rb +149 -0
  112. data/lib/wrb/components/listview.rb +1467 -0
  113. data/lib/wrb/components/menu.rb +592 -0
  114. data/lib/wrb/components/menubar.rb +84 -0
  115. data/lib/wrb/components/monthcalender.rb +164 -0
  116. data/lib/wrb/components/openfilenamedlg.rb +147 -0
  117. data/lib/wrb/components/pager.rb +199 -0
  118. data/lib/wrb/components/panel.rb +103 -0
  119. data/lib/wrb/components/picture.rb +55 -0
  120. data/lib/wrb/components/printdlg.rb +148 -0
  121. data/lib/wrb/components/printdlgex.rb +117 -0
  122. data/lib/wrb/components/printer.rb +97 -0
  123. data/lib/wrb/components/progressbar.rb +140 -0
  124. data/lib/wrb/components/radiobutton.rb +49 -0
  125. data/lib/wrb/components/rebar.rb +830 -0
  126. data/lib/wrb/components/registry.rb +408 -0
  127. data/lib/wrb/components/richedit.rb +1181 -0
  128. data/lib/wrb/components/savefilenamedlg.rb +27 -0
  129. data/lib/wrb/components/scintilla.rb +1298 -0
  130. data/lib/wrb/components/scrollbar.rb +239 -0
  131. data/lib/wrb/components/splitter.rb +494 -0
  132. data/lib/wrb/components/static.rb +198 -0
  133. data/lib/wrb/components/statusbar.rb +490 -0
  134. data/lib/wrb/components/tabctrl.rb +686 -0
  135. data/lib/wrb/components/timer.rb +117 -0
  136. data/lib/wrb/components/toolbar.rb +1107 -0
  137. data/lib/wrb/components/tooltip.rb +651 -0
  138. data/lib/wrb/components/trackbar.rb +298 -0
  139. data/lib/wrb/components/treeview.rb +845 -0
  140. data/lib/wrb/components/updown.rb +198 -0
  141. data/lib/wrb/ddeml.rb +241 -0
  142. data/lib/wrb/documents/animate.html +46 -0
  143. data/lib/wrb/documents/bitmap.html +69 -0
  144. data/lib/wrb/documents/button.html +78 -0
  145. data/lib/wrb/documents/canvas.html +137 -0
  146. data/lib/wrb/documents/checkbox.html +77 -0
  147. data/lib/wrb/documents/choosecolordlg.html +29 -0
  148. data/lib/wrb/documents/choosefontdlg.html +31 -0
  149. data/lib/wrb/documents/clipboard.html +31 -0
  150. data/lib/wrb/documents/combobox.html +117 -0
  151. data/lib/wrb/documents/comboboxex.html +139 -0
  152. data/lib/wrb/documents/control.html +53 -0
  153. data/lib/wrb/documents/cursor.html +45 -0
  154. data/lib/wrb/documents/datetimepicker.html +70 -0
  155. data/lib/wrb/documents/ddeclient.html +33 -0
  156. data/lib/wrb/documents/ddeserver.html +26 -0
  157. data/lib/wrb/documents/dialog.html +78 -0
  158. data/lib/wrb/documents/edit.html +169 -0
  159. data/lib/wrb/documents/empty.html +11 -0
  160. data/lib/wrb/documents/favicon.png +0 -0
  161. data/lib/wrb/documents/font.html +38 -0
  162. data/lib/wrb/documents/form.html +63 -0
  163. data/lib/wrb/documents/groupbox.html +57 -0
  164. data/lib/wrb/documents/header.html +85 -0
  165. data/lib/wrb/documents/hotkeyctrl.html +42 -0
  166. data/lib/wrb/documents/icon.html +45 -0
  167. data/lib/wrb/documents/imagelist.html +101 -0
  168. data/lib/wrb/documents/images/button.png +0 -0
  169. data/lib/wrb/documents/images/checkbox.png +0 -0
  170. data/lib/wrb/documents/images/combobox.png +0 -0
  171. data/lib/wrb/documents/images/comboboxex.png +0 -0
  172. data/lib/wrb/documents/images/datetimepicker.png +0 -0
  173. data/lib/wrb/documents/images/edit.png +0 -0
  174. data/lib/wrb/documents/images/groupbox.png +0 -0
  175. data/lib/wrb/documents/images/hotkeyctrl.png +0 -0
  176. data/lib/wrb/documents/images/listbox.png +0 -0
  177. data/lib/wrb/documents/images/listview.png +0 -0
  178. data/lib/wrb/documents/images/menu.png +0 -0
  179. data/lib/wrb/documents/images/menubar.png +0 -0
  180. data/lib/wrb/documents/images/monthcalender.png +0 -0
  181. data/lib/wrb/documents/images/progressbar.png +0 -0
  182. data/lib/wrb/documents/images/radiobutton.png +0 -0
  183. data/lib/wrb/documents/images/rebar.png +0 -0
  184. data/lib/wrb/documents/images/richedit.png +0 -0
  185. data/lib/wrb/documents/images/splitter.png +0 -0
  186. data/lib/wrb/documents/images/static.png +0 -0
  187. data/lib/wrb/documents/images/statusbar.png +0 -0
  188. data/lib/wrb/documents/images/tabctrl.png +0 -0
  189. data/lib/wrb/documents/images/toolbar.png +0 -0
  190. data/lib/wrb/documents/images/tooltip.png +0 -0
  191. data/lib/wrb/documents/images/trackbar.png +0 -0
  192. data/lib/wrb/documents/images/treeview.png +0 -0
  193. data/lib/wrb/documents/images/updown.png +0 -0
  194. data/lib/wrb/documents/index.html +155 -0
  195. data/lib/wrb/documents/inifile.html +36 -0
  196. data/lib/wrb/documents/license.txt +22 -0
  197. data/lib/wrb/documents/listbox.html +96 -0
  198. data/lib/wrb/documents/listview.html +277 -0
  199. data/lib/wrb/documents/make_doc.rb +596 -0
  200. data/lib/wrb/documents/menu.html +144 -0
  201. data/lib/wrb/documents/menubar.html +54 -0
  202. data/lib/wrb/documents/monthcalender.html +48 -0
  203. data/lib/wrb/documents/openfilenamedlg.html +36 -0
  204. data/lib/wrb/documents/pager.html +63 -0
  205. data/lib/wrb/documents/panel.html +32 -0
  206. data/lib/wrb/documents/picture.html +48 -0
  207. data/lib/wrb/documents/printdlg.html +35 -0
  208. data/lib/wrb/documents/printdlgex.html +35 -0
  209. data/lib/wrb/documents/printer.html +40 -0
  210. data/lib/wrb/documents/progressbar.html +69 -0
  211. data/lib/wrb/documents/radiobutton.html +51 -0
  212. data/lib/wrb/documents/rebar.html +143 -0
  213. data/lib/wrb/documents/registry.html +36 -0
  214. data/lib/wrb/documents/richedit.html +232 -0
  215. data/lib/wrb/documents/samples/editimg.bmp +0 -0
  216. data/lib/wrb/documents/samples/editimg.iml +0 -0
  217. data/lib/wrb/documents/samples/fileimg.bmp +0 -0
  218. data/lib/wrb/documents/samples/fileimg.iml +0 -0
  219. data/lib/wrb/documents/samples/sample_button.rb +21 -0
  220. data/lib/wrb/documents/samples/sample_checkbox.rb +18 -0
  221. data/lib/wrb/documents/samples/sample_combobox.rb +18 -0
  222. data/lib/wrb/documents/samples/sample_comboboxex.rb +23 -0
  223. data/lib/wrb/documents/samples/sample_datetimepicker.rb +11 -0
  224. data/lib/wrb/documents/samples/sample_edit.rb +25 -0
  225. data/lib/wrb/documents/samples/sample_groupbox.rb +19 -0
  226. data/lib/wrb/documents/samples/sample_hotkeyctrl.rb +12 -0
  227. data/lib/wrb/documents/samples/sample_listbox.rb +12 -0
  228. data/lib/wrb/documents/samples/sample_listview.rb +32 -0
  229. data/lib/wrb/documents/samples/sample_menu.rb +21 -0
  230. data/lib/wrb/documents/samples/sample_menubar.rb +23 -0
  231. data/lib/wrb/documents/samples/sample_monthcalender.rb +11 -0
  232. data/lib/wrb/documents/samples/sample_progressbar.rb +14 -0
  233. data/lib/wrb/documents/samples/sample_radiobutton.rb +14 -0
  234. data/lib/wrb/documents/samples/sample_rebar.rb +25 -0
  235. data/lib/wrb/documents/samples/sample_richedit.rb +60 -0
  236. data/lib/wrb/documents/samples/sample_splitter.rb +33 -0
  237. data/lib/wrb/documents/samples/sample_static.rb +15 -0
  238. data/lib/wrb/documents/samples/sample_statusbar.rb +17 -0
  239. data/lib/wrb/documents/samples/sample_tabctrl.rb +19 -0
  240. data/lib/wrb/documents/samples/sample_toolbar.rb +29 -0
  241. data/lib/wrb/documents/samples/sample_tooltip.rb +50 -0
  242. data/lib/wrb/documents/samples/sample_trackbar.rb +30 -0
  243. data/lib/wrb/documents/samples/sample_treeview.rb +19 -0
  244. data/lib/wrb/documents/samples/sample_updown.rb +18 -0
  245. data/lib/wrb/documents/samples/sampleimg16.iml +0 -0
  246. data/lib/wrb/documents/samples/sampleimg32.iml +0 -0
  247. data/lib/wrb/documents/samples/samplemg16.png +0 -0
  248. data/lib/wrb/documents/samples/samplemg32.png +0 -0
  249. data/lib/wrb/documents/samples/wrb.ico +0 -0
  250. data/lib/wrb/documents/savefilenamedlg.html +19 -0
  251. data/lib/wrb/documents/scrollbar.html +60 -0
  252. data/lib/wrb/documents/splitter.html +96 -0
  253. data/lib/wrb/documents/static.html +84 -0
  254. data/lib/wrb/documents/statusbar.html +110 -0
  255. data/lib/wrb/documents/tabctrl.html +151 -0
  256. data/lib/wrb/documents/timer.html +43 -0
  257. data/lib/wrb/documents/toolbar.html +181 -0
  258. data/lib/wrb/documents/tooltip.html +131 -0
  259. data/lib/wrb/documents/trackbar.html +107 -0
  260. data/lib/wrb/documents/treeview.html +210 -0
  261. data/lib/wrb/documents/updown.html +85 -0
  262. data/lib/wrb/documents/wincontrol.html +258 -0
  263. data/lib/wrb/documents/window.html +499 -0
  264. data/lib/wrb/documents/wrb.css +228 -0
  265. data/lib/wrb/gmem.rb +26 -0
  266. data/lib/wrb/imecommon.rb +59 -0
  267. data/lib/wrb/listcommon.rb +185 -0
  268. data/lib/wrb/lzss.rb +126 -0
  269. data/lib/wrb/scrollinfo.rb +142 -0
  270. data/lib/wrb/toplevelcommon.rb +634 -0
  271. metadata +315 -0
@@ -0,0 +1,239 @@
1
+ require 'wrb'
2
+ require 'wrb/scrollinfo'
3
+
4
+ module WR
5
+ module RC
6
+ SBS_HORZ = 0x0000
7
+ SBS_VERT = 0x0001
8
+ SBS_TOPALIGN = 0x0002
9
+ SBS_LEFTALIGN = 0x0002
10
+ SBS_BOTTOMALIGN = 0x0004
11
+ SBS_RIGHTALIGN = 0x0004
12
+ SBS_SIZEBOX = 0x0008
13
+ SBS_SIZEGRIP = 0x0010
14
+
15
+ SBS_SIZEBOXTOPLEFTALIGN = 0x0002
16
+ SBS_SIZEBOXBOTTOMRIGHTALIGN = 0x0004
17
+
18
+ CCHILDREN_SCROLLBAR = 5
19
+
20
+ SW_SCROLLCHILDREN = 0x0001
21
+ SW_INVALIDATE = 0x0002
22
+ SW_ERASE = 0x0004
23
+ SW_SMOOTHSCROLL = 0x0010
24
+
25
+ ESB_ENABLE_BOTH = 0x0000
26
+ ESB_DISABLE_BOTH = 0x0003
27
+ ESB_DISABLE_LEFT = 0x0001
28
+ ESB_DISABLE_RIGHT = 0x0002
29
+ ESB_DISABLE_UP = 0x0001
30
+ ESB_DISABLE_DOWN = 0x0002
31
+ ESB_DISABLE_LTUP = ESB_DISABLE_LEFT
32
+ ESB_DISABLE_RTDN = ESB_DISABLE_RIGHT
33
+ end
34
+
35
+ # This control allows the user to bring into view the portions of an object that extend beyond the borders of a window.
36
+ # <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
37
+ # window-controls"> Windows Control section of Microsoft Docs.</a>
38
+ class Scrollbar < WinControl
39
+ SCROLLBARINFO = API.defstruct "
40
+ DWORD cbSize;
41
+ RECT rcScrollBar;
42
+ int dxyLineButton;
43
+ int xyThumbTop;
44
+ int xyThumbBottom;
45
+ int reserved;
46
+ DWORD rgstate[#{CCHILDREN_SCROLLBAR+1}]"
47
+
48
+ SCROLLINFO = API.defstruct "
49
+ UINT cbSize;
50
+ UINT fMask;
51
+ int nMin;
52
+ int nMax;
53
+ UINT nPage;
54
+ int nPos;
55
+ int nTrackPos;"
56
+
57
+ API.defun "EnableScrollBar(HWND hWnd, UINT wSBflags, UINT wArrows)"
58
+ API.defun "GetScrollBarInfo(HWND hWnd, GetScrollInfo LONG idObject, PSCROLLBARINFO psbi)"
59
+ API.defun "GetScrollInfo(HWND hWnd, int fnBar, LPSCROLLINFO lpsi)"
60
+ API.defun "SetScrollInfo(HWND hwnd,int nBar,LPCSCROLLINFO lpsi,WINBOOL redraw)"
61
+ API.defun "ScrollDC(HDC hDC, int dx, int dy, RECT *lprcScroll, RECT *lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate)"
62
+ API.defun "ScrollWindowEx(HWND hWnd, int dx, int dy, RECT *prcScroll, RECT *prcClip, HRGN hrgnUpdate, LPRECT prcUpdate, UINT flags)"
63
+
64
+ WinStyles = {
65
+ :horz => SBS_HORZ,
66
+ :vert => SBS_VERT,
67
+ :topalign => SBS_TOPALIGN,
68
+ :leftalign => SBS_LEFTALIGN,
69
+ :bottomalign => SBS_BOTTOMALIGN,
70
+ :rightalign => SBS_RIGHTALIGN,
71
+ :sizebox => SBS_SIZEBOX,
72
+ :sizegrip => SBS_SIZEGRIP,
73
+ :sizeboxtopleftalign => SBS_SIZEBOXTOPLEFTALIGN,
74
+ :sizeboxbottomrightalign => SBS_SIZEBOXBOTTOMRIGHTALIGN
75
+ }
76
+
77
+ PreDefinedEvents = {
78
+ :vscroll => [WM_VSCROLL, 'h'],
79
+ :hscroll => [WM_HSCROLL, 'h']
80
+ }
81
+ DefaultEvents = [:vscroll, :hscroll]
82
+
83
+ def initialize(*args)
84
+ super
85
+ @_classname = 'SCROLLBAR'
86
+ @_acceptable_events = PreDefinedEvents.dup
87
+ end
88
+ #
89
+ def create()
90
+ super
91
+ self.range= @_range if @_range
92
+ self.pos = @_pos if @_pos
93
+ self.page = @_page if @_page
94
+ self.trackpos = @_trackpos if @_trackpos
95
+ end
96
+
97
+ # Enables or disables one or both scroll bar arrows.
98
+ def enable(flag, arrows)
99
+ API.EnableScrollBar(self._hwnd, flag.to_i, arrows)
100
+ end
101
+
102
+ # Gets the range of this scroll bar.
103
+ def range()
104
+ if alive?
105
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_RANGE]
106
+ API.GetScrollInfo(self._hwnd, SB_CTL, lpsi)
107
+ [lpsi.nMin, lpsi.nMax]
108
+ else
109
+ @_range
110
+ end
111
+ end
112
+ # Sets the range of this scroll bar.
113
+ def range=(*args)
114
+ min, max = args[0].is_a?(Array) ? args[0] : [0, args[0]]
115
+ if alive?
116
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_RANGE, min, max]
117
+ API.SetScrollInfo(self._hwnd, SB_CTL, lpsi, 1)
118
+ else
119
+ @_range = [min, max]
120
+ end
121
+ end
122
+
123
+ # Retrieves the position of the scroll box (thumb) in this scroll bar.
124
+ def pos()
125
+ if alive?
126
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS]
127
+ API.GetScrollInfo(self._hwnd, SB_CTL, lpsi)
128
+ lpsi.nPos
129
+ else
130
+ @_pos
131
+ end
132
+ end
133
+ # Sets the position of the scroll box (thumb) in this scroll bar .
134
+ def pos=(ps)
135
+ if alive?
136
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS, nil, nil, nil, ps]
137
+ API.SetScrollInfo(self._hwnd, SB_CTL, lpsi, 1)
138
+ else
139
+ @_pos = ps
140
+ end
141
+ end
142
+
143
+ # Retreives a page-size of this scrollbar for determine the size of scroll box.
144
+ def pagesize()
145
+ if alive?
146
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_PAGE]
147
+ API.GetScrollInfo(self._hwnd, SB_CTL, lpsi)
148
+ lpsi.nPage
149
+ else
150
+ @_page
151
+ end
152
+ end
153
+ # Sets a page-size of this scrollbar for determine the size of scroll box.
154
+ def pagesize=(pg)
155
+ if alive?
156
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_PAGE, nil, nil, pg]
157
+ API.SetScrollInfo(self._hwnd, SB_CTL, lpsi, 1)
158
+ else
159
+ @_page = pg
160
+ end
161
+ end
162
+ # Retreives the immediate position of a scroll box that the user is dragging.
163
+ def trackpos()
164
+ if alive?
165
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_TRACKPOS]
166
+ API.GetScrollInfo(self._hwnd, SB_CTL, lpsi)
167
+ lpsi.nTrackPos
168
+ else
169
+ @_trackpos
170
+ end
171
+ end
172
+ # Specifies the immediate position of a scroll box that the user is dragging.
173
+ def trackpos=(tps)
174
+ if alive?
175
+ lpsi = SCROLLINFO[SCROLLINFO::Size, SIF_POS, nil, nil, nil, nil, tps]
176
+ API.SetScrollInfo(self._hwnd, SB_CTL, lpsi, 1)
177
+ else
178
+ @_trackpos = tps
179
+ end
180
+ end
181
+
182
+ protected
183
+ def _apply_options(arg)
184
+ if st=WinStyles[arg]
185
+ @_style |= st
186
+ return nil
187
+ end
188
+ super
189
+ end
190
+ end
191
+ end
192
+
193
+ module WR
194
+ class Form1 <Form
195
+ def initialize
196
+ resize 640, 480
197
+ @sb1 = controls << Scrollbar[:sb1, '', 0, 0,20,20, :vert, :range=>100, :pos=>50, :margin=>[nil, 0, 0, 20]]
198
+ @sb2 = controls << Scrollbar[:sb2, '', 0, 0,20,20, :range=>100, :pos=>50, :margin=>[0,nil, 20, 0]]
199
+
200
+ # @sb1.accept_events(:vscroll)
201
+
202
+ register_event(WM_VSCROLL, 'vscroll', 'h', self)
203
+ # register_event(WM_HSCROLL, 'hscroll', 'h', @sb2)
204
+
205
+ # events << [@sb2, :hscroll, 'hscroll2', 'h', @sb2]
206
+
207
+ def @sb1.vscroll(sval, thumbpos); dpp sval
208
+ end
209
+
210
+ def @sb2.hscroll(sval, thumbpos)
211
+ dpp sval
212
+ end
213
+ end
214
+
215
+
216
+ def vscroll(sval, thumbpos); dpp sval
217
+ case sval
218
+ when SB_LINEUP
219
+ @sb1.pos -= 1
220
+ when SB_LINEDOWN
221
+ @sb1.pos += 1
222
+ when SB_PAGEUP
223
+ @sb1.pos -= 10
224
+ when SB_PAGEDOWN
225
+ @sb1.pos += 10
226
+ when SB_THUMBPOSITION
227
+ @sb1.pos = thumbpos
228
+ when SB_THUMBTRACK
229
+ #dpp thumbpos
230
+ when SB_ENDSCROLL
231
+ #dpp sval, thumbpos
232
+ when SB_TOP
233
+ when SB_BOTTOM
234
+ end
235
+ end
236
+
237
+ self.start
238
+ end
239
+ end if __FILE__ == $0
@@ -0,0 +1,494 @@
1
+ # Splitter
2
+ # This imprementateion is original by Baonjo Koyu.
3
+
4
+ module WR
5
+ require_relative './canvas' unless defined?(Canvas) # color constants are defined in.
6
+
7
+ # A window to split a parent window into two panes such as right-left or upper-lower. (WRB original)
8
+ class Splitter < WinControl
9
+ class Pane < Array
10
+ def initialize(onr)
11
+ @owner = onr
12
+ end
13
+
14
+ def <<(arg)
15
+ if arg.is_a?(Splitter)
16
+ raise "Already other control exixts in this pane." if self.size>0
17
+ arg.mother = @owner
18
+ end
19
+ if @owner.parent && !@owner.parent.controls.index(arg)
20
+ if @owner.respond_to?(:owner)
21
+ super(@owner.owner << arg)
22
+ else
23
+ super(@owner.parent.controls << arg)
24
+ end
25
+ else
26
+ super
27
+ end
28
+ class << arg
29
+ attr_reader :__ownedbysplitter
30
+ end
31
+ self.uniq!
32
+ @owner.__send__(:_resize_panes) if @owner.alive? #; dpp @owner.name, arg.name, arg.x
33
+ arg
34
+ end
35
+
36
+ def delete(arg)
37
+ if arg.is_a?(Splitter)
38
+ arg.delete
39
+ else
40
+ arg.margin = nil
41
+ end
42
+ class << arg
43
+ undef :__ownedbysplitter
44
+ end
45
+ super
46
+ end
47
+
48
+ def clear()
49
+ self.each{|i| i.margin=nil}
50
+ super
51
+ end
52
+ end
53
+
54
+ Faces = {
55
+ :none => nil,
56
+ :line =>[
57
+ Bitmap.new(1, 128, API.getSysColor(COLOR_BTNSHADOW)),
58
+ Bitmap.new(128, 1, API.getSysColor(COLOR_BTNSHADOW))],
59
+ :dot=> [
60
+ Bitmap.new(2, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
61
+ 16.times{|i| c = i*8
62
+ cv.SetBrush API.getSysColor(COLOR_BTNSHADOW)
63
+ cv.PatBlt(0, c+4, 2, 2)}},
64
+ Bitmap.new(128, 2, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
65
+ 16.times{|i| c = i*8
66
+ cv.SetBrush API.getSysColor(COLOR_BTNSHADOW)
67
+ cv.PatBlt(c+4, 0, 2, 2)}}
68
+ ],
69
+ :bump2 => [
70
+ Bitmap.new(2, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
71
+ 16.times{|i| c = i*8
72
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
73
+ cv.MoveTo(0, c+5)
74
+ cv.LineTo(1, c+5)
75
+ cv.LineTo(1, c+3)}},
76
+ Bitmap.new(128, 2, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
77
+ 16.times{|i| c = i*8
78
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
79
+ cv.MoveTo(c+5, 0)
80
+ cv.LineTo(c+5, 1)
81
+ cv.LineTo(c+3, 1)}}
82
+ ],
83
+ :bump3 => [
84
+ Bitmap.new(3, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
85
+ 16.times{|i| c = i*8
86
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
87
+ cv.MoveTo(0, c+6)
88
+ cv.LineTo(2, c+6)
89
+ cv.LineTo(2, c+3)}},
90
+ Bitmap.new(128, 3, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
91
+ 16.times{|i| c = i*8
92
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
93
+ cv.MoveTo(c+6, 0)
94
+ cv.LineTo(c+6, 2)
95
+ cv.LineTo(c+3, 2)}}
96
+ ],
97
+ :bump4 => [
98
+ Bitmap.new(4, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
99
+ 16.times{|i| c = i*8
100
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
101
+ cv.MoveTo(0, c+7)
102
+ cv.LineTo(3, c+7)
103
+ cv.LineTo(3, c+3)}},
104
+ Bitmap.new(128, 4, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
105
+ 16.times{|i| c = i*8
106
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
107
+ cv.MoveTo(c+7, 0)
108
+ cv.LineTo(c+7, 3)
109
+ cv.LineTo(c+3, 3)}}
110
+ ],
111
+ :dimple2 => [
112
+ Bitmap.new(2, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
113
+ 16.times{|i| c = i*8
114
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
115
+ cv.MoveTo(0, c+5)
116
+ cv.LineTo(0, c+4)
117
+ cv.LineTo(2, c+4)
118
+ }
119
+ },
120
+ Bitmap.new(128, 2, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
121
+ 16.times{|i| c = i*8
122
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
123
+ cv.MoveTo(c+4, 2)
124
+ cv.LineTo(c+4, 0)
125
+ cv.LineTo(c+6, 0)}}
126
+ ],
127
+ :dimple3 => [
128
+ Bitmap.new(3, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
129
+ 16.times{|i| c = i*8
130
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
131
+ cv.MoveTo(0, c+6)
132
+ cv.LineTo(0, c+4)
133
+ cv.LineTo(3, c+4)
134
+ }
135
+ },
136
+ Bitmap.new(128, 3, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
137
+ 16.times{|i| c = i*8
138
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
139
+ cv.MoveTo(c+4, 3)
140
+ cv.LineTo(c+4, 0)
141
+ cv.LineTo(c+7, 0)}}
142
+ ],
143
+ :dimple4 => [
144
+ Bitmap.new(4, 128, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
145
+ 16.times{|i| c = i*8
146
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
147
+ cv.MoveTo(0, c+7)
148
+ cv.LineTo(0, c+4)
149
+ cv.LineTo(4, c+4)
150
+ }
151
+ },
152
+ Bitmap.new(128, 4, API.getSysColor(COLOR_BTNFACE)).draw{|cv|
153
+ 16.times{|i| c = i*8
154
+ cv.SetPen(API.getSysColor(COLOR_BTNSHADOW))
155
+ cv.MoveTo(c+4, 4)
156
+ cv.LineTo(c+4, 0)
157
+ cv.LineTo(c+8, 0)}}
158
+ ]
159
+ }
160
+
161
+ SplitCursorV = Cursor.loadb64 "AAAAQAAIACAQAAAA4AA4AWAAAAAC0AQBRAICAmAAEEBAADAgCAuAAAAAAAAAAAAAAAAAAEA+n+/3/AfIDuAAAACqAAAACqCAQYdXAAAAtWgAABNWQAACBQMAg4CAwGBgUTA4GCGL4D4AAD4D4AAD4gEI4AOAAAwAGAAAgADB+OAQMBAYDAwLNA=="
162
+
163
+ SplitCursorH = Cursor.loadb64 "AAAAQAAIACAQAAAA4AA4AWAAAAAC0AQBRAICAmAAEEBAADAgCAuAAAAAAAAAAAAAAAAAAEA+n+/3/AiIBIAAAACEAAAAEQNQBzgAAAfz+AAAQACAAAf8AgH/AMSAoMBwYEgwLBgaCAYOgP5/gAAPw/gAAPgfgAAPAPgAAPCAIEHcoDogGEKQAgILAgWBYMDQYHgg"
164
+
165
+ ######################### Main ########################
166
+
167
+ attr_accessor :mother
168
+
169
+ def initialize(*args)
170
+ @lu_pane = @left = @upper = Pane.new(self)
171
+ @rl_pane = @right = @lower = Pane.new(self)
172
+ class << @limit = [0, 0]
173
+ def lu() self[0]; end
174
+ def lu=(v) self[0] = v; end
175
+ def rl() self[1]; end
176
+ def rl=(v) self[1] = v; end
177
+ end
178
+ @_face = :dot
179
+
180
+ super
181
+ @_classname = "RUBYWIN"
182
+ @_style = WS_VISIBLECHILD
183
+ l, t, r, b = margin.to_a #; dpp l, t, r, b
184
+ self.margin = @is_horiz ? Margin[l, nil, r, nil] : Margin[nil, t, nil, b] unless @_margin
185
+ @cursor = @is_horiz ? SplitCursorH : SplitCursorV
186
+ register_event(WM_PAINT, "__paint__", 'c', Canvas)
187
+ register_event(WM_MOUSEMOVE, "__mousemove__", 'ih')
188
+ register_event(WM_MOVE, "__move__", 'ih')
189
+ register_event(WM_LBUTTONDOWN, "__lbuttondown__", 'ih')
190
+ register_event(WM_LBUTTONUP, "__lbuttonup__", 'ih')
191
+ register_event(WM_SETCURSOR, '__setcursor__', 'ih')
192
+ end
193
+ #
194
+ def create()
195
+ unless @mother # is root
196
+ class << @_parent
197
+ attr_accessor :_root
198
+ def __resize__(w, h)
199
+ @_root.__move(0, 0, w, h)
200
+ @controls.each{|i|
201
+ i.__move(0, 0, w, h) if i.respond_to?(:__move)&&!i.respond_to?(:__ownedbysplitter)
202
+ }
203
+ end
204
+ def __move(_x, _y, _w, _h)
205
+ super
206
+ @controls.each{|i|
207
+ i.__move(0, 0, w, h) if i.respond_to?(:__move)&&!i.respond_to?(:__ownedbysplitter)
208
+ }
209
+ end
210
+ end
211
+ @_parent._root = self
212
+ end
213
+ @pw, @ph = @_parent.clientsize
214
+ super
215
+ self.face = @_face || :none
216
+ @canvas = Canvas.new(@_parent)
217
+ @_parent.SendMessage(WM_SIZE, 0, MAKELPARAM(*@_parent.size))
218
+ self
219
+ end
220
+ #
221
+ def margin=(arg)
222
+ l, t, r, b = arg.to_a
223
+ m = if @is_horiz
224
+ if t
225
+ [l.to_i, t.to_i, r.to_i, nil]
226
+ elsif b
227
+ [l.to_i, nil, r.to_i, b.to_i]
228
+ else
229
+ [l.to_i, nil, r.to_i, nil]
230
+ end
231
+ else
232
+ if l
233
+ [l.to_i, t.to_i, nil, b.to_i]
234
+ elsif r
235
+ [nil, t.to_i, r.to_i, b.to_i]
236
+ else
237
+ [nil, t.to_i, nil, b.to_i]
238
+ end
239
+ end
240
+ super(m)
241
+ end
242
+
243
+ # Retreives whether direction of this splitter is horizontal or not.
244
+ def is_horiz()
245
+ @is_horiz
246
+ end
247
+
248
+ # Gets a thickness of this splitter.
249
+ def thickness()
250
+ is_horiz ? margin.h : margin.w
251
+ end
252
+ # Sets a thickness of this splitter.
253
+ def thickness=(t)
254
+ if is_horiz
255
+ self.h = margin.h = t.to_i
256
+ else
257
+ self.w = margin.w = t.to_i
258
+ end
259
+ end
260
+
261
+ # Gets the limit position in which this splitter can be moved.<br>
262
+ # Retruens an array, but it's accessible by name of "lu", "rl".
263
+ def limit()
264
+ @limit
265
+ end
266
+
267
+ # Sets the limit position in which this splitter can be moved.
268
+ def limit=(args)
269
+ lu, rl = args
270
+ @limit.lu = lu.to_i
271
+ @limit.rl = rl.to_i
272
+ end
273
+
274
+ # Gets a pane positioned left side or upper side of this splitter.
275
+ def lu_pane()
276
+ @lu_pane
277
+ end
278
+ alias left lu_pane
279
+ alias upper lu_pane
280
+
281
+ # Clears the left side or upper side pane and adds controls into the pane.
282
+ def lu_pane=(arg)
283
+ @lu_pane.clear
284
+ return unless arg
285
+ arg.is_a?(Array) ? arg.each{|i| @lu_pane << i} : @lu_pane << arg
286
+ end
287
+ alias left= lu_pane=
288
+ alias upper= lu_pane=
289
+
290
+ # Gets a pane positioned right side or lower side of this splitter.
291
+ def rl_pane()
292
+ @rl_pane
293
+ end
294
+ alias right rl_pane
295
+ alias lower rl_pane
296
+
297
+ # Clears the right side or lower side pane and adds controls into the pane.
298
+ def rl_pane=(arg)
299
+ @rl_pane.clear
300
+ return unless arg
301
+ arg.is_a?(Array) ? arg.each{|i| @rl_pane << i} : @rl_pane << arg
302
+ end
303
+ alias right= rl_pane=
304
+ alias lower= rl_pane=
305
+
306
+ # Gets a bitmap of display-pattern in this splitter.
307
+ def face()
308
+ Faces.key(@_face) || @_face
309
+ end
310
+
311
+ # Sets a bitmap of display-pattern in this splitter.<br>
312
+ # Give a Bitmap as argument.
313
+ def face=(f)
314
+ if f.is_a?(Symbol)
315
+ @_face = Faces[f]
316
+ else
317
+ @_face = f
318
+ end
319
+ end
320
+
321
+ # Gets a direction of this splitter.
322
+ def direction()
323
+ @is_horiz ? :horiz : :vert
324
+ end
325
+
326
+ # Sets a direction of this splitter.<br>
327
+ # If given :true, :horiz or :h, then this splitter displays the horizontal direction, otherwize the vertical.
328
+ def direction=(dir)
329
+ raise "Already item exists in the panes." if !@lu_pane.empty? || !@rl_pane.empty?
330
+ @is_horiz = (dir==:horiz) || (dir==:h) || (dir==true) || dir.nil?
331
+ l, t, r, b = margin.to_a
332
+ self.margin = @is_horiz ? [l, nil, r, nil] : [nil, t, nil, b]
333
+ # @cursor = @is_horiz ? Cursor.fromsystem(IDC_SIZENS) : Cursor.fromsystem(IDC_SIZEWE)
334
+ @cursor = @is_horiz ? SplitCursorH : SplitCursorV
335
+ end
336
+
337
+ #
338
+ def x() clientpos[0]; end
339
+ #
340
+ def y() clientpos[1]; end
341
+ #
342
+ def w() windowsize[0]; end
343
+ #
344
+ def h() windowsize[1]; end
345
+ #
346
+ def delete()
347
+ @lu_pane.reverse_each{|i|@lu_pane.delete(i)}
348
+ @rl_pane.reverse_each{|i|@rl_pane.delete(i)}
349
+ super
350
+ end
351
+
352
+ #
353
+ def __move(_x, _y, _w, _h)
354
+ @pw, @ph = @_parent.clientsize if @_parent.alive?
355
+ super
356
+ _resize_panes
357
+ end
358
+ #
359
+ def __get_hrange(child)
360
+ return [x, x+w] if @is_horiz
361
+ if @lu_pane.index(child)
362
+ [@mother ? @mother.__get_hrange(self)[0] : 0, x]
363
+ else
364
+ [x+w, @mother ? @mother.__get_hrange(self)[1] : @_parent.clientsize[0]]
365
+ end
366
+ end
367
+ #
368
+ def __get_vrange(child)
369
+ return [y, y+h] unless @is_horiz
370
+ if @lu_pane.index(child)
371
+ [@mother ? @mother.__get_vrange(self)[0] : 0, y]
372
+ else
373
+ [x+w, @mother ? @mother.__get_vrange(self)[1] : @_parent.clientsize[1]]
374
+ end
375
+ end
376
+
377
+ # def position()
378
+ # x, y = super
379
+ # if @_is_horiz
380
+ # [x, y-__get_hrange(self)[0]]
381
+ # else
382
+ # #dpp __get_vrange(self), [x-__get_vrange(self)[0], y]
383
+ # [x-__get_vrange(self)[0], y]
384
+ # [x, y]
385
+ # end
386
+ # end
387
+
388
+ protected
389
+ def _apply_options(arg)
390
+ case arg
391
+ when :horiz, :h
392
+ @is_horiz = true
393
+ when :vert, :v
394
+ @is_horiz = nil
395
+ when :none, :line, :dot, :bump2, :bump3, :bump4, :dimple2, :dimple3, :dimple4
396
+ @_face = arg
397
+ end
398
+ end
399
+
400
+ private
401
+ def __lbuttonup__(state, x, y)
402
+ self.ReleaseCapture
403
+ l,t,r,b = margin.to_a
404
+ if @is_horiz
405
+ @_margin.y = self.y - (@mother ? @mother.__get_vrange(self)[0] : 0)
406
+ if @_margin.top
407
+ self.margin = l, self.y, r, b
408
+ else
409
+ self.margin = l, t, r, @_parent.clientsize[1]-self.y-self.h
410
+ end
411
+ else
412
+ @_margin.x = self.x - (@mother ? @mother.__get_hrange(self)[0] : 0)
413
+ if @_margin.left
414
+ self.margin = self.x, t, r, b
415
+ elsif @_margin.right
416
+ self.margin = l, t, @_parent.clientsize[0]-self.x-self.w, b
417
+ end
418
+ end
419
+ @_parent.refresh
420
+ end
421
+
422
+ def __lbuttondown__(state, x, y)
423
+ self.SetCapture
424
+ end
425
+
426
+ def __paint__(cv)
427
+ return unless @_face
428
+ w, h = windowsize
429
+ if @is_horiz
430
+ fc = @_face[1]
431
+ n = w / fc.width + 1
432
+ offset = (h - fc.height) / 2
433
+ offset = 0 if offset < 0
434
+ n.times{|i| cv.BitBlt(i*fc.width, offset, fc)}
435
+ else
436
+ fc = @_face[0]
437
+ n = h / fc.height + 1
438
+ offset = (w - fc.width) / 2
439
+ offset = 0 if offset < 0
440
+ n.times{|i| cv.BitBlt(offset, i*fc.height, fc)}
441
+ end
442
+ end
443
+
444
+ def _resize_panes()
445
+ return unless @_parent.alive?
446
+ if @is_horiz
447
+ y0, y1 = @mother ? @mother.__get_vrange(self) : [0, @_parent.clientsize[1]]
448
+ @lu_pane.each{|i| i.__move(x, y0, w, y-y0)}
449
+ @rl_pane.each{|i| i.__move(x, y+h, w, y1-y-h)}
450
+ else
451
+ x0, x1 = @mother ? @mother.__get_hrange(self) : [0, @_parent.clientsize[0]]
452
+ @lu_pane.each{|i| i.__move(x0, y, x-x0, h)}
453
+ @rl_pane.each{|i| i.__move(x+w, y, x1-x-w, h)}
454
+ end
455
+ end
456
+
457
+ def __move__(state, _x, _y)
458
+ _resize_panes()
459
+ end
460
+
461
+ def __mousemove__(state, _x, _y)
462
+ return if (state & MK_LBUTTON) == 0
463
+ if @is_horiz
464
+ ly0, ly1 = @limit
465
+ y0, y1 = @mother ? @mother.__get_vrange(self) : [0, @_parent.clientsize[1]]
466
+ # self.move(x, _y+y)
467
+ # return
468
+ if y+_y < y0+ly0
469
+ self.move(x, y0+ly0)
470
+ elsif y+_y >= (y1-ly1)
471
+ self.move(x, y1-ly1-h)
472
+ else
473
+ self.move(x, _y+y)
474
+ end
475
+ else
476
+ lx0, lx1 = @limit
477
+ x0, x1 = @mother ? @mother.__get_hrange(self) : [0, @_parent.clientsize[0]]
478
+ if x+_x < x0+lx0
479
+ self.move(x0+lx0, y)
480
+ elsif x+_x >= (x1-lx1)
481
+ self.move(x1-lx1-w, y)
482
+ else
483
+ self.move(_x+x, y)
484
+ end
485
+ end
486
+ end
487
+
488
+ def __setcursor__(hwnd, hittest, msg)
489
+ return unless hittest==1
490
+ APP.SetCursor @cursor
491
+ CancelDefWindowProc
492
+ end
493
+ end
494
+ end