wrb 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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