fxruby 1.6.15-x86-mswin32-60

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 (490) 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 +733 -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/custom_table_item.rb +170 -0
  78. data/examples/datatarget.rb +223 -0
  79. data/examples/dctest.rb +696 -0
  80. data/examples/dialog.rb +143 -0
  81. data/examples/dilbert.rb +66 -0
  82. data/examples/dirlist.rb +63 -0
  83. data/examples/dragdrop.rb +97 -0
  84. data/examples/dragsource.rb +80 -0
  85. data/examples/dropsite.rb +59 -0
  86. data/examples/foursplit.rb +97 -0
  87. data/examples/gltest.rb +330 -0
  88. data/examples/glviewer.rb +576 -0
  89. data/examples/groupbox.rb +392 -0
  90. data/examples/header.rb +149 -0
  91. data/examples/hello.rb +12 -0
  92. data/examples/hello2.rb +51 -0
  93. data/examples/iRAA.rb +153 -0
  94. data/examples/iconlist.rb +92 -0
  95. data/examples/icons/AngryGuyInBunnySuit.ico +0 -0
  96. data/examples/icons/FatBot.ico +0 -0
  97. data/examples/icons/FlippedySwitch.ico +0 -0
  98. data/examples/icons/LeGoon.ico +0 -0
  99. data/examples/icons/Net.ico +0 -0
  100. data/examples/icons/RedMacOS.ico +0 -0
  101. data/examples/icons/SawBlade.ico +0 -0
  102. data/examples/icons/backview.png +0 -0
  103. data/examples/icons/big.png +0 -0
  104. data/examples/icons/bigfolder.png +0 -0
  105. data/examples/icons/bigpenguin.png +0 -0
  106. data/examples/icons/bottomview.png +0 -0
  107. data/examples/icons/camera.png +0 -0
  108. data/examples/icons/capbutt.png +0 -0
  109. data/examples/icons/capnotlast.png +0 -0
  110. data/examples/icons/capproj.png +0 -0
  111. data/examples/icons/capround.png +0 -0
  112. data/examples/icons/colorpal.png +0 -0
  113. data/examples/icons/copy.png +0 -0
  114. data/examples/icons/cut.png +0 -0
  115. data/examples/icons/delimit.png +0 -0
  116. data/examples/icons/dippy.png +0 -0
  117. data/examples/icons/double_dash.png +0 -0
  118. data/examples/icons/filenew.png +0 -0
  119. data/examples/icons/fileopen.png +0 -0
  120. data/examples/icons/filesave.png +0 -0
  121. data/examples/icons/filesaveas.png +0 -0
  122. data/examples/icons/fonts.png +0 -0
  123. data/examples/icons/fox.png +0 -0
  124. data/examples/icons/foxicon.png +0 -0
  125. data/examples/icons/frontview.png +0 -0
  126. data/examples/icons/gem_big.png +0 -0
  127. data/examples/icons/gem_small.png +0 -0
  128. data/examples/icons/hello2.png +0 -0
  129. data/examples/icons/help.png +0 -0
  130. data/examples/icons/indent.png +0 -0
  131. data/examples/icons/jbevel.png +0 -0
  132. data/examples/icons/jmiter.png +0 -0
  133. data/examples/icons/jround.png +0 -0
  134. data/examples/icons/kill.png +0 -0
  135. data/examples/icons/leftview.png +0 -0
  136. data/examples/icons/light.png +0 -0
  137. data/examples/icons/minidoc.png +0 -0
  138. data/examples/icons/minifolder.png +0 -0
  139. data/examples/icons/minifolderopen.png +0 -0
  140. data/examples/icons/newfolder.png +0 -0
  141. data/examples/icons/nolight.png +0 -0
  142. data/examples/icons/onoff_dash.png +0 -0
  143. data/examples/icons/palette.png +0 -0
  144. data/examples/icons/parallel.png +0 -0
  145. data/examples/icons/paste.png +0 -0
  146. data/examples/icons/pattern.png +0 -0
  147. data/examples/icons/penguin.png +0 -0
  148. data/examples/icons/perspective.png +0 -0
  149. data/examples/icons/printicon.png +0 -0
  150. data/examples/icons/prop.png +0 -0
  151. data/examples/icons/redo.png +0 -0
  152. data/examples/icons/rightview.png +0 -0
  153. data/examples/icons/saveas.png +0 -0
  154. data/examples/icons/shutter1.png +0 -0
  155. data/examples/icons/shutter2.png +0 -0
  156. data/examples/icons/small.png +0 -0
  157. data/examples/icons/smoothlight.png +0 -0
  158. data/examples/icons/solid_line.png +0 -0
  159. data/examples/icons/tbuplevel.png +0 -0
  160. data/examples/icons/topview.png +0 -0
  161. data/examples/icons/undo.png +0 -0
  162. data/examples/icons/winapp.png +0 -0
  163. data/examples/icons/zoom.png +0 -0
  164. data/examples/image.rb +279 -0
  165. data/examples/imageviewer.rb +509 -0
  166. data/examples/inputs.rb +83 -0
  167. data/examples/mditest.rb +180 -0
  168. data/examples/pig.rb +77 -0
  169. data/examples/raabrowser.rb +122 -0
  170. data/examples/ratio.rb +80 -0
  171. data/examples/rulerview.rb +27 -0
  172. data/examples/scintilla-test.rb +81 -0
  173. data/examples/scribble-orig.rb +186 -0
  174. data/examples/scribble.rb +162 -0
  175. data/examples/shutter.rb +158 -0
  176. data/examples/splitter.rb +211 -0
  177. data/examples/styledtext.rb +82 -0
  178. data/examples/tabbook.rb +165 -0
  179. data/examples/table.rb +182 -0
  180. data/examples/textedit/commands.rb +114 -0
  181. data/examples/textedit/helpwindow.rb +299 -0
  182. data/examples/textedit/prefdialog.rb +239 -0
  183. data/examples/textedit/textedit.rb +1763 -0
  184. data/examples/unicode.rb +36 -0
  185. data/ext/fox16/fox16.so +0 -0
  186. data/lib/fox16/aliases.rb +5611 -0
  187. data/lib/fox16/calendar.rb +217 -0
  188. data/lib/fox16/chore.rb +105 -0
  189. data/lib/fox16/colors.rb +280 -0
  190. data/lib/fox16/core.rb +681 -0
  191. data/lib/fox16/dict.rb +35 -0
  192. data/lib/fox16/execute_nonmodal.rb +70 -0
  193. data/lib/fox16/glgroup.rb +166 -0
  194. data/lib/fox16/glshapes.rb +456 -0
  195. data/lib/fox16/input.rb +59 -0
  196. data/lib/fox16/irb.rb +178 -0
  197. data/lib/fox16/iterators.rb +420 -0
  198. data/lib/fox16/keys.rb +1374 -0
  199. data/lib/fox16/kwargs.rb +2736 -0
  200. data/lib/fox16/missingdep.rb +14 -0
  201. data/lib/fox16/pseudokeyboard.rb +40 -0
  202. data/lib/fox16/pseudomouse.rb +87 -0
  203. data/lib/fox16/responder.rb +70 -0
  204. data/lib/fox16/responder2.rb +131 -0
  205. data/lib/fox16/scintilla.rb +3641 -0
  206. data/lib/fox16/settings.rb +18 -0
  207. data/lib/fox16/signal.rb +71 -0
  208. data/lib/fox16/splashscreen.rb +82 -0
  209. data/lib/fox16/timeout.rb +136 -0
  210. data/lib/fox16/undolist.rb +455 -0
  211. data/lib/fox16/version.rb +9 -0
  212. data/rdoc-sources/FX4Splitter.rb +156 -0
  213. data/rdoc-sources/FX7Segment.rb +54 -0
  214. data/rdoc-sources/FXAccelTable.rb +102 -0
  215. data/rdoc-sources/FXApp.rb +545 -0
  216. data/rdoc-sources/FXArrowButton.rb +69 -0
  217. data/rdoc-sources/FXBMPIcon.rb +67 -0
  218. data/rdoc-sources/FXBMPImage.rb +30 -0
  219. data/rdoc-sources/FXBitmap.rb +115 -0
  220. data/rdoc-sources/FXBitmapFrame.rb +31 -0
  221. data/rdoc-sources/FXBitmapView.rb +44 -0
  222. data/rdoc-sources/FXButton.rb +59 -0
  223. data/rdoc-sources/FXCURCursor.rb +13 -0
  224. data/rdoc-sources/FXCanvas.rb +18 -0
  225. data/rdoc-sources/FXCheckButton.rb +58 -0
  226. data/rdoc-sources/FXChoiceBox.rb +49 -0
  227. data/rdoc-sources/FXColorBar.rb +48 -0
  228. data/rdoc-sources/FXColorDialog.rb +37 -0
  229. data/rdoc-sources/FXColorList.rb +55 -0
  230. data/rdoc-sources/FXColorRing.rb +49 -0
  231. data/rdoc-sources/FXColorSelector.rb +65 -0
  232. data/rdoc-sources/FXColorWell.rb +65 -0
  233. data/rdoc-sources/FXColorWheel.rb +57 -0
  234. data/rdoc-sources/FXComboBox.rb +214 -0
  235. data/rdoc-sources/FXComposite.rb +34 -0
  236. data/rdoc-sources/FXCursor.rb +67 -0
  237. data/rdoc-sources/FXDC.rb +720 -0
  238. data/rdoc-sources/FXDCPrint.rb +127 -0
  239. data/rdoc-sources/FXDCWindow.rb +33 -0
  240. data/rdoc-sources/FXDataTarget.rb +66 -0
  241. data/rdoc-sources/FXDebugTarget.rb +25 -0
  242. data/rdoc-sources/FXDelegator.rb +23 -0
  243. data/rdoc-sources/FXDial.rb +107 -0
  244. data/rdoc-sources/FXDialogBox.rb +32 -0
  245. data/rdoc-sources/FXDict.rb +79 -0
  246. data/rdoc-sources/FXDirBox.rb +55 -0
  247. data/rdoc-sources/FXDirDialog.rb +47 -0
  248. data/rdoc-sources/FXDirList.rb +149 -0
  249. data/rdoc-sources/FXDirSelector.rb +64 -0
  250. data/rdoc-sources/FXDockBar.rb +151 -0
  251. data/rdoc-sources/FXDockHandler.rb +26 -0
  252. data/rdoc-sources/FXDockSite.rb +104 -0
  253. data/rdoc-sources/FXDockTitle.rb +26 -0
  254. data/rdoc-sources/FXDocument.rb +29 -0
  255. data/rdoc-sources/FXDragCorner.rb +19 -0
  256. data/rdoc-sources/FXDrawable.rb +27 -0
  257. data/rdoc-sources/FXDriveBox.rb +46 -0
  258. data/rdoc-sources/FXExtentd.rb +85 -0
  259. data/rdoc-sources/FXExtentf.rb +85 -0
  260. data/rdoc-sources/FXFileDialog.rb +217 -0
  261. data/rdoc-sources/FXFileDict.rb +131 -0
  262. data/rdoc-sources/FXFileList.rb +208 -0
  263. data/rdoc-sources/FXFileSelector.rb +184 -0
  264. data/rdoc-sources/FXFileStream.rb +27 -0
  265. data/rdoc-sources/FXFoldingList.rb +504 -0
  266. data/rdoc-sources/FXFont.rb +361 -0
  267. data/rdoc-sources/FXFontDialog.rb +14 -0
  268. data/rdoc-sources/FXFontSelector.rb +37 -0
  269. data/rdoc-sources/FXFrame.rb +53 -0
  270. data/rdoc-sources/FXGIFCursor.rb +50 -0
  271. data/rdoc-sources/FXGIFIcon.rb +31 -0
  272. data/rdoc-sources/FXGIFImage.rb +29 -0
  273. data/rdoc-sources/FXGLCanvas.rb +45 -0
  274. data/rdoc-sources/FXGLContext.rb +40 -0
  275. data/rdoc-sources/FXGLObject.rb +75 -0
  276. data/rdoc-sources/FXGLShape.rb +69 -0
  277. data/rdoc-sources/FXGLViewer.rb +332 -0
  278. data/rdoc-sources/FXGLVisual.rb +94 -0
  279. data/rdoc-sources/FXGradientBar.rb +301 -0
  280. data/rdoc-sources/FXGroupBox.rb +36 -0
  281. data/rdoc-sources/FXHeader.rb +411 -0
  282. data/rdoc-sources/FXHorizontalFrame.rb +29 -0
  283. data/rdoc-sources/FXICOIcon.rb +65 -0
  284. data/rdoc-sources/FXICOImage.rb +31 -0
  285. data/rdoc-sources/FXIcon.rb +38 -0
  286. data/rdoc-sources/FXIconDict.rb +48 -0
  287. data/rdoc-sources/FXIconList.rb +450 -0
  288. data/rdoc-sources/FXIconSource.rb +100 -0
  289. data/rdoc-sources/FXId.rb +34 -0
  290. data/rdoc-sources/FXImage.rb +292 -0
  291. data/rdoc-sources/FXImageFrame.rb +36 -0
  292. data/rdoc-sources/FXImageView.rb +35 -0
  293. data/rdoc-sources/FXInputDialog.rb +80 -0
  294. data/rdoc-sources/FXJPGIcon.rb +70 -0
  295. data/rdoc-sources/FXJPGImage.rb +38 -0
  296. data/rdoc-sources/FXKnob.rb +76 -0
  297. data/rdoc-sources/FXLabel.rb +72 -0
  298. data/rdoc-sources/FXList.rb +443 -0
  299. data/rdoc-sources/FXListBox.rb +191 -0
  300. data/rdoc-sources/FXMDIButton.rb +67 -0
  301. data/rdoc-sources/FXMDIChild.rb +155 -0
  302. data/rdoc-sources/FXMDIClient.rb +65 -0
  303. data/rdoc-sources/FXMainWindow.rb +26 -0
  304. data/rdoc-sources/FXMatrix.rb +57 -0
  305. data/rdoc-sources/FXMemoryBuffer.rb +28 -0
  306. data/rdoc-sources/FXMemoryStream.rb +50 -0
  307. data/rdoc-sources/FXMenuBar.rb +23 -0
  308. data/rdoc-sources/FXMenuButton.rb +84 -0
  309. data/rdoc-sources/FXMenuCaption.rb +53 -0
  310. data/rdoc-sources/FXMenuCascade.rb +18 -0
  311. data/rdoc-sources/FXMenuCheck.rb +30 -0
  312. data/rdoc-sources/FXMenuCommand.rb +26 -0
  313. data/rdoc-sources/FXMenuPane.rb +13 -0
  314. data/rdoc-sources/FXMenuRadio.rb +33 -0
  315. data/rdoc-sources/FXMenuSeparator.rb +21 -0
  316. data/rdoc-sources/FXMenuTitle.rb +27 -0
  317. data/rdoc-sources/FXMessageBox.rb +73 -0
  318. data/rdoc-sources/FXObject.rb +28 -0
  319. data/rdoc-sources/FXOptionMenu.rb +83 -0
  320. data/rdoc-sources/FXPCXIcon.rb +63 -0
  321. data/rdoc-sources/FXPCXImage.rb +31 -0
  322. data/rdoc-sources/FXPNGIcon.rb +66 -0
  323. data/rdoc-sources/FXPNGImage.rb +34 -0
  324. data/rdoc-sources/FXPPMIcon.rb +36 -0
  325. data/rdoc-sources/FXPPMImage.rb +31 -0
  326. data/rdoc-sources/FXPacker.rb +63 -0
  327. data/rdoc-sources/FXPicker.rb +27 -0
  328. data/rdoc-sources/FXPopup.rb +53 -0
  329. data/rdoc-sources/FXPrintDialog.rb +36 -0
  330. data/rdoc-sources/FXProgressBar.rb +57 -0
  331. data/rdoc-sources/FXProgressDialog.rb +36 -0
  332. data/rdoc-sources/FXQuatd.rb +164 -0
  333. data/rdoc-sources/FXQuatf.rb +173 -0
  334. data/rdoc-sources/FXRGBIcon.rb +64 -0
  335. data/rdoc-sources/FXRGBImage.rb +31 -0
  336. data/rdoc-sources/FXRadioButton.rb +70 -0
  337. data/rdoc-sources/FXRanged.rb +100 -0
  338. data/rdoc-sources/FXRangef.rb +100 -0
  339. data/rdoc-sources/FXRealSlider.rb +101 -0
  340. data/rdoc-sources/FXRealSpinner.rb +140 -0
  341. data/rdoc-sources/FXRecentFiles.rb +77 -0
  342. data/rdoc-sources/FXRectangle.rb +149 -0
  343. data/rdoc-sources/FXRegion.rb +64 -0
  344. data/rdoc-sources/FXRegistry.rb +56 -0
  345. data/rdoc-sources/FXReplaceDialog.rb +56 -0
  346. data/rdoc-sources/FXRootWindow.rb +17 -0
  347. data/rdoc-sources/FXRuler.rb +130 -0
  348. data/rdoc-sources/FXRulerView.rb +225 -0
  349. data/rdoc-sources/FXScintilla.rb +121 -0
  350. data/rdoc-sources/FXScrollArea.rb +86 -0
  351. data/rdoc-sources/FXScrollBar.rb +107 -0
  352. data/rdoc-sources/FXScrollPane.rb +28 -0
  353. data/rdoc-sources/FXScrollWindow.rb +38 -0
  354. data/rdoc-sources/FXSearchDialog.rb +24 -0
  355. data/rdoc-sources/FXSeparator.rb +74 -0
  356. data/rdoc-sources/FXSettings.rb +248 -0
  357. data/rdoc-sources/FXShell.rb +8 -0
  358. data/rdoc-sources/FXShutter.rb +102 -0
  359. data/rdoc-sources/FXSize.rb +95 -0
  360. data/rdoc-sources/FXSlider.rb +98 -0
  361. data/rdoc-sources/FXSphered.rb +80 -0
  362. data/rdoc-sources/FXSpheref.rb +80 -0
  363. data/rdoc-sources/FXSpinner.rb +136 -0
  364. data/rdoc-sources/FXSplashWindow.rb +27 -0
  365. data/rdoc-sources/FXSplitter.rb +89 -0
  366. data/rdoc-sources/FXSpring.rb +61 -0
  367. data/rdoc-sources/FXStatusBar.rb +42 -0
  368. data/rdoc-sources/FXStatusLine.rb +60 -0
  369. data/rdoc-sources/FXStream.rb +142 -0
  370. data/rdoc-sources/FXStringDict.rb +38 -0
  371. data/rdoc-sources/FXSwitcher.rb +78 -0
  372. data/rdoc-sources/FXTGAIcon.rb +63 -0
  373. data/rdoc-sources/FXTGAImage.rb +31 -0
  374. data/rdoc-sources/FXTIFIcon.rb +70 -0
  375. data/rdoc-sources/FXTIFImage.rb +37 -0
  376. data/rdoc-sources/FXTabBar.rb +80 -0
  377. data/rdoc-sources/FXTabBook.rb +41 -0
  378. data/rdoc-sources/FXTabItem.rb +58 -0
  379. data/rdoc-sources/FXTable.rb +967 -0
  380. data/rdoc-sources/FXText.rb +581 -0
  381. data/rdoc-sources/FXTextField.rb +151 -0
  382. data/rdoc-sources/FXToggleButton.rb +70 -0
  383. data/rdoc-sources/FXToolBar.rb +61 -0
  384. data/rdoc-sources/FXToolBarGrip.rb +50 -0
  385. data/rdoc-sources/FXToolBarShell.rb +44 -0
  386. data/rdoc-sources/FXToolBarTab.rb +74 -0
  387. data/rdoc-sources/FXToolTip.rb +39 -0
  388. data/rdoc-sources/FXTopWindow.rb +163 -0
  389. data/rdoc-sources/FXTranslator.rb +32 -0
  390. data/rdoc-sources/FXTreeList.rb +514 -0
  391. data/rdoc-sources/FXTreeListBox.rb +219 -0
  392. data/rdoc-sources/FXTriStateButton.rb +49 -0
  393. data/rdoc-sources/FXVec2d.rb +96 -0
  394. data/rdoc-sources/FXVec2f.rb +96 -0
  395. data/rdoc-sources/FXVec3d.rb +113 -0
  396. data/rdoc-sources/FXVec3f.rb +113 -0
  397. data/rdoc-sources/FXVec4d.rb +129 -0
  398. data/rdoc-sources/FXVec4f.rb +129 -0
  399. data/rdoc-sources/FXVerticalFrame.rb +29 -0
  400. data/rdoc-sources/FXVisual.rb +79 -0
  401. data/rdoc-sources/FXWindow.rb +725 -0
  402. data/rdoc-sources/FXWizard.rb +59 -0
  403. data/rdoc-sources/FXXBMIcon.rb +37 -0
  404. data/rdoc-sources/FXXBMImage.rb +32 -0
  405. data/rdoc-sources/FXXPMIcon.rb +65 -0
  406. data/rdoc-sources/FXXPMImage.rb +31 -0
  407. data/rdoc-sources/README.rdoc +53 -0
  408. data/rdoc-sources/fxdefs.rb +90 -0
  409. data/tests/README +19 -0
  410. data/tests/TC_FXAccelTable.rb +43 -0
  411. data/tests/TC_FXApp.rb +16 -0
  412. data/tests/TC_FXArc.rb +26 -0
  413. data/tests/TC_FXBMPIcon.rb +15 -0
  414. data/tests/TC_FXBMPImage.rb +15 -0
  415. data/tests/TC_FXButton.rb +72 -0
  416. data/tests/TC_FXCheckButton.rb +57 -0
  417. data/tests/TC_FXComboBox.rb +63 -0
  418. data/tests/TC_FXDC.rb +372 -0
  419. data/tests/TC_FXDCPrint.rb +102 -0
  420. data/tests/TC_FXDCWindow.rb +23 -0
  421. data/tests/TC_FXDataTarget.rb +24 -0
  422. data/tests/TC_FXDialogBox.rb +12 -0
  423. data/tests/TC_FXDirList.rb +30 -0
  424. data/tests/TC_FXFileAssoc.rb +62 -0
  425. data/tests/TC_FXFileStream.rb +90 -0
  426. data/tests/TC_FXFoldingList.rb +32 -0
  427. data/tests/TC_FXFont.rb +69 -0
  428. data/tests/TC_FXFontDesc.rb +58 -0
  429. data/tests/TC_FXGLGroup.rb +32 -0
  430. data/tests/TC_FXGLShape.rb +28 -0
  431. data/tests/TC_FXGLViewer.rb +20 -0
  432. data/tests/TC_FXGradientBar.rb +89 -0
  433. data/tests/TC_FXHeader.rb +82 -0
  434. data/tests/TC_FXHiliteStyle.rb +23 -0
  435. data/tests/TC_FXIconDict.rb +52 -0
  436. data/tests/TC_FXIconList.rb +192 -0
  437. data/tests/TC_FXId.rb +19 -0
  438. data/tests/TC_FXImage.rb +155 -0
  439. data/tests/TC_FXLight.rb +33 -0
  440. data/tests/TC_FXList.rb +116 -0
  441. data/tests/TC_FXListBox.rb +49 -0
  442. data/tests/TC_FXMainWindow.rb +12 -0
  443. data/tests/TC_FXMat4f.rb +228 -0
  444. data/tests/TC_FXMaterial.rb +89 -0
  445. data/tests/TC_FXMemoryStream.rb +97 -0
  446. data/tests/TC_FXMenuCheck.rb +57 -0
  447. data/tests/TC_FXMenuCommand.rb +12 -0
  448. data/tests/TC_FXMenuRadio.rb +57 -0
  449. data/tests/TC_FXMessageBox.rb +25 -0
  450. data/tests/TC_FXPoint.rb +57 -0
  451. data/tests/TC_FXQuatf.rb +77 -0
  452. data/tests/TC_FXRadioButton.rb +57 -0
  453. data/tests/TC_FXRangef.rb +48 -0
  454. data/tests/TC_FXRectangle.rb +88 -0
  455. data/tests/TC_FXRegion.rb +54 -0
  456. data/tests/TC_FXRegistry.rb +27 -0
  457. data/tests/TC_FXScrollArea.rb +28 -0
  458. data/tests/TC_FXScrollWindow.rb +28 -0
  459. data/tests/TC_FXSegment.rb +22 -0
  460. data/tests/TC_FXSettings.rb +34 -0
  461. data/tests/TC_FXShell.rb +26 -0
  462. data/tests/TC_FXSize.rb +54 -0
  463. data/tests/TC_FXStream.rb +11 -0
  464. data/tests/TC_FXTable.rb +368 -0
  465. data/tests/TC_FXTableItem.rb +48 -0
  466. data/tests/TC_FXText.rb +96 -0
  467. data/tests/TC_FXTopWindow.rb +32 -0
  468. data/tests/TC_FXTreeList.rb +100 -0
  469. data/tests/TC_FXTreeListBox.rb +41 -0
  470. data/tests/TC_FXUndoList.rb +43 -0
  471. data/tests/TC_FXVec2d.rb +142 -0
  472. data/tests/TC_FXVec2f.rb +137 -0
  473. data/tests/TC_FXVec3d.rb +150 -0
  474. data/tests/TC_FXVec3f.rb +150 -0
  475. data/tests/TC_FXVec4f.rb +158 -0
  476. data/tests/TC_FXViewport.rb +30 -0
  477. data/tests/TC_FXXBMIcon.rb +15 -0
  478. data/tests/TC_FXXBMImage.rb +15 -0
  479. data/tests/TC_FXXPMIcon.rb +15 -0
  480. data/tests/TC_FXXPMImage.rb +15 -0
  481. data/tests/TC_Misc.rb +157 -0
  482. data/tests/TC_downcast.rb +15 -0
  483. data/tests/TS_All.rb +25 -0
  484. data/tests/blankpage.ps +166 -0
  485. data/tests/howdypage.ps +181 -0
  486. data/tests/stress1.rb +92 -0
  487. data/tests/stress2.rb +51 -0
  488. data/tests/stress3.rb +117 -0
  489. data/tests/testcase.rb +37 -0
  490. metadata +549 -0
@@ -0,0 +1,59 @@
1
+ require 'fox16'
2
+
3
+ include Fox
4
+
5
+ class DropSite < FXMainWindow
6
+
7
+ def initialize(anApp)
8
+ # Initialize base class
9
+ super(anApp, "Drop Site", :opts => DECOR_ALL, :width => 400, :height => 300)
10
+
11
+ # Fill main window with canvas
12
+ @canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
13
+
14
+ # Handle expose events on the canvas
15
+ @canvas.connect(SEL_PAINT) do |sender, sel, event|
16
+ FXDCWindow.new(@canvas, event) do |dc|
17
+ dc.foreground = @canvas.backColor
18
+ dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
19
+ end
20
+ end
21
+
22
+ # Enable canvas for drag-and-drop messages
23
+ @canvas.dropEnable
24
+
25
+ # Handle SEL_DND_MOTION messages from the canvas
26
+ @canvas.connect(SEL_DND_MOTION) do
27
+ @canvas.acceptDrop if @canvas.offeredDNDType?(FROM_DRAGNDROP, FXWindow.colorType)
28
+ end
29
+
30
+ # Handle SEL_DND_DROP message from the canvas
31
+ @canvas.connect(SEL_DND_DROP) do
32
+ # Try to obtain the data as color values first
33
+ data = @canvas.getDNDData(FROM_DRAGNDROP, FXWindow.colorType)
34
+
35
+ # Update canvas background color
36
+ @canvas.backColor = Fox.fxdecodeColorData(data) unless data.nil?
37
+ end
38
+ end
39
+
40
+ def create
41
+ # Create the main window and canvas
42
+ super
43
+
44
+ # Register the drag type for colors
45
+ FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
46
+
47
+ # Show the main window
48
+ show(PLACEMENT_SCREEN)
49
+ end
50
+ end
51
+
52
+ if __FILE__ == $0
53
+ FXApp.new("DropSite", "FXRuby") do |theApp|
54
+ DropSite.new(theApp)
55
+ theApp.create
56
+ theApp.run
57
+ end
58
+ end
59
+
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fox16'
4
+
5
+ include Fox
6
+
7
+ class FourSplitWindow < FXMainWindow
8
+ def initialize(app)
9
+ # Call the base class initialize() first
10
+ super(app, "4-Way Splitter Test", :opts => DECOR_ALL, :width => 800, :height => 600)
11
+
12
+ # Menu bar, along the top
13
+ menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
14
+
15
+ # Status bar, along the bottom
16
+ FXStatusBar.new(self,
17
+ LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER)
18
+
19
+ # The top-level splitter takes up the rest of the space
20
+ splitter = FX4Splitter.new(self,
21
+ LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|FOURSPLITTER_TRACKING)
22
+
23
+ # File menu
24
+ filemenu = FXMenuPane.new(self)
25
+ FXMenuCommand.new(filemenu, "&Quit\tCtl-Q\tQuit the application.", nil,
26
+ getApp(), FXApp::ID_QUIT)
27
+ FXMenuTitle.new(menubar, "&File", nil, filemenu)
28
+
29
+ # Expand menu
30
+ expandmenu = FXMenuPane.new(self)
31
+ FXMenuCommand.new(expandmenu, "All four", nil,
32
+ splitter, FX4Splitter::ID_EXPAND_ALL)
33
+ FXMenuCommand.new(expandmenu, "Top/left", nil,
34
+ splitter, FX4Splitter::ID_EXPAND_TOPLEFT)
35
+ FXMenuCommand.new(expandmenu, "Top/right", nil,
36
+ splitter, FX4Splitter::ID_EXPAND_TOPRIGHT)
37
+ FXMenuCommand.new(expandmenu, "Bottom/left", nil,
38
+ splitter, FX4Splitter::ID_EXPAND_BOTTOMLEFT)
39
+ FXMenuCommand.new(expandmenu, "Bottom/right", nil,
40
+ splitter, FX4Splitter::ID_EXPAND_BOTTOMRIGHT)
41
+ FXMenuTitle.new(menubar, "&Expand", nil, expandmenu)
42
+
43
+ # The 4-splitter accepts exactly four child widgets, and the
44
+ # order in which they are added matters (top left, top right,
45
+ # bottom left and bottom right, in that order). For our case,
46
+ # the first three child widgets are just regular pushbuttons,
47
+ # but the fourth is itself another 4-splitter. There is no
48
+ # restriction on nesting these kinds of widgets.
49
+
50
+ FXButton.new(splitter, "Top &Left\tThis splitter tracks", :opts => FRAME_RAISED|FRAME_THICK)
51
+
52
+ FXButton.new(splitter, "Top &Right\tThis splitter tracks", :opts => FRAME_RAISED|FRAME_THICK)
53
+
54
+ FXButton.new(splitter, "&Bottom Left\tThis splitter tracks", :opts => FRAME_SUNKEN|FRAME_THICK)
55
+
56
+ subsplitter = FX4Splitter.new(splitter, LAYOUT_FILL_X|LAYOUT_FILL_Y)
57
+
58
+ # Create the four children of the sub-splitter...
59
+ FXButton.new(subsplitter, "&Of course\tThis splitter does NOT track") do |theButton|
60
+ theButton.frameStyle = FRAME_SUNKEN|FRAME_THICK
61
+ theButton.backColor = FXRGB(0, 128, 0)
62
+ theButton.textColor = FXRGB(255, 255, 255)
63
+ end
64
+
65
+ button = FXButton.new(subsplitter,
66
+ "the&y CAN\tThis splitter does NOT track", :opts => FRAME_SUNKEN|FRAME_THICK)
67
+ button.backColor = FXRGB(128, 0, 0)
68
+ button.textColor = FXRGB(255, 255, 255)
69
+
70
+ button = FXButton.new(subsplitter,
71
+ "be &NESTED\tThis splitter does NOT track", :opts => FRAME_SUNKEN|FRAME_THICK)
72
+ button.backColor = FXRGB(0, 0, 200)
73
+ button.textColor = FXRGB(255, 255, 255)
74
+
75
+ button = FXButton.new(subsplitter,
76
+ "&arbitrarily!\tThis splitter does NOT track", :opts => FRAME_SUNKEN|FRAME_THICK)
77
+ button.backColor = FXRGB(128, 128, 0)
78
+ button.textColor = FXRGB(255, 255, 255)
79
+
80
+ # Finally, create the tool tip object
81
+ FXToolTip.new(getApp())
82
+ end
83
+
84
+ def create
85
+ super
86
+ show(PLACEMENT_SCREEN)
87
+ end
88
+ end
89
+
90
+ def runme
91
+ application = FXApp.new("FourSplit", "FoxTest")
92
+ FourSplitWindow.new(application)
93
+ application.create
94
+ application.run
95
+ end
96
+
97
+ runme
@@ -0,0 +1,330 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fox16'
4
+ begin
5
+ require 'opengl'
6
+ rescue LoadError
7
+ require 'fox16/missingdep'
8
+ MSG = <<EOM
9
+ Sorry, this example depends on the OpenGL extension. Please
10
+ check the Ruby Application Archives for an appropriate
11
+ download site.
12
+ EOM
13
+ missingDependency(MSG)
14
+ end
15
+
16
+
17
+ include Fox
18
+
19
+ class GLTestWindow < FXMainWindow
20
+
21
+ # How often our timer will fire (in milliseconds)
22
+ TIMER_INTERVAL = 100
23
+
24
+ # Draws a simple box using the given corners
25
+ def drawBox(xmin, ymin, zmin, xmax, ymax, zmax)
26
+ GL.Begin(GL::TRIANGLE_STRIP)
27
+ GL.Normal(0.0, 0.0, -1.0)
28
+ GL.Vertex(xmin, ymin, zmin)
29
+ GL.Vertex(xmin, ymax, zmin)
30
+ GL.Vertex(xmax, ymin, zmin)
31
+ GL.Vertex(xmax, ymax, zmin)
32
+ GL.End()
33
+
34
+ GL.Begin(GL::TRIANGLE_STRIP)
35
+ GL.Normal(1.0, 0.0, 0.0)
36
+ GL.Vertex(xmax, ymin, zmin)
37
+ GL.Vertex(xmax, ymax, zmin)
38
+ GL.Vertex(xmax, ymin, zmax)
39
+ GL.Vertex(xmax, ymax, zmax)
40
+ GL.End()
41
+
42
+ GL.Begin(GL::TRIANGLE_STRIP)
43
+ GL.Normal(0.0, 0.0, 1.0)
44
+ GL.Vertex(xmax, ymin, zmax)
45
+ GL.Vertex(xmax, ymax, zmax)
46
+ GL.Vertex(xmin, ymin, zmax)
47
+ GL.Vertex(xmin, ymax, zmax)
48
+ GL.End()
49
+
50
+ GL.Begin(GL::TRIANGLE_STRIP)
51
+ GL.Normal(-1.0, 0.0, 0.0)
52
+ GL.Vertex(xmin, ymin, zmax)
53
+ GL.Vertex(xmin, ymax, zmax)
54
+ GL.Vertex(xmin, ymin, zmin)
55
+ GL.Vertex(xmin, ymax, zmin)
56
+ GL.End()
57
+
58
+ GL.Begin(GL::TRIANGLE_STRIP)
59
+ GL.Normal(0.0, 1.0, 0.0)
60
+ GL.Vertex(xmin, ymax, zmin)
61
+ GL.Vertex(xmin, ymax, zmax)
62
+ GL.Vertex(xmax, ymax, zmin)
63
+ GL.Vertex(xmax, ymax, zmax)
64
+ GL.End()
65
+
66
+ GL.Begin(GL::TRIANGLE_STRIP)
67
+ GL.Normal(0.0, -1.0, 0.0)
68
+ GL.Vertex(xmax, ymin, zmax)
69
+ GL.Vertex(xmax, ymin, zmin)
70
+ GL.Vertex(xmin, ymin, zmax)
71
+ GL.Vertex(xmin, ymin, zmin)
72
+ GL.End()
73
+ end
74
+
75
+ # Draw the GL scene
76
+ def drawScene
77
+ lightPosition = [15.0, 10.0, 5.0, 1.0]
78
+ lightAmbient = [ 0.1, 0.1, 0.1, 1.0]
79
+ lightDiffuse = [ 0.9, 0.9, 0.9, 1.0]
80
+ redMaterial = [ 1.0, 0.0, 0.0, 1.0]
81
+ blueMaterial = [ 0.0, 0.0, 1.0, 1.0]
82
+
83
+ width = @glcanvas.width.to_f
84
+ height = @glcanvas.height.to_f
85
+ aspect = width/height
86
+
87
+ # Make context current
88
+ @glcanvas.makeCurrent()
89
+
90
+ GL.Viewport(0, 0, @glcanvas.width, @glcanvas.height)
91
+
92
+ GL.ClearColor(1.0, 1.0, 1.0, 1.0)
93
+ GL.Clear(GL::COLOR_BUFFER_BIT|GL::DEPTH_BUFFER_BIT)
94
+ GL.Enable(GL::DEPTH_TEST)
95
+
96
+ GL.Disable(GL::DITHER)
97
+
98
+ GL.MatrixMode(GL::PROJECTION)
99
+ GL.LoadIdentity()
100
+ GLU.Perspective(30.0, aspect, 1.0, 100.0)
101
+
102
+ GL.MatrixMode(GL::MODELVIEW)
103
+ GL.LoadIdentity()
104
+ GLU.LookAt(5.0, 10.0, 15.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
105
+
106
+ GL.ShadeModel(GL::SMOOTH)
107
+ GL.Light(GL::LIGHT0, GL::POSITION, lightPosition)
108
+ GL.Light(GL::LIGHT0, GL::AMBIENT, lightAmbient)
109
+ GL.Light(GL::LIGHT0, GL::DIFFUSE, lightDiffuse)
110
+ GL.Enable(GL::LIGHT0)
111
+ GL.Enable(GL::LIGHTING)
112
+
113
+ GL.Material(GL::FRONT, GL::AMBIENT, blueMaterial)
114
+ GL.Material(GL::FRONT, GL::DIFFUSE, blueMaterial)
115
+
116
+ GL.PushMatrix()
117
+ GL.Rotated(@angle, 0.0, 1.0, 0.0)
118
+ drawBox(-1, -1, -1, 1, 1, 1)
119
+
120
+ GL.Material(GL::FRONT, GL::AMBIENT, redMaterial)
121
+ GL.Material(GL::FRONT, GL::DIFFUSE, redMaterial)
122
+
123
+ GL.PushMatrix()
124
+ GL.Translated(0.0, 1.75, 0.0)
125
+ GL.Rotated(@angle, 0.0, 1.0, 0.0)
126
+ drawBox(-0.5, -0.5, -0.5, 0.5, 0.5, 0.5)
127
+ GL.PopMatrix()
128
+
129
+ GL.PushMatrix()
130
+ GL.Translated(0.0, -1.75, 0.0)
131
+ GL.Rotated(@angle, 0.0, 1.0, 0.0)
132
+ drawBox(-0.5, -0.5, -0.5, 0.5, 0.5, 0.5)
133
+ GL.PopMatrix()
134
+
135
+ GL.PushMatrix()
136
+ GL.Rotated(90.0, 1.0, 0.0, 0.0)
137
+ GL.Translated(0.0, 1.75, 0.0)
138
+ GL.Rotated(@angle, 0.0, 1.0, 0.0)
139
+ drawBox(-0.5,-0.5,-0.5,0.5,0.5,0.5)
140
+ GL.PopMatrix()
141
+
142
+ GL.PushMatrix()
143
+ GL.Rotated(90.0, -1.0, 0.0, 0.0)
144
+ GL.Translated(0.0,1.75,0.0)
145
+ GL.Rotated(@angle, 0.0, 1.0, 0.0)
146
+ drawBox(-0.5,-0.5,-0.5,0.5,0.5,0.5)
147
+ GL.PopMatrix()
148
+
149
+ GL.PushMatrix()
150
+ GL.Rotated(90.0, 0.0, 0.0, 1.0)
151
+ GL.Translated(0.0,1.75,0.0)
152
+ GL.Rotated(@angle, 0.0, 1.0, 0.0)
153
+ drawBox(-0.5,-0.5,-0.5,0.5,0.5,0.5)
154
+ GL.PopMatrix()
155
+
156
+ GL.PushMatrix()
157
+ GL.Rotated(90.0, 0.0, 0.0, -1.0)
158
+ GL.Translated(0.0,1.75,0.0)
159
+ GL.Rotated(@angle, 0.0, 1.0, 0.0)
160
+ drawBox(-0.5,-0.5,-0.5,0.5,0.5,0.5)
161
+ GL.PopMatrix()
162
+
163
+ GL.PopMatrix()
164
+
165
+ # Swap if it is double-buffered
166
+ if @glvisual.isDoubleBuffer
167
+ @glcanvas.swapBuffers
168
+ end
169
+
170
+ # Make context non-current
171
+ @glcanvas.makeNonCurrent
172
+ end
173
+
174
+ def initialize(app)
175
+ # Invoke the base class initializer
176
+ super(app, "OpenGL Test Application", :opts => DECOR_ALL, :width => 800, :height => 600)
177
+
178
+ # Construct the main window elements
179
+ frame = FXHorizontalFrame.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y)
180
+ frame.padLeft, frame.padRight = 0, 0
181
+ frame.padTop, frame.padBottom = 0, 0
182
+
183
+ # Left pane to contain the glcanvas
184
+ glcanvasFrame = FXVerticalFrame.new(frame,
185
+ LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
186
+ glcanvasFrame.padLeft, glcanvasFrame.padRight = 10, 10
187
+ glcanvasFrame.padTop, glcanvasFrame.padBottom = 10, 10
188
+
189
+ # Label above the glcanvas
190
+ FXLabel.new(glcanvasFrame, "OpenGL Canvas Frame", nil,
191
+ JUSTIFY_CENTER_X|LAYOUT_FILL_X)
192
+
193
+ # Horizontal divider line
194
+ FXHorizontalSeparator.new(glcanvasFrame, SEPARATOR_GROOVE|LAYOUT_FILL_X)
195
+
196
+ # Drawing glcanvas
197
+ glpanel = FXVerticalFrame.new(glcanvasFrame, (FRAME_SUNKEN|FRAME_THICK|
198
+ LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT))
199
+ glpanel.padLeft, glpanel.padRight = 0, 0
200
+ glpanel.padTop, glpanel.padBottom = 0, 0
201
+
202
+ # A visual to draw OpenGL
203
+ @glvisual = FXGLVisual.new(getApp(), VISUAL_DOUBLEBUFFER)
204
+
205
+ # Drawing glcanvas
206
+ @glcanvas = FXGLCanvas.new(glpanel, @glvisual, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
207
+ @glcanvas.connect(SEL_PAINT) { drawScene }
208
+ @glcanvas.connect(SEL_CONFIGURE) do
209
+ if @glcanvas.makeCurrent
210
+ GL.Viewport(0, 0, @glcanvas.width, @glcanvas.height)
211
+ @glcanvas.makeNonCurrent
212
+ end
213
+ end
214
+
215
+ # Right pane for the buttons
216
+ buttonFrame = FXVerticalFrame.new(frame, LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
217
+ buttonFrame.padLeft, buttonFrame.padRight = 10, 10
218
+ buttonFrame.padTop, buttonFrame.padBottom = 10, 10
219
+
220
+ # Label above the buttons
221
+ FXLabel.new(buttonFrame, "Button Frame", nil,
222
+ JUSTIFY_CENTER_X|LAYOUT_FILL_X)
223
+
224
+ # Horizontal divider line
225
+ FXHorizontalSeparator.new(buttonFrame, SEPARATOR_RIDGE|LAYOUT_FILL_X)
226
+
227
+ # Spin according to timer
228
+ spinTimerBtn = FXButton.new(buttonFrame, "Spin &Timer\tSpin using interval timers\nNote the app blocks until the interal has elapsed...",nil,nil,0,FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
229
+ spinTimerBtn.padLeft, spinTimerBtn.padRight = 10, 10
230
+ spinTimerBtn.padTop, spinTimerBtn.padBottom = 5, 5
231
+ spinTimerBtn.connect(SEL_COMMAND) do
232
+ @spinning = true
233
+ @timer = getApp().addTimeout(TIMER_INTERVAL, :repeat => true) do
234
+ @angle += 2.0
235
+ if @angle > 360.0
236
+ @angle -= 360.0
237
+ end
238
+ drawScene()
239
+ end
240
+ end
241
+ spinTimerBtn.connect(SEL_UPDATE) do |sender, sel, ptr|
242
+ @spinning ? sender.disable : sender.enable
243
+ end
244
+
245
+ # Spin according to chore
246
+ spinChoreBtn = FXButton.new(buttonFrame,
247
+ "Spin &Chore\tSpin as fast as possible using chores\nNote even though the
248
+ app is very responsive, it never blocks;\nthere is always something to
249
+ do...", :opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
250
+ spinChoreBtn.padLeft, spinChoreBtn.padRight = 10, 10
251
+ spinChoreBtn.padTop, spinChoreBtn.padBottom = 5, 5
252
+ spinChoreBtn.connect(SEL_COMMAND) do
253
+ @spinning = true
254
+ @chore = getApp().addChore(:repeat => true) do
255
+ @angle += 2.0
256
+ if @angle > 360.0
257
+ @angle -= 360.0
258
+ end
259
+ drawScene()
260
+ end
261
+ end
262
+ spinChoreBtn.connect(SEL_UPDATE) do |sender, sel, ptr|
263
+ @spinning ? sender.disable : sender.enable
264
+ end
265
+
266
+ # Stop spinning
267
+ stopBtn = FXButton.new(buttonFrame,
268
+ "&Stop Spin\tStop this mad spinning, I'm getting dizzy",
269
+ :opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
270
+ stopBtn.padLeft, stopBtn.padRight = 10, 10
271
+ stopBtn.padTop, stopBtn.padBottom = 5, 5
272
+ stopBtn.connect(SEL_COMMAND) do
273
+ @spinning = false
274
+ if @timer
275
+ getApp().removeTimeout(@timer)
276
+ @timer = nil
277
+ end
278
+ if @chore
279
+ getApp().removeChore(@chore)
280
+ @chore = nil
281
+ end
282
+ end
283
+ stopBtn.connect(SEL_UPDATE) do |sender, sel, ptr|
284
+ @spinning ? sender.enable : sender.disable
285
+ end
286
+
287
+ # Exit button
288
+ exitBtn = FXButton.new(buttonFrame, "&Exit\tExit the application", nil,
289
+ getApp(), FXApp::ID_QUIT,
290
+ FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT)
291
+ exitBtn.padLeft, exitBtn.padRight = 10, 10
292
+ exitBtn.padTop, exitBtn.padBottom = 5, 5
293
+
294
+ # Make a tooltip
295
+ FXToolTip.new(getApp())
296
+
297
+ # Initialize private variables
298
+ @spinning = false
299
+ @chore = nil
300
+ @timer = nil
301
+ @angle = 0.0
302
+ end
303
+
304
+ # Create and initialize
305
+ def create
306
+ super
307
+ show(PLACEMENT_SCREEN)
308
+ end
309
+ end
310
+
311
+ if __FILE__ == $0
312
+ # Construct the application
313
+ application = FXApp.new("GLTest", "FoxTest")
314
+
315
+ # To ensure that the chores-based spin will run as fast as possible,
316
+ # we can disable the chore in FXRuby's event loop that tries to schedule
317
+ # other threads. This is OK for this program because there aren't any
318
+ # other Ruby threads running.
319
+
320
+ application.disableThreads
321
+
322
+ # Construct the main window
323
+ GLTestWindow.new(application)
324
+
325
+ # Create the app's windows
326
+ application.create
327
+
328
+ # Run the application
329
+ application.run
330
+ end