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/lib/fox16/dict.rb ADDED
@@ -0,0 +1,35 @@
1
+ #
2
+ # Adds some methods similar to those for Ruby's Hash class
3
+ # to FOX's FXDict class.
4
+ #
5
+ module Fox
6
+ class FXDict
7
+ #
8
+ # Returns a new array populated with the keys from this dictionary.
9
+ #
10
+ def keys
11
+ ary = []
12
+ each_key { |k| ary << k }
13
+ ary
14
+ end
15
+
16
+ #
17
+ # Iterate over the keys in this dictionary.
18
+ #
19
+ def each_key
20
+ pos = first
21
+ while pos < self.getTotalSize()
22
+ yield key(pos)
23
+ pos = self.next(pos)
24
+ end
25
+ end
26
+
27
+ #
28
+ # Returns +true+ if this dictionary contains no key-value pairs.
29
+ #
30
+ def empty?
31
+ self.size == 0
32
+ end
33
+ end
34
+ end
35
+
@@ -0,0 +1,17 @@
1
+ module Fox
2
+ FXWindow.subclasses.each do |klass|
3
+ klass.send(:alias_method, :create_without_parent_created_check, :create)
4
+ klass.send(:define_method, :create) do
5
+ unless parent.created?
6
+ raise RuntimeError, "trying to create window before creating parent window"
7
+ end
8
+ if owner && !owner.created?
9
+ raise RuntimeError, "trying to create window before creating owner window"
10
+ end
11
+ if visual.nil?
12
+ raise RuntimeError, "trying to create window without a visual"
13
+ end
14
+ create_without_parent_created_check
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,70 @@
1
+ module Fox
2
+ # Module to include in FXDialogBox to provide an easy nonmodal version
3
+ # of execute.
4
+ module FTNonModal
5
+
6
+ def initialize(*args)
7
+ super if defined?(super)
8
+ FXMAPFUNC(SEL_COMMAND, FXDialogBox::ID_CANCEL, :onCmdCancel)
9
+ FXMAPFUNC(SEL_COMMAND, FXDialogBox::ID_ACCEPT, :onCmdAccept)
10
+ end
11
+
12
+ #
13
+ # Creates and shows the dialog, and registers the associated block to be
14
+ # called when the dialog is closed. The block is passed a boolean argument
15
+ # which is true if and only if the dialog was accepted.
16
+ #
17
+ # For example:
18
+ #
19
+ # dialogBox.execute_modal do |accepted|
20
+ # if accepted
21
+ # puts "Dialog accepted"
22
+ # else
23
+ # puts "Dialog cancelled"
24
+ # end
25
+ #
26
+ def execute_modal(placement = PLACEMENT_CURSOR, &block)
27
+ @__FTNonModal_block = block
28
+ execute(placement)
29
+ end
30
+
31
+ #
32
+ # Creates and shows the dialog, and registers the associated block to be
33
+ # called when the dialog is closed. The block is passed a boolean argument
34
+ # which is true if and only if the dialog was accepted.
35
+ #
36
+ # For example:
37
+ #
38
+ # dialogBox.execute_nonmodal do |accepted|
39
+ # if accepted
40
+ # puts "Dialog accepted"
41
+ # else
42
+ # puts "Dialog cancelled"
43
+ # end
44
+ #
45
+ def execute_nonmodal(placement = PLACEMENT_CURSOR, &block)
46
+ @__FTNonModal_block = block
47
+ create
48
+ show placement
49
+ end
50
+
51
+ def onCmdCancel(*args) # :nodoc:
52
+ on_nonmodal_close(false)
53
+ end
54
+
55
+ def onCmdAccept(*args) # :nodoc:
56
+ on_nonmodal_close(true)
57
+ end
58
+
59
+ # Called when dialog is closed, with _accepted_ equal to +true+ if and
60
+ # only if the user accepted the dialog.
61
+ def on_nonmodal_close(accepted)
62
+ @__FTNonModal_block[accepted]
63
+
64
+ ##return 0 -- why isn't this enough to close window?
65
+ ## oh well, let's imitate FXTopWindow:
66
+ getApp().stopModal(self, accepted ? 1 : 0)
67
+ hide()
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,166 @@
1
+ begin
2
+ require 'opengl'
3
+ rescue LoadError
4
+ # Can't use FXGLGroup since it depends on Ruby/OpenGL
5
+ end
6
+
7
+ module Fox
8
+ #
9
+ # A group of OpenGL objects
10
+ #
11
+ class FXGLGroup < FXGLObject
12
+
13
+ include Enumerable
14
+
15
+ FLT_MAX = 1.0e+20
16
+ FLT_MIN = -1.0e+20
17
+
18
+ #
19
+ # Returns an initialized FXGLGroup instance
20
+ #
21
+ def initialize
22
+ super
23
+ @list = []
24
+ end
25
+
26
+ #
27
+ # Return number of objects in this group.
28
+ #
29
+ def size
30
+ @list.size
31
+ end
32
+
33
+ #
34
+ # Return child at position _pos_.
35
+ #
36
+ def [](pos)
37
+ @list[pos]
38
+ end
39
+
40
+ #
41
+ # Set child at position _pos_ to _obj_.
42
+ #
43
+ def []=(pos, obj)
44
+ @list[pos] = obj
45
+ end
46
+
47
+ #
48
+ # Iterate over child objects
49
+ #
50
+ def each_child # :yields: childObject
51
+ @list.each { |child| yield child }
52
+ self
53
+ end
54
+
55
+ alias each each_child
56
+
57
+ #
58
+ # Return bounding box for this group (an FXRangef instance)
59
+ #
60
+ def bounds
61
+ box = nil
62
+ if @list.empty?
63
+ box = FXRangef.new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
64
+ else
65
+ box = FXRangef.new(FLT_MAX, -FLT_MAX, FLT_MAX, -FLT_MAX, FLT_MAX, -FLT_MAX)
66
+ @list.each { |obj| box.include!(obj.bounds) }
67
+ end
68
+ box
69
+ end
70
+
71
+ #
72
+ # Draw this group into _viewer_ (an FXGLViewer instance).
73
+ #
74
+ def draw(viewer)
75
+ @list.each { |obj| obj.draw(viewer) }
76
+ end
77
+
78
+ #
79
+ # Perform hit test in _viewer_ (an FXGLViewer instance).
80
+ #
81
+ def hit(viewer)
82
+ # GL.PushName(0xffffffff)
83
+ GL.PushName(1000000)
84
+ @list.each_with_index do |obj, i|
85
+ GL.LoadName(i)
86
+ obj.hit(viewer)
87
+ end
88
+ GL.PopName
89
+ end
90
+
91
+ #
92
+ # Identify object by means of _path_.
93
+ #
94
+ def identify(path)
95
+ objIndex = path.shift
96
+ @list[objIndex].identify(path)
97
+ end
98
+
99
+ #
100
+ # Return +true+ if group can be dragged.
101
+ #
102
+ def canDrag
103
+ true
104
+ end
105
+
106
+ #
107
+ # Drag group object around in _viewer_ (an FXGLViewer instance),
108
+ # from (_fx_, _fy_) to (_tx_, _ty_).
109
+ #
110
+ def drag(viewer, fx, fy, tx, ty)
111
+ @list.each { |obj| obj.drag(viewer, fx, fy, tx, ty) }
112
+ end
113
+
114
+ #
115
+ # Insert child object (_obj_) at position _pos_.
116
+ #
117
+ def insert(pos, obj)
118
+ raise NotImplementedError
119
+ end
120
+
121
+ #
122
+ # Prepend child object (_obj_).
123
+ #
124
+ def prepend(obj)
125
+ @list.unshift(obj)
126
+ end
127
+
128
+ #
129
+ # Append child object
130
+ #
131
+ def append(obj)
132
+ @list << obj
133
+ end
134
+
135
+ alias << append
136
+
137
+ #
138
+ # Replace child object at position _pos_ with _obj_.
139
+ #
140
+ def replace(pos, obj)
141
+ @list[pos] = obj
142
+ end
143
+
144
+ #
145
+ # If _obj_ is a reference to an FXGLObject in this group, remove the
146
+ # child object from the list. If _obj_ is an integer, remove the child
147
+ # object at that position from the list.
148
+ #
149
+ def remove(obj)
150
+ if obj.is_a? FXGLObject
151
+ @list.delete(obj)
152
+ else
153
+ @list.delete_at(obj)
154
+ end
155
+ end
156
+
157
+ alias erase remove
158
+
159
+ #
160
+ # Remove all children from this group.
161
+ #
162
+ def clear
163
+ @list.clear
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,456 @@
1
+ require 'opengl'
2
+
3
+ module Fox
4
+
5
+ HANDLE_SIZE = 4.0
6
+
7
+ #
8
+ # OpenGL point object
9
+ #
10
+ class FXGLPoint < FXGLObject
11
+
12
+ # Point position, in model coordinates (a 3-element array)
13
+ attr_accessor :pos
14
+
15
+ #
16
+ # Returns an initialized FXGLPoint instance.
17
+ # If no arguments are passed to #new, the initial point position is
18
+ # (0.0, 0.0, 0.0). You can specify a different initial position by
19
+ # passing in the x, y and z coordinates individually:
20
+ #
21
+ # aPoint = FXGLPoint.new(x, y, z)
22
+ #
23
+ # or as a 3-element array:
24
+ #
25
+ # aPoint = FXGLPoint.new([x, y, z])
26
+ #
27
+ def initialize(*args)
28
+ super()
29
+ if args.length == 0
30
+ @pos = [0.0, 0.0, 0.0]
31
+ elsif args.length == 3
32
+ @pos = [args[0], args[1], args[2]]
33
+ else
34
+ @pos = args[0]
35
+ end
36
+ end
37
+
38
+ #
39
+ # Return the bounding box (an FXRangef instance) for this point.
40
+ #
41
+ def bounds
42
+ FXRangef.new(@pos[0], @pos[0], @pos[1], @pos[1], @pos[2], @pos[2])
43
+ end
44
+
45
+ #
46
+ # Draw this point into _viewer_ (an FXGLViewer instance).
47
+ #
48
+ def draw(viewer)
49
+ GL::Color(0.0, 0.0, 1.0)
50
+ GL::PointSize(HANDLE_SIZE)
51
+ GL::Begin(GL::POINTS)
52
+ GL::Vertex(@pos)
53
+ GL::End()
54
+ end
55
+
56
+ #
57
+ # Perform hit test for this point in _viewer_ (an FXGLViewer instance).
58
+ #
59
+ def hit(viewer)
60
+ GL::Begin(GL::POINTS)
61
+ GL::Vertex(@pos)
62
+ GL::End()
63
+ end
64
+ end
65
+
66
+ #
67
+ # OpenGL line object
68
+ #
69
+ class FXGLLine < FXGLObject
70
+
71
+ # Starting point for line [FXGLPoint]
72
+ attr_accessor :fm
73
+
74
+ # End point for line [FXGLPoint]
75
+ attr_accessor :to
76
+
77
+ #
78
+ # Return an initialized FXGLLine instance.
79
+ #
80
+ # If no arguments are passed to #new, the initial starting and ending
81
+ # points for the line are (-0.5, 0.0, 0.0) and (0.5, 0.0, 0.0), respectively.
82
+ # You can specify different initial start and end points by passing in
83
+ # another FXGLLine instance from which to copy the start and end point
84
+ # values, e.g.
85
+ #
86
+ # aLine = FXGLLine.new(anotherLine)
87
+ #
88
+ # or by passing in the x, y and z coordinates individually:
89
+ #
90
+ # aLine = FXGLLine.new(x0, y0, z0, x1, y1, z1)
91
+ #
92
+ def initialize(*args)
93
+ super()
94
+ if args.length == 0
95
+ @fm = FXGLPoint.new(-0.5, 0.0, 0.0)
96
+ @to = FXGLPoint.new( 0.5, 0.0, 0.0)
97
+ elsif args.length == 1
98
+ @fm = args[0].fm
99
+ @to = args[0].to
100
+ else
101
+ @fm = FXGLPoint.new(args[0], args[1], args[2])
102
+ @to = FXGLPoint.new(args[3], args[4], args[5])
103
+ end
104
+ end
105
+
106
+ #
107
+ # Return the bounding box (an FXRangef instance) for this line.
108
+ #
109
+ def bounds
110
+ FXRangef.new([@fm.pos[0], @to.pos[0]].min,
111
+ [@fm.pos[0], @to.pos[0]].max,
112
+ [@fm.pos[1], @to.pos[1]].min,
113
+ [@fm.pos[1], @to.pos[1]].max,
114
+ [@fm.pos[2], @to.pos[2]].min,
115
+ [@fm.pos[2], @to.pos[2]].max)
116
+ end
117
+
118
+ #
119
+ # Draw this line into _viewer_ (an FXGLViewer instance).
120
+ #
121
+ def draw(viewer)
122
+ GL::Color(1.0, 0.0, 0.0)
123
+ GL::PointSize(HANDLE_SIZE)
124
+ GL::Begin(GL::LINES)
125
+ GL::Vertex(@fm.pos)
126
+ GL::Vertex(@to.pos)
127
+ GL::End()
128
+ end
129
+
130
+ #
131
+ # Perform hit-test for this line in _viewer_ (an FXGLViewer instance).
132
+ #
133
+ def hit(viewer)
134
+ GL::Begin(GL::LINES)
135
+ GL::Vertex(@fm.pos)
136
+ GL::Vertex(@to.pos)
137
+ GL::End()
138
+ end
139
+ end
140
+
141
+ #
142
+ # OpenGL cube object
143
+ #
144
+ class FXGLCube < FXGLShape
145
+
146
+ # Cube width [Float]
147
+ attr_accessor :width
148
+
149
+ # Cube height [Float]
150
+ attr_accessor :height
151
+
152
+ # Cube depth [Float]
153
+ attr_accessor :depth
154
+
155
+ #
156
+ # Return an initialized FXGLCube instance.
157
+ #
158
+ # One option is to initialize the cube with a specified origin,
159
+ # width, height and depth:
160
+ #
161
+ # aCube = FXGLCube.new(x, y, z, w, h, d)
162
+ #
163
+ # If left unspecified, the width (_w_), height (_h_) and depth (_d_)
164
+ # default to 1.0.
165
+ #
166
+ # Another option is to initialize the cube with a specified origin,
167
+ # width, height, depth and material:
168
+ #
169
+ # aCube = FXGLCube.new(x, y, z, w, h, d, material)
170
+ #
171
+ # where the _material_ is an FXMaterial instance.
172
+ #
173
+ def initialize(*args)
174
+ if args.length == 7
175
+ super(args[0], args[1], args[2], SHADING_SMOOTH|STYLE_SURFACE,
176
+ args[6], args[6])
177
+ else
178
+ super(args[0], args[1], args[2], SHADING_SMOOTH|STYLE_SURFACE)
179
+ end
180
+ @width = args[3] ? args[3] : 1.0
181
+ @height = args[4] ? args[4] : 1.0
182
+ @depth = args[5] ? args[5] : 1.0
183
+ setRange(FXRangef.new(-0.5*@width, 0.5*@width,
184
+ -0.5*@height, 0.5*@height,
185
+ -0.5*@depth, 0.5*@depth))
186
+ end
187
+
188
+ #
189
+ # Draws this cube into _viewer_ (an FXGLViewer instance).
190
+ #
191
+ def drawshape(viewer)
192
+ xmin, xmax = -0.5*@width, 0.5*@width
193
+ ymin, ymax = -0.5*@height, 0.5*@height
194
+ zmin, zmax = -0.5*@depth, 0.5*@depth
195
+
196
+ # Draw low face
197
+ GL::Begin(GL::TRIANGLE_STRIP)
198
+ GL::Normal(0.0, 0.0, -1.0)
199
+ GL::Vertex(xmin, ymin, zmin)
200
+ GL::Vertex(xmin, ymax, zmin)
201
+ GL::Vertex(xmax, ymin, zmin)
202
+ GL::Vertex(xmax, ymax, zmin)
203
+ GL::End()
204
+
205
+ # Draw east face
206
+ GL::Begin(GL::TRIANGLE_STRIP)
207
+ GL::Normal(1.0, 0.0, 0.0)
208
+ GL::Vertex(xmax, ymin, zmin)
209
+ GL::Vertex(xmax, ymax, zmin)
210
+ GL::Vertex(xmax, ymin, zmax)
211
+ GL::Vertex(xmax, ymax, zmax)
212
+ GL::End()
213
+
214
+ # Draw high face
215
+ GL::Begin(GL::TRIANGLE_STRIP)
216
+ GL::Normal(0.0, 0.0, 1.0)
217
+ GL::Vertex(xmax, ymin, zmax)
218
+ GL::Vertex(xmax, ymax, zmax)
219
+ GL::Vertex(xmin, ymin, zmax)
220
+ GL::Vertex(xmin, ymax, zmax)
221
+ GL::End()
222
+
223
+ # Draw west face
224
+ GL::Begin(GL::TRIANGLE_STRIP)
225
+ GL::Normal(-1.0, 0.0, 0.0)
226
+ GL::Vertex(xmin, ymin, zmax)
227
+ GL::Vertex(xmin, ymax, zmax)
228
+ GL::Vertex(xmin, ymin, zmin)
229
+ GL::Vertex(xmin, ymax, zmin)
230
+ GL::End()
231
+
232
+ # Draw north face
233
+ GL::Begin(GL::TRIANGLE_STRIP)
234
+ GL::Normal(0.0, 1.0, 0.0)
235
+ GL::Vertex(xmin, ymax, zmin)
236
+ GL::Vertex(xmin, ymax, zmax)
237
+ GL::Vertex(xmax, ymax, zmin)
238
+ GL::Vertex(xmax, ymax, zmax)
239
+ GL::End()
240
+
241
+ # Draw south face
242
+ GL::Begin(GL::TRIANGLE_STRIP)
243
+ GL::Normal(0.0, -1.0, 0.0)
244
+ GL::Vertex(xmin, ymin, zmax)
245
+ GL::Vertex(xmin, ymin, zmin)
246
+ GL::Vertex(xmax, ymin, zmax)
247
+ GL::Vertex(xmax, ymin, zmin)
248
+ GL::End()
249
+ end
250
+ end
251
+
252
+ #
253
+ # OpenGL cone object
254
+ #
255
+ class FXGLCone < FXGLShape
256
+ # Cone fidelity
257
+ SLICES_NUMBER = 20
258
+ STACKS_NUMBER = 20
259
+ LOOPS = 4
260
+
261
+ # Cone height [Float]
262
+ attr_accessor :height
263
+
264
+ # Cone base radius [Float]
265
+ attr_accessor :radius
266
+
267
+ # Number of slices (default is 20) [Integer]
268
+ attr_accessor :slices
269
+
270
+ # Number of stacks (default is 20) [Integer]
271
+ attr_accessor :stacks
272
+
273
+ # Number of loops (default is 4) [Integer]
274
+ attr_accessor :loops
275
+
276
+ #
277
+ # Returns an initialized FXGLCone instance.
278
+ #
279
+ # One option is to initialize the cone with a specified origin,
280
+ # height and radius:
281
+ #
282
+ # aCone = FXGLCone.new(x, y, z, h, r)
283
+ #
284
+ # If left unspecified, the height (_h_) and radius (_r_) default to 1.0.
285
+ #
286
+ # Another option is to initialize the cone with a specified origin,
287
+ # height, radius and material:
288
+ #
289
+ # aCone = FXGLCone.new(x, y, z, h, r, material)
290
+ #
291
+ # where the _material_ is an FXMaterial instance.
292
+ #
293
+ def initialize(*args)
294
+ if args.length == 5
295
+ super(args[0], args[1], args[2], SHADING_SMOOTH|STYLE_SURFACE)
296
+ elsif args.length == 6
297
+ super(args[0], args[1], args[2], SHADING_SMOOTH|STYLE_SURFACE,
298
+ args[5], args[5])
299
+ end
300
+ @height = args[3] ? args[3] : 1.0
301
+ @radius = args[4] ? args[4] : 1.0
302
+ @slices = SLICES_NUMBER
303
+ @stacks = STACKS_NUMBER
304
+ @loops = LOOPS
305
+ setRange(FXRangef.new(-@radius, @radius, 0, @height, -@radius, @radius))
306
+ end
307
+
308
+ #
309
+ # Draw this cone into _viewer_ (an FXGLViewer instance).
310
+ #
311
+ def drawshape(viewer)
312
+ quad = GLU::NewQuadric()
313
+ GLU::QuadricDrawStyle(quad, GLU::FILL)
314
+ GL::PushMatrix()
315
+ GL::Rotate(-90, 1, 0, 0)
316
+ GLU::Cylinder(quad, @radius, 0, @height, @slices, @stacks)
317
+ GLU::QuadricOrientation(quad, GLU::INSIDE)
318
+ GLU::Disk(quad, 0, @radius, @slices, @loops)
319
+ GLU::DeleteQuadric(quad)
320
+ GL::PopMatrix()
321
+ end
322
+ end
323
+
324
+ #
325
+ # OpenGL cylinder object
326
+ #
327
+ class FXGLCylinder < FXGLShape
328
+ # Cylinder fidelity
329
+ SLICES_NUMBER = 20
330
+ STACKS_NUMBER = 20
331
+ LOOPS = 4
332
+
333
+ # Cylinder height [Float]
334
+ attr_accessor :height
335
+
336
+ # Cylinder radius [Float]
337
+ attr_accessor :radius
338
+
339
+ # Number of slices (default is 20) [Integer]
340
+ attr_accessor :slices
341
+
342
+ # Number of stacks (default is 20) [Integer]
343
+ attr_accessor :stacks
344
+
345
+ # Number of loops (default is 4) [Integer]
346
+ attr_accessor :loops
347
+
348
+ #
349
+ # Returns an initialized FXGLCylinder instance.
350
+ #
351
+ # One option is to initialize the cylinder with a specified origin,
352
+ # height and radius:
353
+ #
354
+ # aCylinder = FXGLCylinder.new(x, y, z, h, r)
355
+ #
356
+ # If left unspecified, the height (_h_) and radius (_r_) default to 1.0.
357
+ #
358
+ # Another option is to initialize the cylinder with a specified origin,
359
+ # height, radius and material:
360
+ #
361
+ # aCylinder = FXGLCylinder.new(x, y, z, h, r, material)
362
+ #
363
+ # where the _material_ is an FXMaterial instance.
364
+ #
365
+ def initialize(*args)
366
+ if args.length == 5
367
+ super(args[0], args[1], args[2], SHADING_SMOOTH|STYLE_SURFACE)
368
+ else
369
+ super(args[0], args[1], args[2], SHADING_SMOOTH|STYLE_SURFACE,
370
+ args[5], args[5])
371
+ end
372
+ @height = args[3] ? args[3] : 1.0
373
+ @radius = args[4] ? args[4] : 1.0
374
+ @slices = SLICES_NUMBER
375
+ @stacks = STACKS_NUMBER
376
+ @loops = LOOPS
377
+ setRange(FXRangef.new(-@radius, @radius, 0, @height, -@radius, @radius))
378
+ end
379
+
380
+ #
381
+ # Draw this cylinder into _viewer_ (an FXGLViewer instance).
382
+ #
383
+ def drawshape(viewer)
384
+ quad = GLU::NewQuadric()
385
+ GLU::QuadricDrawStyle(quad, GLU::FILL)
386
+ GL::PushMatrix()
387
+ GL::Rotate(-90, 1, 0, 0)
388
+ GLU::Cylinder(quad, @radius, @radius, @height, @slices, @stacks)
389
+ GLU::QuadricOrientation(quad, GLU::INSIDE)
390
+ GLU::Disk(quad, 0, @radius, @slices, @loops)
391
+ GL::Translate(0, 0, @height)
392
+ GLU::QuadricOrientation(quad, GLU::OUTSIDE)
393
+ GLU::Disk(quad, 0, @radius, @slices, @loops)
394
+ GL::PopMatrix()
395
+ GLU::DeleteQuadric(quad)
396
+ end
397
+ end
398
+
399
+ #
400
+ # OpenGL sphere object
401
+ #
402
+ class FXGLSphere < FXGLShape
403
+ # Sphere fidelity
404
+ SLICES_NUMBER = 20
405
+ STACKS_NUMBER = 20
406
+
407
+ # Sphere radius [Float]
408
+ attr_accessor :radius
409
+
410
+ # Number of slices (default is 20) [Integer]
411
+ attr_accessor :slices
412
+
413
+ # Number of stacks (default is 20) [Integer]
414
+ attr_accessor :stacks
415
+
416
+ #
417
+ # Returns an initialized FXGLSphere instance.
418
+ #
419
+ # One option is to initialize the sphere with a specified origin and
420
+ # radius:
421
+ #
422
+ # aSphere = FXGLSphere.new(x, y, z, r)
423
+ #
424
+ # If left unspecified, the radius (_r_) defaults to 1.0.
425
+ #
426
+ # Another option is to initialize the sphere with a specified origin,
427
+ # radius and material:
428
+ #
429
+ # aSphere = FXGLSphere.new(x, y, z, r, material)
430
+ #
431
+ # where the _material_ is an FXMaterial instance.
432
+ #
433
+ def initialize(*args)
434
+ if args.length == 4
435
+ super(args[0], args[1], args[2], SHADING_SMOOTH|STYLE_SURFACE)
436
+ else
437
+ super(args[0], args[1], args[2], SHADING_SMOOTH|STYLE_SURFACE,
438
+ args[4], args[4])
439
+ end
440
+ @radius = args[3] ? args[3] : 1.0
441
+ @slices = SLICES_NUMBER
442
+ @stacks = STACKS_NUMBER
443
+ setRange(FXRangef.new(-@radius, @radius, -@radius, @radius, -@radius, @radius))
444
+ end
445
+
446
+ #
447
+ # Draw this sphere into _viewer_ (an FXGLViewer instance).
448
+ #
449
+ def drawshape(viewer)
450
+ quad = GLU::NewQuadric()
451
+ GLU::QuadricDrawStyle(quad, GLU::FILL)
452
+ GLU::Sphere(quad, @radius, @slices, @stacks)
453
+ GLU::DeleteQuadric(quad)
454
+ end
455
+ end
456
+ end