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/examples/ratio.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# ratio.rb
|
3
|
+
# Translated from FOX C++ version to Ruby (Dec 2004) by Brett Hallett.
|
4
|
+
# Demonstrates the use of the FXSpring method to retain size ratios between widgets when form is resized.
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'fox16'
|
8
|
+
require 'fox16/colors'
|
9
|
+
|
10
|
+
include Fox
|
11
|
+
|
12
|
+
class MainWindow < FXMainWindow
|
13
|
+
|
14
|
+
def initialize(app)
|
15
|
+
# Initialize base class first
|
16
|
+
super(app, 'Ratio', :opts => DECOR_ALL,
|
17
|
+
:width => 400, :height => 200,
|
18
|
+
:padLeft => 8, :padRight => 8, :padTop => 8, :padBottom =>8,
|
19
|
+
:hSpacing => 6, :vSpacing => 6)
|
20
|
+
|
21
|
+
# Add quit button and connect it to application
|
22
|
+
FXButton.new(self, "&Quit", nil, app, FXApp::ID_QUIT,
|
23
|
+
:opts => FRAME_RAISED|FRAME_THICK|LAYOUT_SIDE_BOTTOM|LAYOUT_CENTER_X,
|
24
|
+
:padLeft => 20, :padRight => 20, :padTop => 2, :padBottom => 2)
|
25
|
+
|
26
|
+
# Label above it
|
27
|
+
FXLabel.new(self,
|
28
|
+
"FXSpring can be used to keep widgets at fixed size ratios.\n\nResize the window to see how it behaves!",
|
29
|
+
:opts => LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
30
|
+
|
31
|
+
# Layout manager to place the springs
|
32
|
+
horz = FXHorizontalFrame.new(self, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
33
|
+
:padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0,
|
34
|
+
:hSpacing => 0, :vSpacing => 0)
|
35
|
+
|
36
|
+
# First spring is set to behave normally in Y direction,
|
37
|
+
# but to have a ratio 1 for the X direction
|
38
|
+
FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 1, :padding => 0) do |spring|
|
39
|
+
FXLabel.new(spring, "1", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
|
40
|
+
label.backColor = FXColor::Red
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Second spring has ratio 2 in the X direction
|
45
|
+
FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 2, :padding => 0) do |spring|
|
46
|
+
FXLabel.new(spring, "2", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
|
47
|
+
label.backColor = FXColor::Green
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Third spring has ratio 3 in the X direction
|
52
|
+
FXSpring.new(horz, LAYOUT_FILL_X|LAYOUT_FILL_Y, :relw => 3, :padding => 0) do |spring|
|
53
|
+
puts "pl, pr, pt, pb = #{spring.padLeft}, #{spring.padRight}, #{spring.padTop}, #{spring.padBottom}"
|
54
|
+
FXLabel.new(spring, "3", :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y) do |label|
|
55
|
+
label.backColor = FXColor::Blue
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def create
|
61
|
+
super
|
62
|
+
show(PLACEMENT_SCREEN)
|
63
|
+
end # create
|
64
|
+
|
65
|
+
end # class MainWindow
|
66
|
+
|
67
|
+
if __FILE__ == $0
|
68
|
+
# Construct an application
|
69
|
+
FXApp.new('Smithy', 'Max') do |theApp|
|
70
|
+
|
71
|
+
# Construct the main window
|
72
|
+
MainWindow.new(theApp)
|
73
|
+
|
74
|
+
# Create and show the application windows
|
75
|
+
theApp.create
|
76
|
+
|
77
|
+
# Run the application
|
78
|
+
theApp.run
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'fox16'
|
2
|
+
|
3
|
+
include Fox
|
4
|
+
|
5
|
+
class RulerViewExample < FXMainWindow
|
6
|
+
def initialize(app)
|
7
|
+
# Initialize base class
|
8
|
+
super(app, "Ruler View", :opts => DECOR_ALL, :width => 400, :height => 400)
|
9
|
+
|
10
|
+
# Construct a ruler view inside
|
11
|
+
ruler_view = FXRulerView.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
12
|
+
|
13
|
+
# And put some content inside that
|
14
|
+
contents = FXText.new(ruler_view, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
15
|
+
contents.text = "This is a test."
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
if __FILE__ == $0
|
20
|
+
FXApp.new do |app|
|
21
|
+
main = RulerViewExample.new(app)
|
22
|
+
app.create
|
23
|
+
main.show(PLACEMENT_SCREEN)
|
24
|
+
app.run
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fox16'
|
4
|
+
require 'fox16/scintilla'
|
5
|
+
|
6
|
+
include Fox
|
7
|
+
|
8
|
+
ABOUT_MSG = <<EOM
|
9
|
+
The FOX GUI toolkit is developed by Jeroen van der Zijp.
|
10
|
+
The Scintilla source code editing component is developed by Neil Hodgson.
|
11
|
+
The FXScintilla widget is developed by Gilles Filippini.
|
12
|
+
and FXRuby is developed by Lyle Johnson.
|
13
|
+
EOM
|
14
|
+
|
15
|
+
class ScintillaTest < FXMainWindow
|
16
|
+
|
17
|
+
def initialize(app)
|
18
|
+
# Invoke base class initialize method first
|
19
|
+
super(app, "Scintilla Test", nil, nil, DECOR_ALL, 0, 0, 800, 600)
|
20
|
+
|
21
|
+
# Menubar
|
22
|
+
menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
23
|
+
|
24
|
+
# Status bar
|
25
|
+
FXStatusBar.new(self,
|
26
|
+
LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER)
|
27
|
+
|
28
|
+
# Scintilla widget takes up the rest of the space
|
29
|
+
sunkenFrame = FXHorizontalFrame.new(self,
|
30
|
+
FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
31
|
+
@scintilla = FXScintilla.new(sunkenFrame, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
32
|
+
|
33
|
+
# File menu
|
34
|
+
filemenu = FXMenuPane.new(self)
|
35
|
+
FXMenuCommand.new(filemenu, "&Open\tCtl-O\tOpen...").connect(SEL_COMMAND) {
|
36
|
+
openDialog = FXFileDialog.new(self, "Open Document")
|
37
|
+
openDialog.selectMode = SELECTFILE_EXISTING
|
38
|
+
openDialog.patternList = ["All Files (*.*)", "Ruby Files (*.rb)"]
|
39
|
+
if openDialog.execute != 0
|
40
|
+
loadFile(openDialog.filename)
|
41
|
+
end
|
42
|
+
}
|
43
|
+
FXMenuCommand.new(filemenu, "&Quit\tCtl-Q\tQuit application.", nil,
|
44
|
+
getApp(), FXApp::ID_QUIT, 0)
|
45
|
+
FXMenuTitle.new(menubar, "&File", nil, filemenu)
|
46
|
+
|
47
|
+
# Help menu
|
48
|
+
helpmenu = FXMenuPane.new(self)
|
49
|
+
FXMenuCommand.new(helpmenu, "&About FXRuby...").connect(SEL_COMMAND) {
|
50
|
+
FXMessageBox.information(self, MBOX_OK, "About FXRuby", ABOUT_MSG)
|
51
|
+
}
|
52
|
+
FXMenuTitle.new(menubar, "&Help", nil, helpmenu, LAYOUT_RIGHT)
|
53
|
+
end
|
54
|
+
|
55
|
+
def loadFile(filename)
|
56
|
+
getApp().beginWaitCursor do
|
57
|
+
text = File.open(filename, "r").read
|
58
|
+
@scintilla.setText(text)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Start
|
63
|
+
def create
|
64
|
+
super
|
65
|
+
show(PLACEMENT_SCREEN)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
if __FILE__ == $0
|
70
|
+
# Make application
|
71
|
+
application = FXApp.new("ScintillaTest", "FoxTest")
|
72
|
+
|
73
|
+
# Make window
|
74
|
+
ScintillaTest.new(application)
|
75
|
+
|
76
|
+
# Create app
|
77
|
+
application.create
|
78
|
+
|
79
|
+
# Run
|
80
|
+
application.run
|
81
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fox16'
|
4
|
+
require 'fox16/responder'
|
5
|
+
require 'fox16/colors'
|
6
|
+
|
7
|
+
include Fox
|
8
|
+
|
9
|
+
class ScribbleWindow < FXMainWindow
|
10
|
+
|
11
|
+
include Responder
|
12
|
+
|
13
|
+
def initialize(app)
|
14
|
+
# Call base class initializer first
|
15
|
+
super(app, "Scribble Application", nil, nil, DECOR_ALL,
|
16
|
+
0, 0, 800, 600)
|
17
|
+
|
18
|
+
# Message identifiers for this class
|
19
|
+
identifier :ID_CANVAS, :ID_CLEAR
|
20
|
+
|
21
|
+
# And here's the message map for this class
|
22
|
+
FXMAPFUNC(SEL_PAINT, ID_CANVAS, :onPaint)
|
23
|
+
FXMAPFUNC(SEL_LEFTBUTTONPRESS, ID_CANVAS, :onMouseDown)
|
24
|
+
FXMAPFUNC(SEL_LEFTBUTTONRELEASE, ID_CANVAS, :onMouseUp)
|
25
|
+
FXMAPFUNC(SEL_MOTION, ID_CANVAS, :onMouseMove)
|
26
|
+
FXMAPFUNC(SEL_COMMAND, ID_CLEAR, :onCmdClear)
|
27
|
+
FXMAPFUNC(SEL_UPDATE, ID_CLEAR, :onUpdClear)
|
28
|
+
|
29
|
+
# Construct a horizontal frame to hold the main window's contents
|
30
|
+
@contents = FXHorizontalFrame.new(self,
|
31
|
+
LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0)
|
32
|
+
|
33
|
+
# Left pane contains the canvas
|
34
|
+
@canvasFrame = FXVerticalFrame.new(@contents,
|
35
|
+
FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
|
36
|
+
0, 0, 0, 0, 10, 10, 10, 10)
|
37
|
+
|
38
|
+
# Place a label above the canvas
|
39
|
+
FXLabel.new(@canvasFrame, "Canvas Frame", nil,
|
40
|
+
JUSTIFY_CENTER_X|LAYOUT_FILL_X)
|
41
|
+
|
42
|
+
# Horizontal divider line
|
43
|
+
FXHorizontalSeparator.new(@canvasFrame, SEPARATOR_GROOVE|LAYOUT_FILL_X)
|
44
|
+
|
45
|
+
# Drawing canvas
|
46
|
+
@canvas = FXCanvas.new(@canvasFrame, self, ID_CANVAS,
|
47
|
+
LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
|
48
|
+
|
49
|
+
# Right pane for the buttons
|
50
|
+
@buttonFrame = FXVerticalFrame.new(@contents,
|
51
|
+
FRAME_SUNKEN|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
|
52
|
+
0, 0, 0, 0, 10, 10, 10, 10)
|
53
|
+
|
54
|
+
# Label above the buttons
|
55
|
+
FXLabel.new(@buttonFrame, "Button Frame", nil,
|
56
|
+
JUSTIFY_CENTER_X|LAYOUT_FILL_X)
|
57
|
+
|
58
|
+
# Horizontal divider line
|
59
|
+
FXHorizontalSeparator.new(@buttonFrame,
|
60
|
+
SEPARATOR_RIDGE|LAYOUT_FILL_X)
|
61
|
+
|
62
|
+
# Button to clear the canvas
|
63
|
+
FXButton.new(@buttonFrame, "&Clear", nil, self, ID_CLEAR,
|
64
|
+
FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
|
65
|
+
0, 0, 0, 0, 10, 10, 5, 5)
|
66
|
+
|
67
|
+
# Exit button
|
68
|
+
FXButton.new(@buttonFrame, "&Exit", nil, app, FXApp::ID_QUIT,
|
69
|
+
FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
|
70
|
+
0, 0, 0, 0, 10, 10, 5, 5)
|
71
|
+
|
72
|
+
# Initialize other member variables
|
73
|
+
@drawColor = FXColor::Red
|
74
|
+
@mouseDown = false
|
75
|
+
@dirty = false
|
76
|
+
end
|
77
|
+
|
78
|
+
# Create and show the main window
|
79
|
+
def create
|
80
|
+
super # Create the windows
|
81
|
+
show(PLACEMENT_SCREEN) # Make the main window appear
|
82
|
+
end
|
83
|
+
|
84
|
+
# Mouse button was pressed somewhere
|
85
|
+
def onMouseDown(sender, sel, ptr)
|
86
|
+
@canvas.grab
|
87
|
+
@mouseDown = true
|
88
|
+
return 1
|
89
|
+
end
|
90
|
+
|
91
|
+
# Mouse has moved, so draw a line
|
92
|
+
def onMouseMove(sender, sel, event)
|
93
|
+
if @mouseDown
|
94
|
+
# Get device context for the canvas
|
95
|
+
dc = FXDCWindow.new(@canvas)
|
96
|
+
|
97
|
+
# Set the foreground color for drawing
|
98
|
+
dc.setForeground(@drawColor)
|
99
|
+
|
100
|
+
# Draw a line from the previous mouse coordinates to the current ones
|
101
|
+
dc.drawLine(event.last_x, event.last_y, event.win_x, event.win_y)
|
102
|
+
|
103
|
+
# We have drawn something, so now the canvas is dirty
|
104
|
+
@dirty = true
|
105
|
+
|
106
|
+
# Release the DC immediately
|
107
|
+
dc.end
|
108
|
+
end
|
109
|
+
return 1
|
110
|
+
end
|
111
|
+
|
112
|
+
# Mouse button released
|
113
|
+
def onMouseUp(sender, sel, event)
|
114
|
+
@canvas.ungrab
|
115
|
+
if @mouseDown
|
116
|
+
# Get device context for the canvas
|
117
|
+
dc = FXDCWindow.new(@canvas)
|
118
|
+
|
119
|
+
# Set the foreground color for drawing
|
120
|
+
dc.setForeground(@drawColor)
|
121
|
+
|
122
|
+
# Draw a line from the previous mouse coordinates to the current ones
|
123
|
+
dc.drawLine(event.last_x, event.last_y, event.win_x, event.win_y)
|
124
|
+
|
125
|
+
# We have drawn something, so now the canvas is dirty
|
126
|
+
@dirty = true
|
127
|
+
|
128
|
+
# Mouse no longer down
|
129
|
+
@mouseDown = false
|
130
|
+
|
131
|
+
# Release the DC immediately
|
132
|
+
dc.end
|
133
|
+
end
|
134
|
+
return 1
|
135
|
+
end
|
136
|
+
|
137
|
+
# Paint the canvas
|
138
|
+
def onPaint(sender, sel, event)
|
139
|
+
dc = FXDCWindow.new(@canvas, event)
|
140
|
+
dc.setForeground(@canvas.backColor)
|
141
|
+
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
142
|
+
dc.end
|
143
|
+
end
|
144
|
+
|
145
|
+
# Handle the clear message
|
146
|
+
def onCmdClear(sender, sel, ptr)
|
147
|
+
dc = FXDCWindow.new(@canvas)
|
148
|
+
dc.setForeground(@canvas.backColor)
|
149
|
+
dc.fillRectangle(0, 0, @canvas.width, @canvas.height)
|
150
|
+
@dirty = false
|
151
|
+
dc.end
|
152
|
+
return 1
|
153
|
+
end
|
154
|
+
|
155
|
+
# This function handles the update message sent by the Clear button
|
156
|
+
# to its target. Every widget in FOX receives a message (SEL_UPDATE)
|
157
|
+
# during idle processing, asking it to update itself. For example,
|
158
|
+
# buttons could be enabled or disabled as the state of the application
|
159
|
+
# changes.
|
160
|
+
#
|
161
|
+
# In this case, we'll disable the sender (the Clear button) when the
|
162
|
+
# canvas has already been cleared (i.e. it's "clean"), and enable it when
|
163
|
+
# it has been painted (i.e. it's "dirty").
|
164
|
+
#
|
165
|
+
def onUpdClear(sender, sel, ptr)
|
166
|
+
message = @dirty ? FXWindow::ID_ENABLE : FXWindow::ID_DISABLE
|
167
|
+
sender.handle(self, MKUINT(message, SEL_COMMAND), nil)
|
168
|
+
return 1
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def run
|
173
|
+
# Construct the application object
|
174
|
+
application = FXApp.new('Scribble', 'FoxTest')
|
175
|
+
|
176
|
+
# Construct the main window
|
177
|
+
scribble = ScribbleWindow.new(application)
|
178
|
+
|
179
|
+
# Create the application
|
180
|
+
application.create
|
181
|
+
|
182
|
+
# Run the application
|
183
|
+
application.run
|
184
|
+
end
|
185
|
+
|
186
|
+
run
|
@@ -0,0 +1,162 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fox16'
|
4
|
+
|
5
|
+
include Fox
|
6
|
+
|
7
|
+
class ScribbleWindow < FXMainWindow
|
8
|
+
|
9
|
+
def initialize(app)
|
10
|
+
# Call base class initializer first
|
11
|
+
super(app, "Scribble Application", :width => 800, :height => 600)
|
12
|
+
|
13
|
+
# Construct a horizontal frame to hold the main window's contents
|
14
|
+
@contents = FXHorizontalFrame.new(self,
|
15
|
+
LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
|
16
|
+
:padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0)
|
17
|
+
|
18
|
+
# Left pane contains the canvas
|
19
|
+
@canvasFrame = FXVerticalFrame.new(@contents,
|
20
|
+
FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
|
21
|
+
:padLeft => 10, :padRight => 10, :padTop => 10, :padBottom => 10)
|
22
|
+
|
23
|
+
# Place a label above the canvas
|
24
|
+
FXLabel.new(@canvasFrame, "Canvas Frame", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_X)
|
25
|
+
|
26
|
+
# Horizontal divider line
|
27
|
+
FXHorizontalSeparator.new(@canvasFrame, SEPARATOR_GROOVE|LAYOUT_FILL_X)
|
28
|
+
|
29
|
+
# Drawing canvas
|
30
|
+
@canvas = FXCanvas.new(@canvasFrame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
|
31
|
+
@canvas.connect(SEL_PAINT) do |sender, sel, event|
|
32
|
+
FXDCWindow.new(@canvas, event) do |dc|
|
33
|
+
dc.foreground = @canvas.backColor
|
34
|
+
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
@canvas.connect(SEL_LEFTBUTTONPRESS) do
|
38
|
+
@canvas.grab
|
39
|
+
@mouseDown = true
|
40
|
+
end
|
41
|
+
@canvas.connect(SEL_MOTION) do |sender, sel, event|
|
42
|
+
if @mouseDown
|
43
|
+
# Get device context for the canvas
|
44
|
+
dc = FXDCWindow.new(@canvas)
|
45
|
+
|
46
|
+
# Set the foreground color for drawing
|
47
|
+
dc.foreground = @drawColor
|
48
|
+
|
49
|
+
# Draw a line from the previous mouse coordinates to the current ones
|
50
|
+
if @mirrorMode.value
|
51
|
+
cW = @canvas.width
|
52
|
+
cH = @canvas.height
|
53
|
+
dc.drawLine(cW-event.last_x, event.last_y,
|
54
|
+
cW-event.win_x, event.win_y)
|
55
|
+
dc.drawLine(event.last_x, cH-event.last_y,
|
56
|
+
event.win_x, cH-event.win_y)
|
57
|
+
dc.drawLine(cW-event.last_x, cH-event.last_y,
|
58
|
+
cW-event.win_x, cH-event.win_y)
|
59
|
+
end
|
60
|
+
dc.drawLine(event.last_x, event.last_y, event.win_x, event.win_y)
|
61
|
+
|
62
|
+
# We have drawn something, so now the canvas is dirty
|
63
|
+
@dirty = true
|
64
|
+
|
65
|
+
# Release the DC immediately
|
66
|
+
dc.end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
@canvas.connect(SEL_LEFTBUTTONRELEASE) do |sender, sel, event|
|
70
|
+
@canvas.ungrab
|
71
|
+
if @mouseDown
|
72
|
+
# Get device context for the canvas
|
73
|
+
dc = FXDCWindow.new(@canvas)
|
74
|
+
|
75
|
+
# Set the foreground color for drawing
|
76
|
+
dc.foreground = @drawColor
|
77
|
+
|
78
|
+
# Draw a line from the previous mouse coordinates to the current ones
|
79
|
+
dc.drawLine(event.last_x, event.last_y, event.win_x, event.win_y)
|
80
|
+
|
81
|
+
# We have drawn something, so now the canvas is dirty
|
82
|
+
@dirty = true
|
83
|
+
|
84
|
+
# Mouse no longer down
|
85
|
+
@mouseDown = false
|
86
|
+
|
87
|
+
# Release this DC immediately
|
88
|
+
dc.end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Right pane for the buttons
|
93
|
+
@buttonFrame = FXVerticalFrame.new(@contents,
|
94
|
+
FRAME_SUNKEN|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
|
95
|
+
:padLeft => 10, :padRight => 10, :padTop => 10, :padBottom => 10)
|
96
|
+
|
97
|
+
# Label above the buttons
|
98
|
+
FXLabel.new(@buttonFrame, "Button Frame", nil, JUSTIFY_CENTER_X|LAYOUT_FILL_X)
|
99
|
+
|
100
|
+
# Horizontal divider line
|
101
|
+
FXHorizontalSeparator.new(@buttonFrame, SEPARATOR_RIDGE|LAYOUT_FILL_X)
|
102
|
+
|
103
|
+
# Enable or disable mirror mode
|
104
|
+
@mirrorMode = FXDataTarget.new(false)
|
105
|
+
FXCheckButton.new(@buttonFrame, "Mirror", @mirrorMode, FXDataTarget::ID_VALUE, CHECKBUTTON_NORMAL|LAYOUT_FILL_X)
|
106
|
+
|
107
|
+
# Button to clear the canvas
|
108
|
+
clearButton = FXButton.new(@buttonFrame, "&Clear",
|
109
|
+
:opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
|
110
|
+
:padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
|
111
|
+
clearButton.connect(SEL_COMMAND) do
|
112
|
+
FXDCWindow.new(@canvas) do |dc|
|
113
|
+
dc.foreground = @canvas.backColor
|
114
|
+
dc.fillRectangle(0, 0, @canvas.width, @canvas.height)
|
115
|
+
@dirty = false
|
116
|
+
end
|
117
|
+
end
|
118
|
+
clearButton.connect(SEL_UPDATE) do |sender, sel, ptr|
|
119
|
+
# This procedure handles the update message sent by the Clear button
|
120
|
+
# to its target. Every widget in FOX receives a message (SEL_UPDATE)
|
121
|
+
# during idle processing, asking it to update itself. For example,
|
122
|
+
# buttons could be enabled or disabled as the state of the application
|
123
|
+
# changes.
|
124
|
+
#
|
125
|
+
# In this case, we'll disable the sender (the Clear button) when the
|
126
|
+
# canvas has already been cleared (i.e. it's "clean"), and enable it when
|
127
|
+
# it has been painted (i.e. it's "dirty").
|
128
|
+
message = @dirty ? FXWindow::ID_ENABLE : FXWindow::ID_DISABLE
|
129
|
+
sender.handle(self, MKUINT(message, SEL_COMMAND), nil)
|
130
|
+
end
|
131
|
+
|
132
|
+
# Exit button
|
133
|
+
FXButton.new(@buttonFrame, "&Exit", nil, app, FXApp::ID_QUIT,
|
134
|
+
FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
|
135
|
+
:padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
|
136
|
+
|
137
|
+
# Initialize other member variables
|
138
|
+
@drawColor = "red"
|
139
|
+
@mouseDown = false
|
140
|
+
@dirty = false
|
141
|
+
end
|
142
|
+
|
143
|
+
# Create and show the main window
|
144
|
+
def create
|
145
|
+
super # Create the windows
|
146
|
+
show(PLACEMENT_SCREEN) # Make the main window appear
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
if __FILE__ == $0
|
151
|
+
# Construct the application object
|
152
|
+
application = FXApp.new('Scribble', 'FoxTest')
|
153
|
+
|
154
|
+
# Construct the main window
|
155
|
+
scribble = ScribbleWindow.new(application)
|
156
|
+
|
157
|
+
# Create the application
|
158
|
+
application.create
|
159
|
+
|
160
|
+
# Run the application
|
161
|
+
application.run
|
162
|
+
end
|