fxruby 1.6.19-x86-mingw32

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 (497) hide show
  1. data/LICENSE +456 -0
  2. data/README +39 -0
  3. data/doc/apes02.html +21 -0
  4. data/doc/apes03.html +39 -0
  5. data/doc/book.html +3 -0
  6. data/doc/build.html +132 -0
  7. data/doc/ch03s02.html +23 -0
  8. data/doc/ch03s03.html +52 -0
  9. data/doc/ch03s04.html +36 -0
  10. data/doc/ch03s05.html +60 -0
  11. data/doc/ch04s02.html +71 -0
  12. data/doc/ch04s03.html +37 -0
  13. data/doc/ch04s04.html +72 -0
  14. data/doc/ch05s02.html +260 -0
  15. data/doc/ch05s03.html +127 -0
  16. data/doc/changes.html +777 -0
  17. data/doc/clipboardtut.html +67 -0
  18. data/doc/differences.html +190 -0
  19. data/doc/dragdroptut.html +263 -0
  20. data/doc/events.html +36 -0
  21. data/doc/examples.html +104 -0
  22. data/doc/gems.html +73 -0
  23. data/doc/goals.html +41 -0
  24. data/doc/images/babelfish.png +0 -0
  25. data/doc/images/browser.png +0 -0
  26. data/doc/images/button.png +0 -0
  27. data/doc/images/call-chain-example.png +0 -0
  28. data/doc/images/colordialog.png +0 -0
  29. data/doc/images/datatarget.png +0 -0
  30. data/doc/images/dialog.png +0 -0
  31. data/doc/images/dilbert.png +0 -0
  32. data/doc/images/dirlist.png +0 -0
  33. data/doc/images/dropsite-droprejected.png +0 -0
  34. data/doc/images/foursplit.png +0 -0
  35. data/doc/images/gltest.png +0 -0
  36. data/doc/images/glviewer.png +0 -0
  37. data/doc/images/groupbox.png +0 -0
  38. data/doc/images/header.png +0 -0
  39. data/doc/images/hello-with-button.png +0 -0
  40. data/doc/images/hello-with-icon-1.png +0 -0
  41. data/doc/images/hello-with-icon-2.png +0 -0
  42. data/doc/images/hello-with-icon-3.png +0 -0
  43. data/doc/images/hello-with-tooltip.png +0 -0
  44. data/doc/images/hello-without-button.png +0 -0
  45. data/doc/images/hello.png +0 -0
  46. data/doc/images/hello2.png +0 -0
  47. data/doc/images/iconlist-bigicons.png +0 -0
  48. data/doc/images/iconlist-details.png +0 -0
  49. data/doc/images/image.png +0 -0
  50. data/doc/images/imageviewer.png +0 -0
  51. data/doc/images/inheritance.png +0 -0
  52. data/doc/images/mditest.png +0 -0
  53. data/doc/images/raabrowser.png +0 -0
  54. data/doc/images/scribble.png +0 -0
  55. data/doc/images/shutter.png +0 -0
  56. data/doc/images/splitter.png +0 -0
  57. data/doc/images/tabbook.png +0 -0
  58. data/doc/images/table.png +0 -0
  59. data/doc/images/tutorial1.png +0 -0
  60. data/doc/implementation.html +16 -0
  61. data/doc/infosources.html +33 -0
  62. data/doc/library.html +30 -0
  63. data/doc/opengl.html +73 -0
  64. data/doc/pt01.html +3 -0
  65. data/doc/pt02.html +3 -0
  66. data/doc/scintilla.html +36 -0
  67. data/doc/style.css +247 -0
  68. data/doc/subversion.html +21 -0
  69. data/doc/tutorial1.html +90 -0
  70. data/doc/unicode.html +56 -0
  71. data/examples/RAA.rb +25 -0
  72. data/examples/README +53 -0
  73. data/examples/babelfish.rb +72 -0
  74. data/examples/bounce.rb +159 -0
  75. data/examples/browser.rb +191 -0
  76. data/examples/button.rb +168 -0
  77. data/examples/charts.rb +35 -0
  78. data/examples/custom_table_item.rb +170 -0
  79. data/examples/datatarget.rb +223 -0
  80. data/examples/dctest.rb +696 -0
  81. data/examples/dialog.rb +143 -0
  82. data/examples/dilbert.rb +66 -0
  83. data/examples/dirlist.rb +63 -0
  84. data/examples/dragdrop.rb +97 -0
  85. data/examples/dragsource.rb +80 -0
  86. data/examples/dropsite.rb +59 -0
  87. data/examples/foursplit.rb +97 -0
  88. data/examples/gltest.rb +330 -0
  89. data/examples/glviewer.rb +576 -0
  90. data/examples/groupbox.rb +392 -0
  91. data/examples/header.rb +149 -0
  92. data/examples/hello.rb +12 -0
  93. data/examples/hello2.rb +51 -0
  94. data/examples/iRAA.rb +153 -0
  95. data/examples/iconlist.rb +92 -0
  96. data/examples/icons/AngryGuyInBunnySuit.ico +0 -0
  97. data/examples/icons/FatBot.ico +0 -0
  98. data/examples/icons/FlippedySwitch.ico +0 -0
  99. data/examples/icons/LeGoon.ico +0 -0
  100. data/examples/icons/Net.ico +0 -0
  101. data/examples/icons/RedMacOS.ico +0 -0
  102. data/examples/icons/SawBlade.ico +0 -0
  103. data/examples/icons/backview.png +0 -0
  104. data/examples/icons/big.png +0 -0
  105. data/examples/icons/bigfolder.png +0 -0
  106. data/examples/icons/bigpenguin.png +0 -0
  107. data/examples/icons/bottomview.png +0 -0
  108. data/examples/icons/camera.png +0 -0
  109. data/examples/icons/capbutt.png +0 -0
  110. data/examples/icons/capnotlast.png +0 -0
  111. data/examples/icons/capproj.png +0 -0
  112. data/examples/icons/capround.png +0 -0
  113. data/examples/icons/colorpal.png +0 -0
  114. data/examples/icons/copy.png +0 -0
  115. data/examples/icons/cut.png +0 -0
  116. data/examples/icons/delimit.png +0 -0
  117. data/examples/icons/dippy.png +0 -0
  118. data/examples/icons/double_dash.png +0 -0
  119. data/examples/icons/filenew.png +0 -0
  120. data/examples/icons/fileopen.png +0 -0
  121. data/examples/icons/filesave.png +0 -0
  122. data/examples/icons/filesaveas.png +0 -0
  123. data/examples/icons/fonts.png +0 -0
  124. data/examples/icons/fox.png +0 -0
  125. data/examples/icons/foxicon.png +0 -0
  126. data/examples/icons/frontview.png +0 -0
  127. data/examples/icons/gem_big.png +0 -0
  128. data/examples/icons/gem_small.png +0 -0
  129. data/examples/icons/hello2.png +0 -0
  130. data/examples/icons/help.png +0 -0
  131. data/examples/icons/indent.png +0 -0
  132. data/examples/icons/jbevel.png +0 -0
  133. data/examples/icons/jmiter.png +0 -0
  134. data/examples/icons/jround.png +0 -0
  135. data/examples/icons/kill.png +0 -0
  136. data/examples/icons/leftview.png +0 -0
  137. data/examples/icons/light.png +0 -0
  138. data/examples/icons/minidoc.png +0 -0
  139. data/examples/icons/minifolder.png +0 -0
  140. data/examples/icons/minifolderopen.png +0 -0
  141. data/examples/icons/newfolder.png +0 -0
  142. data/examples/icons/nolight.png +0 -0
  143. data/examples/icons/onoff_dash.png +0 -0
  144. data/examples/icons/palette.png +0 -0
  145. data/examples/icons/parallel.png +0 -0
  146. data/examples/icons/paste.png +0 -0
  147. data/examples/icons/pattern.png +0 -0
  148. data/examples/icons/penguin.png +0 -0
  149. data/examples/icons/perspective.png +0 -0
  150. data/examples/icons/printicon.png +0 -0
  151. data/examples/icons/prop.png +0 -0
  152. data/examples/icons/redo.png +0 -0
  153. data/examples/icons/rightview.png +0 -0
  154. data/examples/icons/saveas.png +0 -0
  155. data/examples/icons/shutter1.png +0 -0
  156. data/examples/icons/shutter2.png +0 -0
  157. data/examples/icons/small.png +0 -0
  158. data/examples/icons/smoothlight.png +0 -0
  159. data/examples/icons/solid_line.png +0 -0
  160. data/examples/icons/tbuplevel.png +0 -0
  161. data/examples/icons/topview.png +0 -0
  162. data/examples/icons/undo.png +0 -0
  163. data/examples/icons/winapp.png +0 -0
  164. data/examples/icons/zoom.png +0 -0
  165. data/examples/image.rb +279 -0
  166. data/examples/imageviewer.rb +509 -0
  167. data/examples/inputs.rb +83 -0
  168. data/examples/mditest.rb +180 -0
  169. data/examples/pig.rb +77 -0
  170. data/examples/raabrowser.rb +122 -0
  171. data/examples/ratio.rb +80 -0
  172. data/examples/rulerview.rb +27 -0
  173. data/examples/scintilla-test.rb +81 -0
  174. data/examples/scribble-orig.rb +186 -0
  175. data/examples/scribble.rb +162 -0
  176. data/examples/shutter.rb +158 -0
  177. data/examples/splitter.rb +211 -0
  178. data/examples/styledtext.rb +82 -0
  179. data/examples/tabbook.rb +165 -0
  180. data/examples/table.rb +182 -0
  181. data/examples/textedit/commands.rb +114 -0
  182. data/examples/textedit/helpwindow.rb +299 -0
  183. data/examples/textedit/prefdialog.rb +239 -0
  184. data/examples/textedit/textedit.rb +1763 -0
  185. data/examples/unicode.rb +36 -0
  186. data/ext/fox16/fox16.so +0 -0
  187. data/index.html +14 -0
  188. data/lib/fox16/accel_table.rb +70 -0
  189. data/lib/fox16/aliases.rb +5611 -0
  190. data/lib/fox16/calendar.rb +217 -0
  191. data/lib/fox16/chore.rb +105 -0
  192. data/lib/fox16/colors.rb +280 -0
  193. data/lib/fox16/core.rb +700 -0
  194. data/lib/fox16/dict.rb +35 -0
  195. data/lib/fox16/exceptions_for_fxerror.rb +17 -0
  196. data/lib/fox16/execute_nonmodal.rb +70 -0
  197. data/lib/fox16/glgroup.rb +166 -0
  198. data/lib/fox16/glshapes.rb +456 -0
  199. data/lib/fox16/input.rb +59 -0
  200. data/lib/fox16/irb.rb +178 -0
  201. data/lib/fox16/iterators.rb +420 -0
  202. data/lib/fox16/keys.rb +1374 -0
  203. data/lib/fox16/kwargs.rb +2740 -0
  204. data/lib/fox16/missingdep.rb +14 -0
  205. data/lib/fox16/pseudokeyboard.rb +40 -0
  206. data/lib/fox16/pseudomouse.rb +87 -0
  207. data/lib/fox16/responder.rb +70 -0
  208. data/lib/fox16/responder2.rb +132 -0
  209. data/lib/fox16/scintilla.rb +3641 -0
  210. data/lib/fox16/settings.rb +18 -0
  211. data/lib/fox16/signal.rb +71 -0
  212. data/lib/fox16/splashscreen.rb +82 -0
  213. data/lib/fox16/timeout.rb +136 -0
  214. data/lib/fox16/undolist.rb +455 -0
  215. data/lib/fox16/version.rb +9 -0
  216. data/rdoc-sources/FX4Splitter.rb +156 -0
  217. data/rdoc-sources/FX7Segment.rb +54 -0
  218. data/rdoc-sources/FXAccelTable.rb +84 -0
  219. data/rdoc-sources/FXApp.rb +545 -0
  220. data/rdoc-sources/FXArrowButton.rb +69 -0
  221. data/rdoc-sources/FXBMPIcon.rb +67 -0
  222. data/rdoc-sources/FXBMPImage.rb +30 -0
  223. data/rdoc-sources/FXBitmap.rb +115 -0
  224. data/rdoc-sources/FXBitmapFrame.rb +31 -0
  225. data/rdoc-sources/FXBitmapView.rb +44 -0
  226. data/rdoc-sources/FXButton.rb +59 -0
  227. data/rdoc-sources/FXCURCursor.rb +13 -0
  228. data/rdoc-sources/FXCanvas.rb +18 -0
  229. data/rdoc-sources/FXCheckButton.rb +58 -0
  230. data/rdoc-sources/FXChoiceBox.rb +49 -0
  231. data/rdoc-sources/FXColorBar.rb +48 -0
  232. data/rdoc-sources/FXColorDialog.rb +37 -0
  233. data/rdoc-sources/FXColorList.rb +55 -0
  234. data/rdoc-sources/FXColorRing.rb +49 -0
  235. data/rdoc-sources/FXColorSelector.rb +65 -0
  236. data/rdoc-sources/FXColorWell.rb +65 -0
  237. data/rdoc-sources/FXColorWheel.rb +57 -0
  238. data/rdoc-sources/FXComboBox.rb +214 -0
  239. data/rdoc-sources/FXComposite.rb +34 -0
  240. data/rdoc-sources/FXCursor.rb +67 -0
  241. data/rdoc-sources/FXDC.rb +720 -0
  242. data/rdoc-sources/FXDCPrint.rb +127 -0
  243. data/rdoc-sources/FXDCWindow.rb +33 -0
  244. data/rdoc-sources/FXDataTarget.rb +66 -0
  245. data/rdoc-sources/FXDebugTarget.rb +25 -0
  246. data/rdoc-sources/FXDelegator.rb +23 -0
  247. data/rdoc-sources/FXDial.rb +107 -0
  248. data/rdoc-sources/FXDialogBox.rb +32 -0
  249. data/rdoc-sources/FXDict.rb +79 -0
  250. data/rdoc-sources/FXDirBox.rb +55 -0
  251. data/rdoc-sources/FXDirDialog.rb +47 -0
  252. data/rdoc-sources/FXDirList.rb +149 -0
  253. data/rdoc-sources/FXDirSelector.rb +64 -0
  254. data/rdoc-sources/FXDockBar.rb +151 -0
  255. data/rdoc-sources/FXDockHandler.rb +26 -0
  256. data/rdoc-sources/FXDockSite.rb +104 -0
  257. data/rdoc-sources/FXDockTitle.rb +26 -0
  258. data/rdoc-sources/FXDocument.rb +29 -0
  259. data/rdoc-sources/FXDragCorner.rb +19 -0
  260. data/rdoc-sources/FXDrawable.rb +27 -0
  261. data/rdoc-sources/FXDriveBox.rb +46 -0
  262. data/rdoc-sources/FXExtentd.rb +85 -0
  263. data/rdoc-sources/FXExtentf.rb +85 -0
  264. data/rdoc-sources/FXFileDialog.rb +217 -0
  265. data/rdoc-sources/FXFileDict.rb +131 -0
  266. data/rdoc-sources/FXFileList.rb +208 -0
  267. data/rdoc-sources/FXFileSelector.rb +184 -0
  268. data/rdoc-sources/FXFileStream.rb +27 -0
  269. data/rdoc-sources/FXFoldingList.rb +504 -0
  270. data/rdoc-sources/FXFont.rb +361 -0
  271. data/rdoc-sources/FXFontDialog.rb +14 -0
  272. data/rdoc-sources/FXFontSelector.rb +37 -0
  273. data/rdoc-sources/FXFrame.rb +53 -0
  274. data/rdoc-sources/FXGIFCursor.rb +50 -0
  275. data/rdoc-sources/FXGIFIcon.rb +31 -0
  276. data/rdoc-sources/FXGIFImage.rb +29 -0
  277. data/rdoc-sources/FXGLCanvas.rb +45 -0
  278. data/rdoc-sources/FXGLContext.rb +40 -0
  279. data/rdoc-sources/FXGLObject.rb +75 -0
  280. data/rdoc-sources/FXGLShape.rb +69 -0
  281. data/rdoc-sources/FXGLViewer.rb +332 -0
  282. data/rdoc-sources/FXGLVisual.rb +94 -0
  283. data/rdoc-sources/FXGradientBar.rb +301 -0
  284. data/rdoc-sources/FXGroupBox.rb +36 -0
  285. data/rdoc-sources/FXHeader.rb +411 -0
  286. data/rdoc-sources/FXHorizontalFrame.rb +29 -0
  287. data/rdoc-sources/FXICOIcon.rb +65 -0
  288. data/rdoc-sources/FXICOImage.rb +31 -0
  289. data/rdoc-sources/FXIcon.rb +38 -0
  290. data/rdoc-sources/FXIconDict.rb +48 -0
  291. data/rdoc-sources/FXIconList.rb +450 -0
  292. data/rdoc-sources/FXIconSource.rb +100 -0
  293. data/rdoc-sources/FXId.rb +34 -0
  294. data/rdoc-sources/FXImage.rb +292 -0
  295. data/rdoc-sources/FXImageFrame.rb +36 -0
  296. data/rdoc-sources/FXImageView.rb +35 -0
  297. data/rdoc-sources/FXInputDialog.rb +80 -0
  298. data/rdoc-sources/FXJPGIcon.rb +70 -0
  299. data/rdoc-sources/FXJPGImage.rb +38 -0
  300. data/rdoc-sources/FXKnob.rb +76 -0
  301. data/rdoc-sources/FXLabel.rb +72 -0
  302. data/rdoc-sources/FXList.rb +443 -0
  303. data/rdoc-sources/FXListBox.rb +191 -0
  304. data/rdoc-sources/FXMDIButton.rb +67 -0
  305. data/rdoc-sources/FXMDIChild.rb +155 -0
  306. data/rdoc-sources/FXMDIClient.rb +65 -0
  307. data/rdoc-sources/FXMainWindow.rb +26 -0
  308. data/rdoc-sources/FXMatrix.rb +57 -0
  309. data/rdoc-sources/FXMemoryBuffer.rb +28 -0
  310. data/rdoc-sources/FXMemoryStream.rb +50 -0
  311. data/rdoc-sources/FXMenuBar.rb +23 -0
  312. data/rdoc-sources/FXMenuButton.rb +84 -0
  313. data/rdoc-sources/FXMenuCaption.rb +53 -0
  314. data/rdoc-sources/FXMenuCascade.rb +18 -0
  315. data/rdoc-sources/FXMenuCheck.rb +30 -0
  316. data/rdoc-sources/FXMenuCommand.rb +26 -0
  317. data/rdoc-sources/FXMenuPane.rb +13 -0
  318. data/rdoc-sources/FXMenuRadio.rb +33 -0
  319. data/rdoc-sources/FXMenuSeparator.rb +21 -0
  320. data/rdoc-sources/FXMenuTitle.rb +27 -0
  321. data/rdoc-sources/FXMessageBox.rb +73 -0
  322. data/rdoc-sources/FXObject.rb +28 -0
  323. data/rdoc-sources/FXOptionMenu.rb +83 -0
  324. data/rdoc-sources/FXPCXIcon.rb +63 -0
  325. data/rdoc-sources/FXPCXImage.rb +31 -0
  326. data/rdoc-sources/FXPNGIcon.rb +66 -0
  327. data/rdoc-sources/FXPNGImage.rb +34 -0
  328. data/rdoc-sources/FXPPMIcon.rb +36 -0
  329. data/rdoc-sources/FXPPMImage.rb +31 -0
  330. data/rdoc-sources/FXPacker.rb +63 -0
  331. data/rdoc-sources/FXPicker.rb +27 -0
  332. data/rdoc-sources/FXPopup.rb +53 -0
  333. data/rdoc-sources/FXPrintDialog.rb +36 -0
  334. data/rdoc-sources/FXProgressBar.rb +57 -0
  335. data/rdoc-sources/FXProgressDialog.rb +36 -0
  336. data/rdoc-sources/FXQuatd.rb +164 -0
  337. data/rdoc-sources/FXQuatf.rb +173 -0
  338. data/rdoc-sources/FXRGBIcon.rb +64 -0
  339. data/rdoc-sources/FXRGBImage.rb +31 -0
  340. data/rdoc-sources/FXRadioButton.rb +70 -0
  341. data/rdoc-sources/FXRanged.rb +100 -0
  342. data/rdoc-sources/FXRangef.rb +100 -0
  343. data/rdoc-sources/FXRealSlider.rb +101 -0
  344. data/rdoc-sources/FXRealSpinner.rb +140 -0
  345. data/rdoc-sources/FXRecentFiles.rb +77 -0
  346. data/rdoc-sources/FXRectangle.rb +149 -0
  347. data/rdoc-sources/FXRegion.rb +64 -0
  348. data/rdoc-sources/FXRegistry.rb +56 -0
  349. data/rdoc-sources/FXReplaceDialog.rb +56 -0
  350. data/rdoc-sources/FXRootWindow.rb +17 -0
  351. data/rdoc-sources/FXRuler.rb +130 -0
  352. data/rdoc-sources/FXRulerView.rb +225 -0
  353. data/rdoc-sources/FXScintilla.rb +121 -0
  354. data/rdoc-sources/FXScrollArea.rb +86 -0
  355. data/rdoc-sources/FXScrollBar.rb +107 -0
  356. data/rdoc-sources/FXScrollPane.rb +28 -0
  357. data/rdoc-sources/FXScrollWindow.rb +38 -0
  358. data/rdoc-sources/FXSearchDialog.rb +24 -0
  359. data/rdoc-sources/FXSeparator.rb +74 -0
  360. data/rdoc-sources/FXSettings.rb +248 -0
  361. data/rdoc-sources/FXShell.rb +8 -0
  362. data/rdoc-sources/FXShutter.rb +102 -0
  363. data/rdoc-sources/FXSize.rb +95 -0
  364. data/rdoc-sources/FXSlider.rb +98 -0
  365. data/rdoc-sources/FXSphered.rb +80 -0
  366. data/rdoc-sources/FXSpheref.rb +80 -0
  367. data/rdoc-sources/FXSpinner.rb +136 -0
  368. data/rdoc-sources/FXSplashWindow.rb +27 -0
  369. data/rdoc-sources/FXSplitter.rb +89 -0
  370. data/rdoc-sources/FXSpring.rb +61 -0
  371. data/rdoc-sources/FXStatusBar.rb +42 -0
  372. data/rdoc-sources/FXStatusLine.rb +60 -0
  373. data/rdoc-sources/FXStream.rb +142 -0
  374. data/rdoc-sources/FXStringDict.rb +38 -0
  375. data/rdoc-sources/FXSwitcher.rb +78 -0
  376. data/rdoc-sources/FXTGAIcon.rb +63 -0
  377. data/rdoc-sources/FXTGAImage.rb +31 -0
  378. data/rdoc-sources/FXTIFIcon.rb +70 -0
  379. data/rdoc-sources/FXTIFImage.rb +37 -0
  380. data/rdoc-sources/FXTabBar.rb +80 -0
  381. data/rdoc-sources/FXTabBook.rb +41 -0
  382. data/rdoc-sources/FXTabItem.rb +58 -0
  383. data/rdoc-sources/FXTable.rb +975 -0
  384. data/rdoc-sources/FXText.rb +581 -0
  385. data/rdoc-sources/FXTextField.rb +151 -0
  386. data/rdoc-sources/FXToggleButton.rb +70 -0
  387. data/rdoc-sources/FXToolBar.rb +61 -0
  388. data/rdoc-sources/FXToolBarGrip.rb +50 -0
  389. data/rdoc-sources/FXToolBarShell.rb +44 -0
  390. data/rdoc-sources/FXToolBarTab.rb +74 -0
  391. data/rdoc-sources/FXToolTip.rb +39 -0
  392. data/rdoc-sources/FXTopWindow.rb +163 -0
  393. data/rdoc-sources/FXTranslator.rb +32 -0
  394. data/rdoc-sources/FXTreeList.rb +514 -0
  395. data/rdoc-sources/FXTreeListBox.rb +219 -0
  396. data/rdoc-sources/FXTriStateButton.rb +49 -0
  397. data/rdoc-sources/FXVec2d.rb +96 -0
  398. data/rdoc-sources/FXVec2f.rb +96 -0
  399. data/rdoc-sources/FXVec3d.rb +118 -0
  400. data/rdoc-sources/FXVec3f.rb +118 -0
  401. data/rdoc-sources/FXVec4d.rb +139 -0
  402. data/rdoc-sources/FXVec4f.rb +139 -0
  403. data/rdoc-sources/FXVerticalFrame.rb +29 -0
  404. data/rdoc-sources/FXVisual.rb +79 -0
  405. data/rdoc-sources/FXWindow.rb +725 -0
  406. data/rdoc-sources/FXWizard.rb +59 -0
  407. data/rdoc-sources/FXXBMIcon.rb +37 -0
  408. data/rdoc-sources/FXXBMImage.rb +32 -0
  409. data/rdoc-sources/FXXPMIcon.rb +65 -0
  410. data/rdoc-sources/FXXPMImage.rb +31 -0
  411. data/rdoc-sources/README.rdoc +53 -0
  412. data/rdoc-sources/fxdefs.rb +90 -0
  413. data/tests/README +19 -0
  414. data/tests/TC_FXAccelTable.rb +57 -0
  415. data/tests/TC_FXApp.rb +16 -0
  416. data/tests/TC_FXArc.rb +26 -0
  417. data/tests/TC_FXBMPIcon.rb +15 -0
  418. data/tests/TC_FXBMPImage.rb +15 -0
  419. data/tests/TC_FXButton.rb +78 -0
  420. data/tests/TC_FXCheckButton.rb +57 -0
  421. data/tests/TC_FXComboBox.rb +63 -0
  422. data/tests/TC_FXDC.rb +372 -0
  423. data/tests/TC_FXDCPrint.rb +101 -0
  424. data/tests/TC_FXDCWindow.rb +23 -0
  425. data/tests/TC_FXDataTarget.rb +24 -0
  426. data/tests/TC_FXDialogBox.rb +12 -0
  427. data/tests/TC_FXDirList.rb +30 -0
  428. data/tests/TC_FXExtentd.rb +21 -0
  429. data/tests/TC_FXExtentf.rb +21 -0
  430. data/tests/TC_FXFileAssoc.rb +62 -0
  431. data/tests/TC_FXFileStream.rb +89 -0
  432. data/tests/TC_FXFoldingList.rb +32 -0
  433. data/tests/TC_FXFont.rb +69 -0
  434. data/tests/TC_FXFontDesc.rb +58 -0
  435. data/tests/TC_FXGLGroup.rb +32 -0
  436. data/tests/TC_FXGLShape.rb +28 -0
  437. data/tests/TC_FXGLViewer.rb +20 -0
  438. data/tests/TC_FXGradientBar.rb +89 -0
  439. data/tests/TC_FXHeader.rb +82 -0
  440. data/tests/TC_FXHiliteStyle.rb +23 -0
  441. data/tests/TC_FXIconDict.rb +52 -0
  442. data/tests/TC_FXIconList.rb +192 -0
  443. data/tests/TC_FXId.rb +19 -0
  444. data/tests/TC_FXImage.rb +155 -0
  445. data/tests/TC_FXLight.rb +33 -0
  446. data/tests/TC_FXList.rb +116 -0
  447. data/tests/TC_FXListBox.rb +49 -0
  448. data/tests/TC_FXMainWindow.rb +19 -0
  449. data/tests/TC_FXMat4f.rb +228 -0
  450. data/tests/TC_FXMaterial.rb +89 -0
  451. data/tests/TC_FXMemoryStream.rb +97 -0
  452. data/tests/TC_FXMenuCheck.rb +57 -0
  453. data/tests/TC_FXMenuCommand.rb +12 -0
  454. data/tests/TC_FXMenuRadio.rb +57 -0
  455. data/tests/TC_FXMessageBox.rb +25 -0
  456. data/tests/TC_FXPoint.rb +57 -0
  457. data/tests/TC_FXQuatf.rb +93 -0
  458. data/tests/TC_FXRadioButton.rb +57 -0
  459. data/tests/TC_FXRanged.rb +42 -0
  460. data/tests/TC_FXRangef.rb +42 -0
  461. data/tests/TC_FXRectangle.rb +88 -0
  462. data/tests/TC_FXRegion.rb +54 -0
  463. data/tests/TC_FXRegistry.rb +27 -0
  464. data/tests/TC_FXScrollArea.rb +28 -0
  465. data/tests/TC_FXScrollWindow.rb +28 -0
  466. data/tests/TC_FXSegment.rb +22 -0
  467. data/tests/TC_FXSettings.rb +34 -0
  468. data/tests/TC_FXShell.rb +26 -0
  469. data/tests/TC_FXSize.rb +54 -0
  470. data/tests/TC_FXStream.rb +11 -0
  471. data/tests/TC_FXTable.rb +561 -0
  472. data/tests/TC_FXTableItem.rb +48 -0
  473. data/tests/TC_FXText.rb +96 -0
  474. data/tests/TC_FXTopWindow.rb +32 -0
  475. data/tests/TC_FXTreeList.rb +100 -0
  476. data/tests/TC_FXTreeListBox.rb +41 -0
  477. data/tests/TC_FXUndoList.rb +43 -0
  478. data/tests/TC_FXVec2d.rb +142 -0
  479. data/tests/TC_FXVec2f.rb +137 -0
  480. data/tests/TC_FXVec3d.rb +150 -0
  481. data/tests/TC_FXVec3f.rb +150 -0
  482. data/tests/TC_FXVec4f.rb +158 -0
  483. data/tests/TC_FXViewport.rb +30 -0
  484. data/tests/TC_FXXBMIcon.rb +15 -0
  485. data/tests/TC_FXXBMImage.rb +15 -0
  486. data/tests/TC_FXXPMIcon.rb +15 -0
  487. data/tests/TC_FXXPMImage.rb +15 -0
  488. data/tests/TC_Misc.rb +157 -0
  489. data/tests/TC_downcast.rb +15 -0
  490. data/tests/TS_All.rb +25 -0
  491. data/tests/blankpage.ps +166 -0
  492. data/tests/howdypage.ps +181 -0
  493. data/tests/stress1.rb +92 -0
  494. data/tests/stress2.rb +51 -0
  495. data/tests/stress3.rb +117 -0
  496. data/tests/testcase.rb +37 -0
  497. metadata +556 -0
data/examples/ratio.rb ADDED
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env ruby
2
+ # ratio.rb
3
+ # Translated from FOX C++ version to Ruby (Dec 2004) by Brett Hallett.
4
+ # Demonstrates the use of the FXSpring method to retain size ratios between widgets when form is resized.
5
+ #
6
+
7
+ require 'fox16'
8
+ require 'fox16/colors'
9
+
10
+ include Fox
11
+
12
+ class MainWindow < FXMainWindow
13
+
14
+ def initialize(app)
15
+ # Initialize base class first
16
+ super(app, 'Ratio', :opts => DECOR_ALL,
17
+ :width => 400, :height => 200,
18
+ :padLeft => 8, :padRight => 8, :padTop => 8, :padBottom =>8,
19
+ :hSpacing => 6, :vSpacing => 6)
20
+
21
+ # Add quit button and connect it to application
22
+ FXButton.new(self, "&Quit", nil, app, FXApp::ID_QUIT,
23
+ :opts => FRAME_RAISED|FRAME_THICK|LAYOUT_SIDE_BOTTOM|LAYOUT_CENTER_X,
24
+ :padLeft => 20, :padRight => 20, :padTop => 2, :padBottom => 2)
25
+
26
+ # Label above it
27
+ FXLabel.new(self,
28
+ "FXSpring can be used to keep widgets at fixed size ratios.\n\nResize the window to see how it behaves!",
29
+ :opts => LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
30
+
31
+ # Layout manager to place the springs
32
+ horz = FXHorizontalFrame.new(self, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y,
33
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0,
34
+ :hSpacing => 0, :vSpacing => 0)
35
+
36
+ # First spring is set to behave normally in Y direction,
37
+ # but to have a ratio 1 for the X direction
38
+ FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 1, :padding => 0) do |spring|
39
+ FXLabel.new(spring, "1", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
40
+ label.backColor = FXColor::Red
41
+ end
42
+ end
43
+
44
+ # Second spring has ratio 2 in the X direction
45
+ FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 2, :padding => 0) do |spring|
46
+ FXLabel.new(spring, "2", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
47
+ label.backColor = FXColor::Green
48
+ end
49
+ end
50
+
51
+ # Third spring has ratio 3 in the X direction
52
+ FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 3, :padding => 0) do |spring|
53
+ puts "pl, pr, pt, pb = #{spring.padLeft}, #{spring.padRight}, #{spring.padTop}, #{spring.padBottom}"
54
+ FXLabel.new(spring, "3", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
55
+ label.backColor = FXColor::Blue
56
+ end
57
+ end
58
+ end
59
+
60
+ def create
61
+ super
62
+ show(PLACEMENT_SCREEN)
63
+ end # create
64
+
65
+ end # class MainWindow
66
+
67
+ if __FILE__ == $0
68
+ # Construct an application
69
+ FXApp.new('Smithy', 'Max') do |theApp|
70
+
71
+ # Construct the main window
72
+ MainWindow.new(theApp)
73
+
74
+ # Create and show the application windows
75
+ theApp.create
76
+
77
+ # Run the application
78
+ theApp.run
79
+ end
80
+ end
@@ -0,0 +1,27 @@
1
+ require 'fox16'
2
+
3
+ include Fox
4
+
5
+ class RulerViewExample < FXMainWindow
6
+ def initialize(app)
7
+ # Initialize base class
8
+ super(app, "Ruler View", :opts => DECOR_ALL, :width => 400, :height => 400)
9
+
10
+ # Construct a ruler view inside
11
+ ruler_view = FXRulerView.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
12
+
13
+ # And put some content inside that
14
+ contents = FXText.new(ruler_view, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
15
+ contents.text = "This is a test."
16
+ end
17
+ end
18
+
19
+ if __FILE__ == $0
20
+ FXApp.new do |app|
21
+ main = RulerViewExample.new(app)
22
+ app.create
23
+ main.show(PLACEMENT_SCREEN)
24
+ app.run
25
+ end
26
+ end
27
+
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fox16'
4
+ require 'fox16/scintilla'
5
+
6
+ include Fox
7
+
8
+ ABOUT_MSG = <<EOM
9
+ The FOX GUI toolkit is developed by Jeroen van der Zijp.
10
+ The Scintilla source code editing component is developed by Neil Hodgson.
11
+ The FXScintilla widget is developed by Gilles Filippini.
12
+ and FXRuby is developed by Lyle Johnson.
13
+ EOM
14
+
15
+ class ScintillaTest < FXMainWindow
16
+
17
+ def initialize(app)
18
+ # Invoke base class initialize method first
19
+ super(app, "Scintilla Test", nil, nil, DECOR_ALL, 0, 0, 800, 600)
20
+
21
+ # Menubar
22
+ menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
23
+
24
+ # Status bar
25
+ FXStatusBar.new(self,
26
+ LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER)
27
+
28
+ # Scintilla widget takes up the rest of the space
29
+ sunkenFrame = FXHorizontalFrame.new(self,
30
+ FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y)
31
+ @scintilla = FXScintilla.new(sunkenFrame, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
32
+
33
+ # File menu
34
+ filemenu = FXMenuPane.new(self)
35
+ FXMenuCommand.new(filemenu, "&Open\tCtl-O\tOpen...").connect(SEL_COMMAND) {
36
+ openDialog = FXFileDialog.new(self, "Open Document")
37
+ openDialog.selectMode = SELECTFILE_EXISTING
38
+ openDialog.patternList = ["All Files (*.*)", "Ruby Files (*.rb)"]
39
+ if openDialog.execute != 0
40
+ loadFile(openDialog.filename)
41
+ end
42
+ }
43
+ FXMenuCommand.new(filemenu, "&Quit\tCtl-Q\tQuit application.", nil,
44
+ getApp(), FXApp::ID_QUIT, 0)
45
+ FXMenuTitle.new(menubar, "&File", nil, filemenu)
46
+
47
+ # Help menu
48
+ helpmenu = FXMenuPane.new(self)
49
+ FXMenuCommand.new(helpmenu, "&About FXRuby...").connect(SEL_COMMAND) {
50
+ FXMessageBox.information(self, MBOX_OK, "About FXRuby", ABOUT_MSG)
51
+ }
52
+ FXMenuTitle.new(menubar, "&Help", nil, helpmenu, LAYOUT_RIGHT)
53
+ end
54
+
55
+ def loadFile(filename)
56
+ getApp().beginWaitCursor do
57
+ text = File.open(filename, "r").read
58
+ @scintilla.setText(text)
59
+ end
60
+ end
61
+
62
+ # Start
63
+ def create
64
+ super
65
+ show(PLACEMENT_SCREEN)
66
+ end
67
+ end
68
+
69
+ if __FILE__ == $0
70
+ # Make application
71
+ application = FXApp.new("ScintillaTest", "FoxTest")
72
+
73
+ # Make window
74
+ ScintillaTest.new(application)
75
+
76
+ # Create app
77
+ application.create
78
+
79
+ # Run
80
+ application.run
81
+ end
@@ -0,0 +1,186 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fox16'
4
+ require 'fox16/responder'
5
+ require 'fox16/colors'
6
+
7
+ include Fox
8
+
9
+ class ScribbleWindow < FXMainWindow
10
+
11
+ include Responder
12
+
13
+ def initialize(app)
14
+ # Call base class initializer first
15
+ super(app, "Scribble Application", nil, nil, DECOR_ALL,
16
+ 0, 0, 800, 600)
17
+
18
+ # Message identifiers for this class
19
+ identifier :ID_CANVAS, :ID_CLEAR
20
+
21
+ # And here's the message map for this class
22
+ FXMAPFUNC(SEL_PAINT, ID_CANVAS, :onPaint)
23
+ FXMAPFUNC(SEL_LEFTBUTTONPRESS, ID_CANVAS, :onMouseDown)
24
+ FXMAPFUNC(SEL_LEFTBUTTONRELEASE, ID_CANVAS, :onMouseUp)
25
+ FXMAPFUNC(SEL_MOTION, ID_CANVAS, :onMouseMove)
26
+ FXMAPFUNC(SEL_COMMAND, ID_CLEAR, :onCmdClear)
27
+ FXMAPFUNC(SEL_UPDATE, ID_CLEAR, :onUpdClear)
28
+
29
+ # Construct a horizontal frame to hold the main window's contents
30
+ @contents = FXHorizontalFrame.new(self,
31
+ LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0)
32
+
33
+ # Left pane contains the canvas
34
+ @canvasFrame = FXVerticalFrame.new(@contents,
35
+ FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
36
+ 0, 0, 0, 0, 10, 10, 10, 10)
37
+
38
+ # Place a label above the canvas
39
+ FXLabel.new(@canvasFrame, "Canvas Frame", nil,
40
+ JUSTIFY_CENTER_X|LAYOUT_FILL_X)
41
+
42
+ # Horizontal divider line
43
+ FXHorizontalSeparator.new(@canvasFrame, SEPARATOR_GROOVE|LAYOUT_FILL_X)
44
+
45
+ # Drawing canvas
46
+ @canvas = FXCanvas.new(@canvasFrame, self, ID_CANVAS,
47
+ LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
48
+
49
+ # Right pane for the buttons
50
+ @buttonFrame = FXVerticalFrame.new(@contents,
51
+ FRAME_SUNKEN|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
52
+ 0, 0, 0, 0, 10, 10, 10, 10)
53
+
54
+ # Label above the buttons
55
+ FXLabel.new(@buttonFrame, "Button Frame", nil,
56
+ JUSTIFY_CENTER_X|LAYOUT_FILL_X)
57
+
58
+ # Horizontal divider line
59
+ FXHorizontalSeparator.new(@buttonFrame,
60
+ SEPARATOR_RIDGE|LAYOUT_FILL_X)
61
+
62
+ # Button to clear the canvas
63
+ FXButton.new(@buttonFrame, "&Clear", nil, self, ID_CLEAR,
64
+ FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
65
+ 0, 0, 0, 0, 10, 10, 5, 5)
66
+
67
+ # Exit button
68
+ FXButton.new(@buttonFrame, "&Exit", nil, app, FXApp::ID_QUIT,
69
+ FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
70
+ 0, 0, 0, 0, 10, 10, 5, 5)
71
+
72
+ # Initialize other member variables
73
+ @drawColor = FXColor::Red
74
+ @mouseDown = false
75
+ @dirty = false
76
+ end
77
+
78
+ # Create and show the main window
79
+ def create
80
+ super # Create the windows
81
+ show(PLACEMENT_SCREEN) # Make the main window appear
82
+ end
83
+
84
+ # Mouse button was pressed somewhere
85
+ def onMouseDown(sender, sel, ptr)
86
+ @canvas.grab
87
+ @mouseDown = true
88
+ return 1
89
+ end
90
+
91
+ # Mouse has moved, so draw a line
92
+ def onMouseMove(sender, sel, event)
93
+ if @mouseDown
94
+ # Get device context for the canvas
95
+ dc = FXDCWindow.new(@canvas)
96
+
97
+ # Set the foreground color for drawing
98
+ dc.setForeground(@drawColor)
99
+
100
+ # Draw a line from the previous mouse coordinates to the current ones
101
+ dc.drawLine(event.last_x, event.last_y, event.win_x, event.win_y)
102
+
103
+ # We have drawn something, so now the canvas is dirty
104
+ @dirty = true
105
+
106
+ # Release the DC immediately
107
+ dc.end
108
+ end
109
+ return 1
110
+ end
111
+
112
+ # Mouse button released
113
+ def onMouseUp(sender, sel, event)
114
+ @canvas.ungrab
115
+ if @mouseDown
116
+ # Get device context for the canvas
117
+ dc = FXDCWindow.new(@canvas)
118
+
119
+ # Set the foreground color for drawing
120
+ dc.setForeground(@drawColor)
121
+
122
+ # Draw a line from the previous mouse coordinates to the current ones
123
+ dc.drawLine(event.last_x, event.last_y, event.win_x, event.win_y)
124
+
125
+ # We have drawn something, so now the canvas is dirty
126
+ @dirty = true
127
+
128
+ # Mouse no longer down
129
+ @mouseDown = false
130
+
131
+ # Release the DC immediately
132
+ dc.end
133
+ end
134
+ return 1
135
+ end
136
+
137
+ # Paint the canvas
138
+ def onPaint(sender, sel, event)
139
+ dc = FXDCWindow.new(@canvas, event)
140
+ dc.setForeground(@canvas.backColor)
141
+ dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
142
+ dc.end
143
+ end
144
+
145
+ # Handle the clear message
146
+ def onCmdClear(sender, sel, ptr)
147
+ dc = FXDCWindow.new(@canvas)
148
+ dc.setForeground(@canvas.backColor)
149
+ dc.fillRectangle(0, 0, @canvas.width, @canvas.height)
150
+ @dirty = false
151
+ dc.end
152
+ return 1
153
+ end
154
+
155
+ # This function handles the update message sent by the Clear button
156
+ # to its target. Every widget in FOX receives a message (SEL_UPDATE)
157
+ # during idle processing, asking it to update itself. For example,
158
+ # buttons could be enabled or disabled as the state of the application
159
+ # changes.
160
+ #
161
+ # In this case, we'll disable the sender (the Clear button) when the
162
+ # canvas has already been cleared (i.e. it's "clean"), and enable it when
163
+ # it has been painted (i.e. it's "dirty").
164
+ #
165
+ def onUpdClear(sender, sel, ptr)
166
+ message = @dirty ? FXWindow::ID_ENABLE : FXWindow::ID_DISABLE
167
+ sender.handle(self, MKUINT(message, SEL_COMMAND), nil)
168
+ return 1
169
+ end
170
+ end
171
+
172
+ def run
173
+ # Construct the application object
174
+ application = FXApp.new('Scribble', 'FoxTest')
175
+
176
+ # Construct the main window
177
+ scribble = ScribbleWindow.new(application)
178
+
179
+ # Create the application
180
+ application.create
181
+
182
+ # Run the application
183
+ application.run
184
+ end
185
+
186
+ run
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fox16'
4
+
5
+ include Fox
6
+
7
+ class ScribbleWindow < FXMainWindow
8
+
9
+ def initialize(app)
10
+ # Call base class initializer first
11
+ super(app, "Scribble Application", :width => 800, :height => 600)
12
+
13
+ # Construct a horizontal frame to hold the main window's contents
14
+ @contents = FXHorizontalFrame.new(self,
15
+ LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
16
+ :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0)
17
+
18
+ # Left pane contains the canvas
19
+ @canvasFrame = FXVerticalFrame.new(@contents,
20
+ FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
21
+ :padLeft => 10, :padRight => 10, :padTop => 10, :padBottom => 10)
22
+
23
+ # Place a label above the canvas
24
+ FXLabel.new(@canvasFrame, "Canvas Frame", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_X)
25
+
26
+ # Horizontal divider line
27
+ FXHorizontalSeparator.new(@canvasFrame, SEPARATOR_GROOVE|LAYOUT_FILL_X)
28
+
29
+ # Drawing canvas
30
+ @canvas = FXCanvas.new(@canvasFrame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
31
+ @canvas.connect(SEL_PAINT) do |sender, sel, event|
32
+ FXDCWindow.new(@canvas, event) do |dc|
33
+ dc.foreground = @canvas.backColor
34
+ dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
35
+ end
36
+ end
37
+ @canvas.connect(SEL_LEFTBUTTONPRESS) do
38
+ @canvas.grab
39
+ @mouseDown = true
40
+ end
41
+ @canvas.connect(SEL_MOTION) do |sender, sel, event|
42
+ if @mouseDown
43
+ # Get device context for the canvas
44
+ dc = FXDCWindow.new(@canvas)
45
+
46
+ # Set the foreground color for drawing
47
+ dc.foreground = @drawColor
48
+
49
+ # Draw a line from the previous mouse coordinates to the current ones
50
+ if @mirrorMode.value
51
+ cW = @canvas.width
52
+ cH = @canvas.height
53
+ dc.drawLine(cW-event.last_x, event.last_y,
54
+ cW-event.win_x, event.win_y)
55
+ dc.drawLine(event.last_x, cH-event.last_y,
56
+ event.win_x, cH-event.win_y)
57
+ dc.drawLine(cW-event.last_x, cH-event.last_y,
58
+ cW-event.win_x, cH-event.win_y)
59
+ end
60
+ dc.drawLine(event.last_x, event.last_y, event.win_x, event.win_y)
61
+
62
+ # We have drawn something, so now the canvas is dirty
63
+ @dirty = true
64
+
65
+ # Release the DC immediately
66
+ dc.end
67
+ end
68
+ end
69
+ @canvas.connect(SEL_LEFTBUTTONRELEASE) do |sender, sel, event|
70
+ @canvas.ungrab
71
+ if @mouseDown
72
+ # Get device context for the canvas
73
+ dc = FXDCWindow.new(@canvas)
74
+
75
+ # Set the foreground color for drawing
76
+ dc.foreground = @drawColor
77
+
78
+ # Draw a line from the previous mouse coordinates to the current ones
79
+ dc.drawLine(event.last_x, event.last_y, event.win_x, event.win_y)
80
+
81
+ # We have drawn something, so now the canvas is dirty
82
+ @dirty = true
83
+
84
+ # Mouse no longer down
85
+ @mouseDown = false
86
+
87
+ # Release this DC immediately
88
+ dc.end
89
+ end
90
+ end
91
+
92
+ # Right pane for the buttons
93
+ @buttonFrame = FXVerticalFrame.new(@contents,
94
+ FRAME_SUNKEN|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
95
+ :padLeft => 10, :padRight => 10, :padTop => 10, :padBottom => 10)
96
+
97
+ # Label above the buttons
98
+ FXLabel.new(@buttonFrame, "Button Frame", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_X)
99
+
100
+ # Horizontal divider line
101
+ FXHorizontalSeparator.new(@buttonFrame, SEPARATOR_RIDGE|LAYOUT_FILL_X)
102
+
103
+ # Enable or disable mirror mode
104
+ @mirrorMode = FXDataTarget.new(false)
105
+ FXCheckButton.new(@buttonFrame, "Mirror", @mirrorMode, FXDataTarget::ID_VALUE, CHECKBUTTON_NORMAL|LAYOUT_FILL_X)
106
+
107
+ # Button to clear the canvas
108
+ clearButton = FXButton.new(@buttonFrame, "&Clear",
109
+ :opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
110
+ :padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
111
+ clearButton.connect(SEL_COMMAND) do
112
+ FXDCWindow.new(@canvas) do |dc|
113
+ dc.foreground = @canvas.backColor
114
+ dc.fillRectangle(0, 0, @canvas.width, @canvas.height)
115
+ @dirty = false
116
+ end
117
+ end
118
+ clearButton.connect(SEL_UPDATE) do |sender, sel, ptr|
119
+ # This procedure handles the update message sent by the Clear button
120
+ # to its target. Every widget in FOX receives a message (SEL_UPDATE)
121
+ # during idle processing, asking it to update itself. For example,
122
+ # buttons could be enabled or disabled as the state of the application
123
+ # changes.
124
+ #
125
+ # In this case, we'll disable the sender (the Clear button) when the
126
+ # canvas has already been cleared (i.e. it's "clean"), and enable it when
127
+ # it has been painted (i.e. it's "dirty").
128
+ message = @dirty ? FXWindow::ID_ENABLE : FXWindow::ID_DISABLE
129
+ sender.handle(self, MKUINT(message, SEL_COMMAND), nil)
130
+ end
131
+
132
+ # Exit button
133
+ FXButton.new(@buttonFrame, "&Exit", nil, app, FXApp::ID_QUIT,
134
+ FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
135
+ :padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
136
+
137
+ # Initialize other member variables
138
+ @drawColor = "red"
139
+ @mouseDown = false
140
+ @dirty = false
141
+ end
142
+
143
+ # Create and show the main window
144
+ def create
145
+ super # Create the windows
146
+ show(PLACEMENT_SCREEN) # Make the main window appear
147
+ end
148
+ end
149
+
150
+ if __FILE__ == $0
151
+ # Construct the application object
152
+ application = FXApp.new('Scribble', 'FoxTest')
153
+
154
+ # Construct the main window
155
+ scribble = ScribbleWindow.new(application)
156
+
157
+ # Create the application
158
+ application.create
159
+
160
+ # Run the application
161
+ application.run
162
+ end