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.
- data/LICENSE +456 -0
- data/README +39 -0
- data/doc/apes02.html +21 -0
- data/doc/apes03.html +39 -0
- data/doc/book.html +3 -0
- data/doc/build.html +132 -0
- data/doc/ch03s02.html +23 -0
- data/doc/ch03s03.html +52 -0
- data/doc/ch03s04.html +36 -0
- data/doc/ch03s05.html +60 -0
- data/doc/ch04s02.html +71 -0
- data/doc/ch04s03.html +37 -0
- data/doc/ch04s04.html +72 -0
- data/doc/ch05s02.html +260 -0
- data/doc/ch05s03.html +127 -0
- data/doc/changes.html +733 -0
- data/doc/clipboardtut.html +67 -0
- data/doc/differences.html +190 -0
- data/doc/dragdroptut.html +263 -0
- data/doc/events.html +36 -0
- data/doc/examples.html +104 -0
- data/doc/gems.html +73 -0
- data/doc/goals.html +41 -0
- data/doc/images/babelfish.png +0 -0
- data/doc/images/browser.png +0 -0
- data/doc/images/button.png +0 -0
- data/doc/images/call-chain-example.png +0 -0
- data/doc/images/colordialog.png +0 -0
- data/doc/images/datatarget.png +0 -0
- data/doc/images/dialog.png +0 -0
- data/doc/images/dilbert.png +0 -0
- data/doc/images/dirlist.png +0 -0
- data/doc/images/dropsite-droprejected.png +0 -0
- data/doc/images/foursplit.png +0 -0
- data/doc/images/gltest.png +0 -0
- data/doc/images/glviewer.png +0 -0
- data/doc/images/groupbox.png +0 -0
- data/doc/images/header.png +0 -0
- data/doc/images/hello-with-button.png +0 -0
- data/doc/images/hello-with-icon-1.png +0 -0
- data/doc/images/hello-with-icon-2.png +0 -0
- data/doc/images/hello-with-icon-3.png +0 -0
- data/doc/images/hello-with-tooltip.png +0 -0
- data/doc/images/hello-without-button.png +0 -0
- data/doc/images/hello.png +0 -0
- data/doc/images/hello2.png +0 -0
- data/doc/images/iconlist-bigicons.png +0 -0
- data/doc/images/iconlist-details.png +0 -0
- data/doc/images/image.png +0 -0
- data/doc/images/imageviewer.png +0 -0
- data/doc/images/inheritance.png +0 -0
- data/doc/images/mditest.png +0 -0
- data/doc/images/raabrowser.png +0 -0
- data/doc/images/scribble.png +0 -0
- data/doc/images/shutter.png +0 -0
- data/doc/images/splitter.png +0 -0
- data/doc/images/tabbook.png +0 -0
- data/doc/images/table.png +0 -0
- data/doc/images/tutorial1.png +0 -0
- data/doc/implementation.html +16 -0
- data/doc/infosources.html +33 -0
- data/doc/library.html +30 -0
- data/doc/opengl.html +73 -0
- data/doc/pt01.html +3 -0
- data/doc/pt02.html +3 -0
- data/doc/scintilla.html +36 -0
- data/doc/style.css +247 -0
- data/doc/subversion.html +21 -0
- data/doc/tutorial1.html +90 -0
- data/doc/unicode.html +56 -0
- data/examples/RAA.rb +25 -0
- data/examples/README +53 -0
- data/examples/babelfish.rb +72 -0
- data/examples/bounce.rb +159 -0
- data/examples/browser.rb +191 -0
- data/examples/button.rb +168 -0
- data/examples/custom_table_item.rb +170 -0
- data/examples/datatarget.rb +223 -0
- data/examples/dctest.rb +696 -0
- data/examples/dialog.rb +143 -0
- data/examples/dilbert.rb +66 -0
- data/examples/dirlist.rb +63 -0
- data/examples/dragdrop.rb +97 -0
- data/examples/dragsource.rb +80 -0
- data/examples/dropsite.rb +59 -0
- data/examples/foursplit.rb +97 -0
- data/examples/gltest.rb +330 -0
- data/examples/glviewer.rb +576 -0
- data/examples/groupbox.rb +392 -0
- data/examples/header.rb +149 -0
- data/examples/hello.rb +12 -0
- data/examples/hello2.rb +51 -0
- data/examples/iRAA.rb +153 -0
- data/examples/iconlist.rb +92 -0
- data/examples/icons/AngryGuyInBunnySuit.ico +0 -0
- data/examples/icons/FatBot.ico +0 -0
- data/examples/icons/FlippedySwitch.ico +0 -0
- data/examples/icons/LeGoon.ico +0 -0
- data/examples/icons/Net.ico +0 -0
- data/examples/icons/RedMacOS.ico +0 -0
- data/examples/icons/SawBlade.ico +0 -0
- data/examples/icons/backview.png +0 -0
- data/examples/icons/big.png +0 -0
- data/examples/icons/bigfolder.png +0 -0
- data/examples/icons/bigpenguin.png +0 -0
- data/examples/icons/bottomview.png +0 -0
- data/examples/icons/camera.png +0 -0
- data/examples/icons/capbutt.png +0 -0
- data/examples/icons/capnotlast.png +0 -0
- data/examples/icons/capproj.png +0 -0
- data/examples/icons/capround.png +0 -0
- data/examples/icons/colorpal.png +0 -0
- data/examples/icons/copy.png +0 -0
- data/examples/icons/cut.png +0 -0
- data/examples/icons/delimit.png +0 -0
- data/examples/icons/dippy.png +0 -0
- data/examples/icons/double_dash.png +0 -0
- data/examples/icons/filenew.png +0 -0
- data/examples/icons/fileopen.png +0 -0
- data/examples/icons/filesave.png +0 -0
- data/examples/icons/filesaveas.png +0 -0
- data/examples/icons/fonts.png +0 -0
- data/examples/icons/fox.png +0 -0
- data/examples/icons/foxicon.png +0 -0
- data/examples/icons/frontview.png +0 -0
- data/examples/icons/gem_big.png +0 -0
- data/examples/icons/gem_small.png +0 -0
- data/examples/icons/hello2.png +0 -0
- data/examples/icons/help.png +0 -0
- data/examples/icons/indent.png +0 -0
- data/examples/icons/jbevel.png +0 -0
- data/examples/icons/jmiter.png +0 -0
- data/examples/icons/jround.png +0 -0
- data/examples/icons/kill.png +0 -0
- data/examples/icons/leftview.png +0 -0
- data/examples/icons/light.png +0 -0
- data/examples/icons/minidoc.png +0 -0
- data/examples/icons/minifolder.png +0 -0
- data/examples/icons/minifolderopen.png +0 -0
- data/examples/icons/newfolder.png +0 -0
- data/examples/icons/nolight.png +0 -0
- data/examples/icons/onoff_dash.png +0 -0
- data/examples/icons/palette.png +0 -0
- data/examples/icons/parallel.png +0 -0
- data/examples/icons/paste.png +0 -0
- data/examples/icons/pattern.png +0 -0
- data/examples/icons/penguin.png +0 -0
- data/examples/icons/perspective.png +0 -0
- data/examples/icons/printicon.png +0 -0
- data/examples/icons/prop.png +0 -0
- data/examples/icons/redo.png +0 -0
- data/examples/icons/rightview.png +0 -0
- data/examples/icons/saveas.png +0 -0
- data/examples/icons/shutter1.png +0 -0
- data/examples/icons/shutter2.png +0 -0
- data/examples/icons/small.png +0 -0
- data/examples/icons/smoothlight.png +0 -0
- data/examples/icons/solid_line.png +0 -0
- data/examples/icons/tbuplevel.png +0 -0
- data/examples/icons/topview.png +0 -0
- data/examples/icons/undo.png +0 -0
- data/examples/icons/winapp.png +0 -0
- data/examples/icons/zoom.png +0 -0
- data/examples/image.rb +279 -0
- data/examples/imageviewer.rb +509 -0
- data/examples/inputs.rb +83 -0
- data/examples/mditest.rb +180 -0
- data/examples/pig.rb +77 -0
- data/examples/raabrowser.rb +122 -0
- data/examples/ratio.rb +80 -0
- data/examples/rulerview.rb +27 -0
- data/examples/scintilla-test.rb +81 -0
- data/examples/scribble-orig.rb +186 -0
- data/examples/scribble.rb +162 -0
- data/examples/shutter.rb +158 -0
- data/examples/splitter.rb +211 -0
- data/examples/styledtext.rb +82 -0
- data/examples/tabbook.rb +165 -0
- data/examples/table.rb +182 -0
- data/examples/textedit/commands.rb +114 -0
- data/examples/textedit/helpwindow.rb +299 -0
- data/examples/textedit/prefdialog.rb +239 -0
- data/examples/textedit/textedit.rb +1763 -0
- data/examples/unicode.rb +36 -0
- data/ext/fox16/fox16.so +0 -0
- data/lib/fox16/aliases.rb +5611 -0
- data/lib/fox16/calendar.rb +217 -0
- data/lib/fox16/chore.rb +105 -0
- data/lib/fox16/colors.rb +280 -0
- data/lib/fox16/core.rb +681 -0
- data/lib/fox16/dict.rb +35 -0
- data/lib/fox16/execute_nonmodal.rb +70 -0
- data/lib/fox16/glgroup.rb +166 -0
- data/lib/fox16/glshapes.rb +456 -0
- data/lib/fox16/input.rb +59 -0
- data/lib/fox16/irb.rb +178 -0
- data/lib/fox16/iterators.rb +420 -0
- data/lib/fox16/keys.rb +1374 -0
- data/lib/fox16/kwargs.rb +2736 -0
- data/lib/fox16/missingdep.rb +14 -0
- data/lib/fox16/pseudokeyboard.rb +40 -0
- data/lib/fox16/pseudomouse.rb +87 -0
- data/lib/fox16/responder.rb +70 -0
- data/lib/fox16/responder2.rb +131 -0
- data/lib/fox16/scintilla.rb +3641 -0
- data/lib/fox16/settings.rb +18 -0
- data/lib/fox16/signal.rb +71 -0
- data/lib/fox16/splashscreen.rb +82 -0
- data/lib/fox16/timeout.rb +136 -0
- data/lib/fox16/undolist.rb +455 -0
- data/lib/fox16/version.rb +9 -0
- data/rdoc-sources/FX4Splitter.rb +156 -0
- data/rdoc-sources/FX7Segment.rb +54 -0
- data/rdoc-sources/FXAccelTable.rb +102 -0
- data/rdoc-sources/FXApp.rb +545 -0
- data/rdoc-sources/FXArrowButton.rb +69 -0
- data/rdoc-sources/FXBMPIcon.rb +67 -0
- data/rdoc-sources/FXBMPImage.rb +30 -0
- data/rdoc-sources/FXBitmap.rb +115 -0
- data/rdoc-sources/FXBitmapFrame.rb +31 -0
- data/rdoc-sources/FXBitmapView.rb +44 -0
- data/rdoc-sources/FXButton.rb +59 -0
- data/rdoc-sources/FXCURCursor.rb +13 -0
- data/rdoc-sources/FXCanvas.rb +18 -0
- data/rdoc-sources/FXCheckButton.rb +58 -0
- data/rdoc-sources/FXChoiceBox.rb +49 -0
- data/rdoc-sources/FXColorBar.rb +48 -0
- data/rdoc-sources/FXColorDialog.rb +37 -0
- data/rdoc-sources/FXColorList.rb +55 -0
- data/rdoc-sources/FXColorRing.rb +49 -0
- data/rdoc-sources/FXColorSelector.rb +65 -0
- data/rdoc-sources/FXColorWell.rb +65 -0
- data/rdoc-sources/FXColorWheel.rb +57 -0
- data/rdoc-sources/FXComboBox.rb +214 -0
- data/rdoc-sources/FXComposite.rb +34 -0
- data/rdoc-sources/FXCursor.rb +67 -0
- data/rdoc-sources/FXDC.rb +720 -0
- data/rdoc-sources/FXDCPrint.rb +127 -0
- data/rdoc-sources/FXDCWindow.rb +33 -0
- data/rdoc-sources/FXDataTarget.rb +66 -0
- data/rdoc-sources/FXDebugTarget.rb +25 -0
- data/rdoc-sources/FXDelegator.rb +23 -0
- data/rdoc-sources/FXDial.rb +107 -0
- data/rdoc-sources/FXDialogBox.rb +32 -0
- data/rdoc-sources/FXDict.rb +79 -0
- data/rdoc-sources/FXDirBox.rb +55 -0
- data/rdoc-sources/FXDirDialog.rb +47 -0
- data/rdoc-sources/FXDirList.rb +149 -0
- data/rdoc-sources/FXDirSelector.rb +64 -0
- data/rdoc-sources/FXDockBar.rb +151 -0
- data/rdoc-sources/FXDockHandler.rb +26 -0
- data/rdoc-sources/FXDockSite.rb +104 -0
- data/rdoc-sources/FXDockTitle.rb +26 -0
- data/rdoc-sources/FXDocument.rb +29 -0
- data/rdoc-sources/FXDragCorner.rb +19 -0
- data/rdoc-sources/FXDrawable.rb +27 -0
- data/rdoc-sources/FXDriveBox.rb +46 -0
- data/rdoc-sources/FXExtentd.rb +85 -0
- data/rdoc-sources/FXExtentf.rb +85 -0
- data/rdoc-sources/FXFileDialog.rb +217 -0
- data/rdoc-sources/FXFileDict.rb +131 -0
- data/rdoc-sources/FXFileList.rb +208 -0
- data/rdoc-sources/FXFileSelector.rb +184 -0
- data/rdoc-sources/FXFileStream.rb +27 -0
- data/rdoc-sources/FXFoldingList.rb +504 -0
- data/rdoc-sources/FXFont.rb +361 -0
- data/rdoc-sources/FXFontDialog.rb +14 -0
- data/rdoc-sources/FXFontSelector.rb +37 -0
- data/rdoc-sources/FXFrame.rb +53 -0
- data/rdoc-sources/FXGIFCursor.rb +50 -0
- data/rdoc-sources/FXGIFIcon.rb +31 -0
- data/rdoc-sources/FXGIFImage.rb +29 -0
- data/rdoc-sources/FXGLCanvas.rb +45 -0
- data/rdoc-sources/FXGLContext.rb +40 -0
- data/rdoc-sources/FXGLObject.rb +75 -0
- data/rdoc-sources/FXGLShape.rb +69 -0
- data/rdoc-sources/FXGLViewer.rb +332 -0
- data/rdoc-sources/FXGLVisual.rb +94 -0
- data/rdoc-sources/FXGradientBar.rb +301 -0
- data/rdoc-sources/FXGroupBox.rb +36 -0
- data/rdoc-sources/FXHeader.rb +411 -0
- data/rdoc-sources/FXHorizontalFrame.rb +29 -0
- data/rdoc-sources/FXICOIcon.rb +65 -0
- data/rdoc-sources/FXICOImage.rb +31 -0
- data/rdoc-sources/FXIcon.rb +38 -0
- data/rdoc-sources/FXIconDict.rb +48 -0
- data/rdoc-sources/FXIconList.rb +450 -0
- data/rdoc-sources/FXIconSource.rb +100 -0
- data/rdoc-sources/FXId.rb +34 -0
- data/rdoc-sources/FXImage.rb +292 -0
- data/rdoc-sources/FXImageFrame.rb +36 -0
- data/rdoc-sources/FXImageView.rb +35 -0
- data/rdoc-sources/FXInputDialog.rb +80 -0
- data/rdoc-sources/FXJPGIcon.rb +70 -0
- data/rdoc-sources/FXJPGImage.rb +38 -0
- data/rdoc-sources/FXKnob.rb +76 -0
- data/rdoc-sources/FXLabel.rb +72 -0
- data/rdoc-sources/FXList.rb +443 -0
- data/rdoc-sources/FXListBox.rb +191 -0
- data/rdoc-sources/FXMDIButton.rb +67 -0
- data/rdoc-sources/FXMDIChild.rb +155 -0
- data/rdoc-sources/FXMDIClient.rb +65 -0
- data/rdoc-sources/FXMainWindow.rb +26 -0
- data/rdoc-sources/FXMatrix.rb +57 -0
- data/rdoc-sources/FXMemoryBuffer.rb +28 -0
- data/rdoc-sources/FXMemoryStream.rb +50 -0
- data/rdoc-sources/FXMenuBar.rb +23 -0
- data/rdoc-sources/FXMenuButton.rb +84 -0
- data/rdoc-sources/FXMenuCaption.rb +53 -0
- data/rdoc-sources/FXMenuCascade.rb +18 -0
- data/rdoc-sources/FXMenuCheck.rb +30 -0
- data/rdoc-sources/FXMenuCommand.rb +26 -0
- data/rdoc-sources/FXMenuPane.rb +13 -0
- data/rdoc-sources/FXMenuRadio.rb +33 -0
- data/rdoc-sources/FXMenuSeparator.rb +21 -0
- data/rdoc-sources/FXMenuTitle.rb +27 -0
- data/rdoc-sources/FXMessageBox.rb +73 -0
- data/rdoc-sources/FXObject.rb +28 -0
- data/rdoc-sources/FXOptionMenu.rb +83 -0
- data/rdoc-sources/FXPCXIcon.rb +63 -0
- data/rdoc-sources/FXPCXImage.rb +31 -0
- data/rdoc-sources/FXPNGIcon.rb +66 -0
- data/rdoc-sources/FXPNGImage.rb +34 -0
- data/rdoc-sources/FXPPMIcon.rb +36 -0
- data/rdoc-sources/FXPPMImage.rb +31 -0
- data/rdoc-sources/FXPacker.rb +63 -0
- data/rdoc-sources/FXPicker.rb +27 -0
- data/rdoc-sources/FXPopup.rb +53 -0
- data/rdoc-sources/FXPrintDialog.rb +36 -0
- data/rdoc-sources/FXProgressBar.rb +57 -0
- data/rdoc-sources/FXProgressDialog.rb +36 -0
- data/rdoc-sources/FXQuatd.rb +164 -0
- data/rdoc-sources/FXQuatf.rb +173 -0
- data/rdoc-sources/FXRGBIcon.rb +64 -0
- data/rdoc-sources/FXRGBImage.rb +31 -0
- data/rdoc-sources/FXRadioButton.rb +70 -0
- data/rdoc-sources/FXRanged.rb +100 -0
- data/rdoc-sources/FXRangef.rb +100 -0
- data/rdoc-sources/FXRealSlider.rb +101 -0
- data/rdoc-sources/FXRealSpinner.rb +140 -0
- data/rdoc-sources/FXRecentFiles.rb +77 -0
- data/rdoc-sources/FXRectangle.rb +149 -0
- data/rdoc-sources/FXRegion.rb +64 -0
- data/rdoc-sources/FXRegistry.rb +56 -0
- data/rdoc-sources/FXReplaceDialog.rb +56 -0
- data/rdoc-sources/FXRootWindow.rb +17 -0
- data/rdoc-sources/FXRuler.rb +130 -0
- data/rdoc-sources/FXRulerView.rb +225 -0
- data/rdoc-sources/FXScintilla.rb +121 -0
- data/rdoc-sources/FXScrollArea.rb +86 -0
- data/rdoc-sources/FXScrollBar.rb +107 -0
- data/rdoc-sources/FXScrollPane.rb +28 -0
- data/rdoc-sources/FXScrollWindow.rb +38 -0
- data/rdoc-sources/FXSearchDialog.rb +24 -0
- data/rdoc-sources/FXSeparator.rb +74 -0
- data/rdoc-sources/FXSettings.rb +248 -0
- data/rdoc-sources/FXShell.rb +8 -0
- data/rdoc-sources/FXShutter.rb +102 -0
- data/rdoc-sources/FXSize.rb +95 -0
- data/rdoc-sources/FXSlider.rb +98 -0
- data/rdoc-sources/FXSphered.rb +80 -0
- data/rdoc-sources/FXSpheref.rb +80 -0
- data/rdoc-sources/FXSpinner.rb +136 -0
- data/rdoc-sources/FXSplashWindow.rb +27 -0
- data/rdoc-sources/FXSplitter.rb +89 -0
- data/rdoc-sources/FXSpring.rb +61 -0
- data/rdoc-sources/FXStatusBar.rb +42 -0
- data/rdoc-sources/FXStatusLine.rb +60 -0
- data/rdoc-sources/FXStream.rb +142 -0
- data/rdoc-sources/FXStringDict.rb +38 -0
- data/rdoc-sources/FXSwitcher.rb +78 -0
- data/rdoc-sources/FXTGAIcon.rb +63 -0
- data/rdoc-sources/FXTGAImage.rb +31 -0
- data/rdoc-sources/FXTIFIcon.rb +70 -0
- data/rdoc-sources/FXTIFImage.rb +37 -0
- data/rdoc-sources/FXTabBar.rb +80 -0
- data/rdoc-sources/FXTabBook.rb +41 -0
- data/rdoc-sources/FXTabItem.rb +58 -0
- data/rdoc-sources/FXTable.rb +967 -0
- data/rdoc-sources/FXText.rb +581 -0
- data/rdoc-sources/FXTextField.rb +151 -0
- data/rdoc-sources/FXToggleButton.rb +70 -0
- data/rdoc-sources/FXToolBar.rb +61 -0
- data/rdoc-sources/FXToolBarGrip.rb +50 -0
- data/rdoc-sources/FXToolBarShell.rb +44 -0
- data/rdoc-sources/FXToolBarTab.rb +74 -0
- data/rdoc-sources/FXToolTip.rb +39 -0
- data/rdoc-sources/FXTopWindow.rb +163 -0
- data/rdoc-sources/FXTranslator.rb +32 -0
- data/rdoc-sources/FXTreeList.rb +514 -0
- data/rdoc-sources/FXTreeListBox.rb +219 -0
- data/rdoc-sources/FXTriStateButton.rb +49 -0
- data/rdoc-sources/FXVec2d.rb +96 -0
- data/rdoc-sources/FXVec2f.rb +96 -0
- data/rdoc-sources/FXVec3d.rb +113 -0
- data/rdoc-sources/FXVec3f.rb +113 -0
- data/rdoc-sources/FXVec4d.rb +129 -0
- data/rdoc-sources/FXVec4f.rb +129 -0
- data/rdoc-sources/FXVerticalFrame.rb +29 -0
- data/rdoc-sources/FXVisual.rb +79 -0
- data/rdoc-sources/FXWindow.rb +725 -0
- data/rdoc-sources/FXWizard.rb +59 -0
- data/rdoc-sources/FXXBMIcon.rb +37 -0
- data/rdoc-sources/FXXBMImage.rb +32 -0
- data/rdoc-sources/FXXPMIcon.rb +65 -0
- data/rdoc-sources/FXXPMImage.rb +31 -0
- data/rdoc-sources/README.rdoc +53 -0
- data/rdoc-sources/fxdefs.rb +90 -0
- data/tests/README +19 -0
- data/tests/TC_FXAccelTable.rb +43 -0
- data/tests/TC_FXApp.rb +16 -0
- data/tests/TC_FXArc.rb +26 -0
- data/tests/TC_FXBMPIcon.rb +15 -0
- data/tests/TC_FXBMPImage.rb +15 -0
- data/tests/TC_FXButton.rb +72 -0
- data/tests/TC_FXCheckButton.rb +57 -0
- data/tests/TC_FXComboBox.rb +63 -0
- data/tests/TC_FXDC.rb +372 -0
- data/tests/TC_FXDCPrint.rb +102 -0
- data/tests/TC_FXDCWindow.rb +23 -0
- data/tests/TC_FXDataTarget.rb +24 -0
- data/tests/TC_FXDialogBox.rb +12 -0
- data/tests/TC_FXDirList.rb +30 -0
- data/tests/TC_FXFileAssoc.rb +62 -0
- data/tests/TC_FXFileStream.rb +90 -0
- data/tests/TC_FXFoldingList.rb +32 -0
- data/tests/TC_FXFont.rb +69 -0
- data/tests/TC_FXFontDesc.rb +58 -0
- data/tests/TC_FXGLGroup.rb +32 -0
- data/tests/TC_FXGLShape.rb +28 -0
- data/tests/TC_FXGLViewer.rb +20 -0
- data/tests/TC_FXGradientBar.rb +89 -0
- data/tests/TC_FXHeader.rb +82 -0
- data/tests/TC_FXHiliteStyle.rb +23 -0
- data/tests/TC_FXIconDict.rb +52 -0
- data/tests/TC_FXIconList.rb +192 -0
- data/tests/TC_FXId.rb +19 -0
- data/tests/TC_FXImage.rb +155 -0
- data/tests/TC_FXLight.rb +33 -0
- data/tests/TC_FXList.rb +116 -0
- data/tests/TC_FXListBox.rb +49 -0
- data/tests/TC_FXMainWindow.rb +12 -0
- data/tests/TC_FXMat4f.rb +228 -0
- data/tests/TC_FXMaterial.rb +89 -0
- data/tests/TC_FXMemoryStream.rb +97 -0
- data/tests/TC_FXMenuCheck.rb +57 -0
- data/tests/TC_FXMenuCommand.rb +12 -0
- data/tests/TC_FXMenuRadio.rb +57 -0
- data/tests/TC_FXMessageBox.rb +25 -0
- data/tests/TC_FXPoint.rb +57 -0
- data/tests/TC_FXQuatf.rb +77 -0
- data/tests/TC_FXRadioButton.rb +57 -0
- data/tests/TC_FXRangef.rb +48 -0
- data/tests/TC_FXRectangle.rb +88 -0
- data/tests/TC_FXRegion.rb +54 -0
- data/tests/TC_FXRegistry.rb +27 -0
- data/tests/TC_FXScrollArea.rb +28 -0
- data/tests/TC_FXScrollWindow.rb +28 -0
- data/tests/TC_FXSegment.rb +22 -0
- data/tests/TC_FXSettings.rb +34 -0
- data/tests/TC_FXShell.rb +26 -0
- data/tests/TC_FXSize.rb +54 -0
- data/tests/TC_FXStream.rb +11 -0
- data/tests/TC_FXTable.rb +368 -0
- data/tests/TC_FXTableItem.rb +48 -0
- data/tests/TC_FXText.rb +96 -0
- data/tests/TC_FXTopWindow.rb +32 -0
- data/tests/TC_FXTreeList.rb +100 -0
- data/tests/TC_FXTreeListBox.rb +41 -0
- data/tests/TC_FXUndoList.rb +43 -0
- data/tests/TC_FXVec2d.rb +142 -0
- data/tests/TC_FXVec2f.rb +137 -0
- data/tests/TC_FXVec3d.rb +150 -0
- data/tests/TC_FXVec3f.rb +150 -0
- data/tests/TC_FXVec4f.rb +158 -0
- data/tests/TC_FXViewport.rb +30 -0
- data/tests/TC_FXXBMIcon.rb +15 -0
- data/tests/TC_FXXBMImage.rb +15 -0
- data/tests/TC_FXXPMIcon.rb +15 -0
- data/tests/TC_FXXPMImage.rb +15 -0
- data/tests/TC_Misc.rb +157 -0
- data/tests/TC_downcast.rb +15 -0
- data/tests/TS_All.rb +25 -0
- data/tests/blankpage.ps +166 -0
- data/tests/howdypage.ps +181 -0
- data/tests/stress1.rb +92 -0
- data/tests/stress2.rb +51 -0
- data/tests/stress3.rb +117 -0
- data/tests/testcase.rb +37 -0
- metadata +549 -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,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
|