fxruby 1.6.14-universal-darwin-9

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 (491) 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 +697 -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 +93 -0
  74. data/examples/bounce.rb +159 -0
  75. data/examples/browser.rb +191 -0
  76. data/examples/button.rb +168 -0
  77. data/examples/custom_table_item.rb +170 -0
  78. data/examples/datatarget.rb +223 -0
  79. data/examples/dctest.rb +696 -0
  80. data/examples/dialog.rb +143 -0
  81. data/examples/dilbert.rb +66 -0
  82. data/examples/dirlist.rb +63 -0
  83. data/examples/dragdrop.rb +97 -0
  84. data/examples/dragsource.rb +80 -0
  85. data/examples/dropsite.rb +59 -0
  86. data/examples/foursplit.rb +97 -0
  87. data/examples/gltest.rb +330 -0
  88. data/examples/glviewer.rb +576 -0
  89. data/examples/groupbox.rb +392 -0
  90. data/examples/header.rb +149 -0
  91. data/examples/hello.rb +12 -0
  92. data/examples/hello2.rb +51 -0
  93. data/examples/iRAA.rb +153 -0
  94. data/examples/iconlist.rb +92 -0
  95. data/examples/icons/AngryGuyInBunnySuit.ico +0 -0
  96. data/examples/icons/FatBot.ico +0 -0
  97. data/examples/icons/FlippedySwitch.ico +0 -0
  98. data/examples/icons/LeGoon.ico +0 -0
  99. data/examples/icons/Net.ico +0 -0
  100. data/examples/icons/RedMacOS.ico +0 -0
  101. data/examples/icons/SawBlade.ico +0 -0
  102. data/examples/icons/backview.png +0 -0
  103. data/examples/icons/big.png +0 -0
  104. data/examples/icons/bigfolder.png +0 -0
  105. data/examples/icons/bigpenguin.png +0 -0
  106. data/examples/icons/bottomview.png +0 -0
  107. data/examples/icons/camera.png +0 -0
  108. data/examples/icons/capbutt.png +0 -0
  109. data/examples/icons/capnotlast.png +0 -0
  110. data/examples/icons/capproj.png +0 -0
  111. data/examples/icons/capround.png +0 -0
  112. data/examples/icons/colorpal.png +0 -0
  113. data/examples/icons/copy.png +0 -0
  114. data/examples/icons/cut.png +0 -0
  115. data/examples/icons/delimit.png +0 -0
  116. data/examples/icons/dippy.png +0 -0
  117. data/examples/icons/double_dash.png +0 -0
  118. data/examples/icons/filenew.png +0 -0
  119. data/examples/icons/fileopen.png +0 -0
  120. data/examples/icons/filesave.png +0 -0
  121. data/examples/icons/filesaveas.png +0 -0
  122. data/examples/icons/fonts.png +0 -0
  123. data/examples/icons/fox.png +0 -0
  124. data/examples/icons/foxicon.png +0 -0
  125. data/examples/icons/frontview.png +0 -0
  126. data/examples/icons/gem_big.png +0 -0
  127. data/examples/icons/gem_small.png +0 -0
  128. data/examples/icons/hello2.png +0 -0
  129. data/examples/icons/help.png +0 -0
  130. data/examples/icons/indent.png +0 -0
  131. data/examples/icons/jbevel.png +0 -0
  132. data/examples/icons/jmiter.png +0 -0
  133. data/examples/icons/jround.png +0 -0
  134. data/examples/icons/kill.png +0 -0
  135. data/examples/icons/leftview.png +0 -0
  136. data/examples/icons/light.png +0 -0
  137. data/examples/icons/minidoc.png +0 -0
  138. data/examples/icons/minifolder.png +0 -0
  139. data/examples/icons/minifolderopen.png +0 -0
  140. data/examples/icons/newfolder.png +0 -0
  141. data/examples/icons/nolight.png +0 -0
  142. data/examples/icons/onoff_dash.png +0 -0
  143. data/examples/icons/palette.png +0 -0
  144. data/examples/icons/parallel.png +0 -0
  145. data/examples/icons/paste.png +0 -0
  146. data/examples/icons/pattern.png +0 -0
  147. data/examples/icons/penguin.png +0 -0
  148. data/examples/icons/perspective.png +0 -0
  149. data/examples/icons/printicon.png +0 -0
  150. data/examples/icons/prop.png +0 -0
  151. data/examples/icons/redo.png +0 -0
  152. data/examples/icons/rightview.png +0 -0
  153. data/examples/icons/saveas.png +0 -0
  154. data/examples/icons/shutter1.png +0 -0
  155. data/examples/icons/shutter2.png +0 -0
  156. data/examples/icons/small.png +0 -0
  157. data/examples/icons/smoothlight.png +0 -0
  158. data/examples/icons/solid_line.png +0 -0
  159. data/examples/icons/tbuplevel.png +0 -0
  160. data/examples/icons/topview.png +0 -0
  161. data/examples/icons/undo.png +0 -0
  162. data/examples/icons/winapp.png +0 -0
  163. data/examples/icons/zoom.png +0 -0
  164. data/examples/image.rb +279 -0
  165. data/examples/imageviewer.rb +509 -0
  166. data/examples/inputs.rb +83 -0
  167. data/examples/mditest.rb +180 -0
  168. data/examples/pig.rb +77 -0
  169. data/examples/raabrowser.rb +122 -0
  170. data/examples/ratio.rb +80 -0
  171. data/examples/rulerview.rb +27 -0
  172. data/examples/scintilla-test.rb +81 -0
  173. data/examples/scribble-orig.rb +186 -0
  174. data/examples/scribble.rb +162 -0
  175. data/examples/shutter.rb +158 -0
  176. data/examples/splitter.rb +211 -0
  177. data/examples/styledtext.rb +82 -0
  178. data/examples/tabbook.rb +165 -0
  179. data/examples/table.rb +182 -0
  180. data/examples/textedit/commands.rb +114 -0
  181. data/examples/textedit/helpwindow.rb +299 -0
  182. data/examples/textedit/prefdialog.rb +239 -0
  183. data/examples/textedit/textedit.rb +1763 -0
  184. data/examples/unicode.rb +36 -0
  185. data/ext/fox16/fox16.bundle +0 -0
  186. data/lib/fox16/aliases.rb +5598 -0
  187. data/lib/fox16/calendar.rb +217 -0
  188. data/lib/fox16/chore.rb +105 -0
  189. data/lib/fox16/colors.rb +280 -0
  190. data/lib/fox16/core.rb +681 -0
  191. data/lib/fox16/dict.rb +35 -0
  192. data/lib/fox16/execute_nonmodal.rb +70 -0
  193. data/lib/fox16/glgroup.rb +166 -0
  194. data/lib/fox16/glshapes.rb +456 -0
  195. data/lib/fox16/input.rb +59 -0
  196. data/lib/fox16/irb.rb +178 -0
  197. data/lib/fox16/iterators.rb +371 -0
  198. data/lib/fox16/keys.rb +1374 -0
  199. data/lib/fox16/kwargs.rb +2736 -0
  200. data/lib/fox16/missingdep.rb +14 -0
  201. data/lib/fox16/pseudokeyboard.rb +40 -0
  202. data/lib/fox16/pseudomouse.rb +87 -0
  203. data/lib/fox16/responder.rb +70 -0
  204. data/lib/fox16/responder2.rb +131 -0
  205. data/lib/fox16/scintilla.rb +3641 -0
  206. data/lib/fox16/settings.rb +18 -0
  207. data/lib/fox16/signal.rb +71 -0
  208. data/lib/fox16/splashscreen.rb +82 -0
  209. data/lib/fox16/timeout.rb +136 -0
  210. data/lib/fox16/undolist.rb +455 -0
  211. data/lib/fox16/version.rb +9 -0
  212. data/rdoc-sources/FX4Splitter.rb +156 -0
  213. data/rdoc-sources/FX7Segment.rb +54 -0
  214. data/rdoc-sources/FXAccelTable.rb +102 -0
  215. data/rdoc-sources/FXApp.rb +545 -0
  216. data/rdoc-sources/FXArrowButton.rb +69 -0
  217. data/rdoc-sources/FXBMPIcon.rb +67 -0
  218. data/rdoc-sources/FXBMPImage.rb +30 -0
  219. data/rdoc-sources/FXBitmap.rb +115 -0
  220. data/rdoc-sources/FXBitmapFrame.rb +31 -0
  221. data/rdoc-sources/FXBitmapView.rb +44 -0
  222. data/rdoc-sources/FXButton.rb +59 -0
  223. data/rdoc-sources/FXCURCursor.rb +13 -0
  224. data/rdoc-sources/FXCanvas.rb +18 -0
  225. data/rdoc-sources/FXCheckButton.rb +58 -0
  226. data/rdoc-sources/FXChoiceBox.rb +49 -0
  227. data/rdoc-sources/FXColorBar.rb +48 -0
  228. data/rdoc-sources/FXColorDialog.rb +37 -0
  229. data/rdoc-sources/FXColorList.rb +55 -0
  230. data/rdoc-sources/FXColorRing.rb +49 -0
  231. data/rdoc-sources/FXColorSelector.rb +65 -0
  232. data/rdoc-sources/FXColorWell.rb +65 -0
  233. data/rdoc-sources/FXColorWheel.rb +57 -0
  234. data/rdoc-sources/FXComboBox.rb +211 -0
  235. data/rdoc-sources/FXComposite.rb +34 -0
  236. data/rdoc-sources/FXCursor.rb +67 -0
  237. data/rdoc-sources/FXDC.rb +720 -0
  238. data/rdoc-sources/FXDCPrint.rb +127 -0
  239. data/rdoc-sources/FXDCWindow.rb +33 -0
  240. data/rdoc-sources/FXDataTarget.rb +66 -0
  241. data/rdoc-sources/FXDebugTarget.rb +25 -0
  242. data/rdoc-sources/FXDelegator.rb +23 -0
  243. data/rdoc-sources/FXDial.rb +107 -0
  244. data/rdoc-sources/FXDialogBox.rb +32 -0
  245. data/rdoc-sources/FXDict.rb +79 -0
  246. data/rdoc-sources/FXDirBox.rb +55 -0
  247. data/rdoc-sources/FXDirDialog.rb +47 -0
  248. data/rdoc-sources/FXDirList.rb +149 -0
  249. data/rdoc-sources/FXDirSelector.rb +64 -0
  250. data/rdoc-sources/FXDockBar.rb +151 -0
  251. data/rdoc-sources/FXDockHandler.rb +26 -0
  252. data/rdoc-sources/FXDockSite.rb +104 -0
  253. data/rdoc-sources/FXDockTitle.rb +26 -0
  254. data/rdoc-sources/FXDocument.rb +29 -0
  255. data/rdoc-sources/FXDragCorner.rb +19 -0
  256. data/rdoc-sources/FXDrawable.rb +27 -0
  257. data/rdoc-sources/FXDriveBox.rb +46 -0
  258. data/rdoc-sources/FXExtentd.rb +85 -0
  259. data/rdoc-sources/FXExtentf.rb +85 -0
  260. data/rdoc-sources/FXFileDialog.rb +217 -0
  261. data/rdoc-sources/FXFileDict.rb +131 -0
  262. data/rdoc-sources/FXFileList.rb +208 -0
  263. data/rdoc-sources/FXFileSelector.rb +184 -0
  264. data/rdoc-sources/FXFileStream.rb +27 -0
  265. data/rdoc-sources/FXFoldingList.rb +504 -0
  266. data/rdoc-sources/FXFont.rb +361 -0
  267. data/rdoc-sources/FXFontDialog.rb +14 -0
  268. data/rdoc-sources/FXFontSelector.rb +37 -0
  269. data/rdoc-sources/FXFrame.rb +53 -0
  270. data/rdoc-sources/FXGIFCursor.rb +50 -0
  271. data/rdoc-sources/FXGIFIcon.rb +31 -0
  272. data/rdoc-sources/FXGIFImage.rb +29 -0
  273. data/rdoc-sources/FXGLCanvas.rb +45 -0
  274. data/rdoc-sources/FXGLContext.rb +40 -0
  275. data/rdoc-sources/FXGLObject.rb +75 -0
  276. data/rdoc-sources/FXGLShape.rb +69 -0
  277. data/rdoc-sources/FXGLViewer.rb +332 -0
  278. data/rdoc-sources/FXGLVisual.rb +94 -0
  279. data/rdoc-sources/FXGradientBar.rb +301 -0
  280. data/rdoc-sources/FXGroupBox.rb +33 -0
  281. data/rdoc-sources/FXHeader.rb +408 -0
  282. data/rdoc-sources/FXHorizontalFrame.rb +29 -0
  283. data/rdoc-sources/FXICOIcon.rb +65 -0
  284. data/rdoc-sources/FXICOImage.rb +31 -0
  285. data/rdoc-sources/FXIcon.rb +38 -0
  286. data/rdoc-sources/FXIconDict.rb +48 -0
  287. data/rdoc-sources/FXIconList.rb +447 -0
  288. data/rdoc-sources/FXIconSource.rb +100 -0
  289. data/rdoc-sources/FXId.rb +34 -0
  290. data/rdoc-sources/FXImage.rb +292 -0
  291. data/rdoc-sources/FXImageFrame.rb +36 -0
  292. data/rdoc-sources/FXImageView.rb +35 -0
  293. data/rdoc-sources/FXInputDialog.rb +77 -0
  294. data/rdoc-sources/FXJPGIcon.rb +70 -0
  295. data/rdoc-sources/FXJPGImage.rb +38 -0
  296. data/rdoc-sources/FXKnob.rb +76 -0
  297. data/rdoc-sources/FXLabel.rb +69 -0
  298. data/rdoc-sources/FXList.rb +440 -0
  299. data/rdoc-sources/FXListBox.rb +191 -0
  300. data/rdoc-sources/FXMDIButton.rb +67 -0
  301. data/rdoc-sources/FXMDIChild.rb +155 -0
  302. data/rdoc-sources/FXMDIClient.rb +65 -0
  303. data/rdoc-sources/FXMainWindow.rb +26 -0
  304. data/rdoc-sources/FXMatrix.rb +57 -0
  305. data/rdoc-sources/FXMemoryBuffer.rb +28 -0
  306. data/rdoc-sources/FXMemoryStream.rb +50 -0
  307. data/rdoc-sources/FXMenuBar.rb +23 -0
  308. data/rdoc-sources/FXMenuButton.rb +84 -0
  309. data/rdoc-sources/FXMenuCaption.rb +50 -0
  310. data/rdoc-sources/FXMenuCascade.rb +18 -0
  311. data/rdoc-sources/FXMenuCheck.rb +30 -0
  312. data/rdoc-sources/FXMenuCommand.rb +26 -0
  313. data/rdoc-sources/FXMenuPane.rb +13 -0
  314. data/rdoc-sources/FXMenuRadio.rb +33 -0
  315. data/rdoc-sources/FXMenuSeparator.rb +21 -0
  316. data/rdoc-sources/FXMenuTitle.rb +27 -0
  317. data/rdoc-sources/FXMessageBox.rb +72 -0
  318. data/rdoc-sources/FXObject.rb +28 -0
  319. data/rdoc-sources/FXOptionMenu.rb +83 -0
  320. data/rdoc-sources/FXPCXIcon.rb +63 -0
  321. data/rdoc-sources/FXPCXImage.rb +31 -0
  322. data/rdoc-sources/FXPNGIcon.rb +66 -0
  323. data/rdoc-sources/FXPNGImage.rb +34 -0
  324. data/rdoc-sources/FXPPMIcon.rb +36 -0
  325. data/rdoc-sources/FXPPMImage.rb +31 -0
  326. data/rdoc-sources/FXPacker.rb +63 -0
  327. data/rdoc-sources/FXPicker.rb +27 -0
  328. data/rdoc-sources/FXPopup.rb +53 -0
  329. data/rdoc-sources/FXPrintDialog.rb +36 -0
  330. data/rdoc-sources/FXProgressBar.rb +57 -0
  331. data/rdoc-sources/FXProgressDialog.rb +36 -0
  332. data/rdoc-sources/FXQuatd.rb +164 -0
  333. data/rdoc-sources/FXQuatf.rb +173 -0
  334. data/rdoc-sources/FXRGBIcon.rb +64 -0
  335. data/rdoc-sources/FXRGBImage.rb +31 -0
  336. data/rdoc-sources/FXRadioButton.rb +70 -0
  337. data/rdoc-sources/FXRanged.rb +100 -0
  338. data/rdoc-sources/FXRangef.rb +100 -0
  339. data/rdoc-sources/FXRealSlider.rb +101 -0
  340. data/rdoc-sources/FXRealSpinner.rb +140 -0
  341. data/rdoc-sources/FXRecentFiles.rb +77 -0
  342. data/rdoc-sources/FXRectangle.rb +149 -0
  343. data/rdoc-sources/FXRegion.rb +64 -0
  344. data/rdoc-sources/FXRegistry.rb +56 -0
  345. data/rdoc-sources/FXReplaceDialog.rb +56 -0
  346. data/rdoc-sources/FXRootWindow.rb +17 -0
  347. data/rdoc-sources/FXRuler.rb +130 -0
  348. data/rdoc-sources/FXRulerView.rb +225 -0
  349. data/rdoc-sources/FXScintilla.rb +121 -0
  350. data/rdoc-sources/FXScrollArea.rb +86 -0
  351. data/rdoc-sources/FXScrollBar.rb +107 -0
  352. data/rdoc-sources/FXScrollPane.rb +28 -0
  353. data/rdoc-sources/FXScrollWindow.rb +38 -0
  354. data/rdoc-sources/FXSearchDialog.rb +24 -0
  355. data/rdoc-sources/FXSeparator.rb +74 -0
  356. data/rdoc-sources/FXSettings.rb +248 -0
  357. data/rdoc-sources/FXShell.rb +8 -0
  358. data/rdoc-sources/FXShutter.rb +102 -0
  359. data/rdoc-sources/FXSize.rb +95 -0
  360. data/rdoc-sources/FXSlider.rb +98 -0
  361. data/rdoc-sources/FXSphered.rb +80 -0
  362. data/rdoc-sources/FXSpheref.rb +80 -0
  363. data/rdoc-sources/FXSpinner.rb +136 -0
  364. data/rdoc-sources/FXSplashWindow.rb +27 -0
  365. data/rdoc-sources/FXSplitter.rb +89 -0
  366. data/rdoc-sources/FXSpring.rb +61 -0
  367. data/rdoc-sources/FXStatusBar.rb +42 -0
  368. data/rdoc-sources/FXStatusLine.rb +60 -0
  369. data/rdoc-sources/FXStream.rb +142 -0
  370. data/rdoc-sources/FXStringDict.rb +38 -0
  371. data/rdoc-sources/FXSwitcher.rb +78 -0
  372. data/rdoc-sources/FXTGAIcon.rb +63 -0
  373. data/rdoc-sources/FXTGAImage.rb +31 -0
  374. data/rdoc-sources/FXTIFIcon.rb +70 -0
  375. data/rdoc-sources/FXTIFImage.rb +37 -0
  376. data/rdoc-sources/FXTabBar.rb +80 -0
  377. data/rdoc-sources/FXTabBook.rb +41 -0
  378. data/rdoc-sources/FXTabItem.rb +58 -0
  379. data/rdoc-sources/FXTable.rb +967 -0
  380. data/rdoc-sources/FXText.rb +578 -0
  381. data/rdoc-sources/FXTextField.rb +151 -0
  382. data/rdoc-sources/FXToggleButton.rb +70 -0
  383. data/rdoc-sources/FXToolBar.rb +61 -0
  384. data/rdoc-sources/FXToolBarGrip.rb +50 -0
  385. data/rdoc-sources/FXToolBarShell.rb +44 -0
  386. data/rdoc-sources/FXToolBarTab.rb +74 -0
  387. data/rdoc-sources/FXToolTip.rb +36 -0
  388. data/rdoc-sources/FXTopWindow.rb +163 -0
  389. data/rdoc-sources/FXTranslator.rb +32 -0
  390. data/rdoc-sources/FXTreeList.rb +514 -0
  391. data/rdoc-sources/FXTreeListBox.rb +219 -0
  392. data/rdoc-sources/FXTriStateButton.rb +49 -0
  393. data/rdoc-sources/FXVec2d.rb +96 -0
  394. data/rdoc-sources/FXVec2f.rb +96 -0
  395. data/rdoc-sources/FXVec3d.rb +113 -0
  396. data/rdoc-sources/FXVec3f.rb +113 -0
  397. data/rdoc-sources/FXVec4d.rb +129 -0
  398. data/rdoc-sources/FXVec4f.rb +129 -0
  399. data/rdoc-sources/FXVerticalFrame.rb +29 -0
  400. data/rdoc-sources/FXVisual.rb +79 -0
  401. data/rdoc-sources/FXWindow.rb +725 -0
  402. data/rdoc-sources/FXWizard.rb +59 -0
  403. data/rdoc-sources/FXXBMIcon.rb +37 -0
  404. data/rdoc-sources/FXXBMImage.rb +32 -0
  405. data/rdoc-sources/FXXPMIcon.rb +65 -0
  406. data/rdoc-sources/FXXPMImage.rb +31 -0
  407. data/rdoc-sources/README.rdoc +53 -0
  408. data/rdoc-sources/fxdefs.rb +90 -0
  409. data/tests/README +19 -0
  410. data/tests/TC_FXAccelTable.rb +43 -0
  411. data/tests/TC_FXApp.rb +15 -0
  412. data/tests/TC_FXArc.rb +26 -0
  413. data/tests/TC_FXBMPIcon.rb +15 -0
  414. data/tests/TC_FXBMPImage.rb +15 -0
  415. data/tests/TC_FXButton.rb +72 -0
  416. data/tests/TC_FXCheckButton.rb +57 -0
  417. data/tests/TC_FXComboBox.rb +52 -0
  418. data/tests/TC_FXDC.rb +372 -0
  419. data/tests/TC_FXDCPrint.rb +102 -0
  420. data/tests/TC_FXDCWindow.rb +23 -0
  421. data/tests/TC_FXDataTarget.rb +24 -0
  422. data/tests/TC_FXDirList.rb +30 -0
  423. data/tests/TC_FXFileAssoc.rb +62 -0
  424. data/tests/TC_FXFileStream.rb +90 -0
  425. data/tests/TC_FXFoldingList.rb +32 -0
  426. data/tests/TC_FXFont.rb +69 -0
  427. data/tests/TC_FXFontDesc.rb +58 -0
  428. data/tests/TC_FXGLGroup.rb +32 -0
  429. data/tests/TC_FXGLShape.rb +28 -0
  430. data/tests/TC_FXGLViewer.rb +20 -0
  431. data/tests/TC_FXGradientBar.rb +89 -0
  432. data/tests/TC_FXHeader.rb +82 -0
  433. data/tests/TC_FXIconDict.rb +52 -0
  434. data/tests/TC_FXIconList.rb +192 -0
  435. data/tests/TC_FXId.rb +19 -0
  436. data/tests/TC_FXImage.rb +155 -0
  437. data/tests/TC_FXLight.rb +33 -0
  438. data/tests/TC_FXList.rb +116 -0
  439. data/tests/TC_FXListBox.rb +49 -0
  440. data/tests/TC_FXMat4f.rb +228 -0
  441. data/tests/TC_FXMaterial.rb +89 -0
  442. data/tests/TC_FXMemoryStream.rb +97 -0
  443. data/tests/TC_FXMenuCheck.rb +57 -0
  444. data/tests/TC_FXMenuCommand.rb +12 -0
  445. data/tests/TC_FXMenuRadio.rb +57 -0
  446. data/tests/TC_FXPoint.rb +57 -0
  447. data/tests/TC_FXQuatf.rb +77 -0
  448. data/tests/TC_FXRadioButton.rb +57 -0
  449. data/tests/TC_FXRangef.rb +48 -0
  450. data/tests/TC_FXRectangle.rb +88 -0
  451. data/tests/TC_FXRegion.rb +54 -0
  452. data/tests/TC_FXRegistry.rb +27 -0
  453. data/tests/TC_FXScrollArea.rb +28 -0
  454. data/tests/TC_FXScrollWindow.rb +28 -0
  455. data/tests/TC_FXSegment.rb +22 -0
  456. data/tests/TC_FXSettings.rb +34 -0
  457. data/tests/TC_FXShell.rb +26 -0
  458. data/tests/TC_FXSize.rb +54 -0
  459. data/tests/TC_FXStream.rb +11 -0
  460. data/tests/TC_FXTable.rb +368 -0
  461. data/tests/TC_FXTableItem.rb +48 -0
  462. data/tests/TC_FXText.rb +96 -0
  463. data/tests/TC_FXTopWindow.rb +32 -0
  464. data/tests/TC_FXTreeList.rb +100 -0
  465. data/tests/TC_FXTreeListBox.rb +41 -0
  466. data/tests/TC_FXUndoList.rb +43 -0
  467. data/tests/TC_FXVec2d.rb +142 -0
  468. data/tests/TC_FXVec2f.rb +137 -0
  469. data/tests/TC_FXVec3d.rb +150 -0
  470. data/tests/TC_FXVec3f.rb +150 -0
  471. data/tests/TC_FXVec4f.rb +158 -0
  472. data/tests/TC_FXViewport.rb +30 -0
  473. data/tests/TC_FXXBMIcon.rb +15 -0
  474. data/tests/TC_FXXBMImage.rb +15 -0
  475. data/tests/TC_FXXPMIcon.rb +15 -0
  476. data/tests/TC_FXXPMImage.rb +15 -0
  477. data/tests/TC_Misc.rb +157 -0
  478. data/tests/TC_downcast.rb +15 -0
  479. data/tests/TS_All.rb +25 -0
  480. data/tests/blankpage.ps +166 -0
  481. data/tests/howdypage.ps +181 -0
  482. data/tests/output.ps +166 -0
  483. data/tests/stress1.rb +92 -0
  484. data/tests/stress2.rb +51 -0
  485. data/tests/stress3.rb +117 -0
  486. data/tests/testcase.rb +37 -0
  487. data/web/community.html +94 -0
  488. data/web/documentation.html +100 -0
  489. data/web/downloads.html +114 -0
  490. data/web/index.html +96 -0
  491. metadata +550 -0
data/doc/ch05s02.html ADDED
@@ -0,0 +1,260 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Drag Sources</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="dragdroptut.html" title="Chapter&nbsp;5.&nbsp;Drag and Drop"><link rel="prev" href="dragdroptut.html" title="Chapter&nbsp;5.&nbsp;Drag and Drop"><link rel="next" href="ch05s03.html" title="Putting It All Together"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Drag Sources</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dragdroptut.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;5.&nbsp;Drag and Drop</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch05s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1373"></a>Drag Sources</h2></div></div></div><p>As before, we're going to start by presenting a skeleton application
4
+ consisting of a main window widget (a <code class="classname">DragSource</code>
5
+ instance) that parents an <code class="classname">FXCanvas</code> widget:</p><pre class="programlisting">require 'fox16'
6
+
7
+ include Fox
8
+
9
+ class DragSource &lt; FXMainWindow
10
+ def initialize(anApp)
11
+ # Initialize base class
12
+ super(anApp, "Drag Source", :opts =&gt; DECOR_ALL, :width =&gt; 400, :height =&gt; 300)
13
+
14
+ # Fill main window with canvas
15
+ @canvas = FXCanvas.new(self, :opts =&gt; LAYOUT_FILL_X|LAYOUT_FILL_Y)
16
+ @canvas.backColor = "red"
17
+
18
+ # Handle expose events on the canvas
19
+ @canvas.connect(SEL_PAINT) do |sender, sel, event|
20
+ FXDCWindow.new(@canvas, event) do |dc|
21
+ dc.foreground = @canvas.backColor
22
+ dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
23
+ end
24
+ end
25
+ end
26
+
27
+ def create
28
+ # Create the main window and canvas
29
+ super
30
+
31
+ # Register the drag type for colors
32
+ FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
33
+
34
+ # Show the main window
35
+ show(PLACEMENT_SCREEN)
36
+ end
37
+ end
38
+
39
+ if __FILE__ == $0
40
+ FXApp.new("DragSource", "FXRuby") do |theApp|
41
+ DragSource.new(theApp)
42
+ theApp.create
43
+ theApp.run
44
+ end
45
+ end
46
+
47
+ </pre><p>Since the main program (i.e. the part at the end) won't change for
48
+ the rest of the tutorial, I won't show that code anymore. Furthermore, the
49
+ <code class="classname">DragSource</code> class has a few things in common with
50
+ the <code class="classname">DropSite</code> class from the previous example,
51
+ namely:</p><div class="itemizedlist"><ul type="disc"><li><p>We've defined a <code class="constant">SEL_PAINT</code> handler for the
52
+ canvas widget that just clears the canvas to its current background
53
+ color; and,</p></li><li><p>The drag type for colors
54
+ (<code class="constant">FXWindow.colorType</code>) is registered in the
55
+ <code class="classname">DragSource</code>'s <code class="methodname">create</code>
56
+ method.</p></li></ul></div><p>As before, you may want to run this basic version of the program to
57
+ be sure that it's working properly so far. You should simply see an empty
58
+ window with a red background.</p><p>Now for this application, we want a drag operation to begin when the
59
+ user presses the left mouse button inside the canvas and starts "dragging"
60
+ away from the canvas. So the first change we need to make is to add a
61
+ handler for the <code class="constant">SEL_LEFTBUTTONPRESS</code> message from the
62
+ canvas:</p><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONPRESS) do
63
+ #
64
+ # Capture (grab) the mouse when the button goes down, so that all future
65
+ # mouse events will be reported to this widget, even if those events occur
66
+ # outside of this widget.
67
+ #
68
+ @canvas.grab
69
+
70
+ # Advertise which drag types we can offer
71
+ dragTypes = [FXWindow.colorType]
72
+ @canvas.beginDrag(dragTypes)
73
+ end
74
+ </pre><p>Note that there are usually two things you're going to want to do in
75
+ the <code class="constant">SEL_LEFTBUTTONPRESS</code> handler for a drag source.
76
+ The first is to call <code class="methodname">grab</code> on the window that
77
+ acts as the drag source. Calling <code class="methodname">grab</code>
78
+ "captures" the mouse in the sense that subsequent mouse motion events will
79
+ be reported as if they occurred inside the grab window. This is important,
80
+ since in our case we're going to be dragging from this window to some
81
+ other window, possibly a window in a different application
82
+ altogether.</p><p>The second thing you'll want to do in the
83
+ <code class="constant">SEL_LEFTBUTTONPRESS</code> handler for a drag source is to
84
+ call <code class="methodname">beginDrag</code>. This not only kicks the
85
+ application into drag-and-drop mode, but also provides a way for you to
86
+ inform the system about the formats of data (i.e. the drag types) that
87
+ this drag source is able to provide. For this example, the drag source is
88
+ just going to offer one drag type.</p><p>Since releasing the left mouse button should end the drag operation,
89
+ it's important to also add a handler for the
90
+ <code class="constant">SEL_LEFTBUTTONRELEASE</code> message:</p><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONRELEASE) do
91
+ @canvas.ungrab
92
+ @canvas.endDrag
93
+ end
94
+ </pre><p>This is pretty much the mirror image of our
95
+ <code class="constant">SEL_LEFTBUTTONPRESS</code> handler. We call
96
+ <code class="methodname">ungrab</code> to release the mouse capture, and
97
+ <code class="methodname">endDrag</code> to clean up the drag-and-drop
98
+ state.</p><p>The next change is to add a <code class="constant">SEL_MOTION</code> handler,
99
+ to handle mouse motion events during the drag operation:</p><pre class="programlisting">@canvas.connect(SEL_MOTION) do |sender, sel, event|
100
+ if @canvas.dragging?
101
+ @canvas.handleDrag(event.root_x, event.root_y)
102
+ unless @canvas.didAccept == DRAG_REJECT
103
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
104
+ else
105
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
106
+ end
107
+ end
108
+ end
109
+ </pre><p>The <code class="methodname">dragging?</code> method returns true if we're
110
+ in the middle of a drag-and-drop operation for the drag source window,
111
+ i.e. after the call to <code class="methodname">beginDrag</code> but before the
112
+ call to <code class="methodname">endDrag</code>. If we're not currently
113
+ processing a drag operation, we're not really interested in mouse motion
114
+ events for the canvas.</p><p>If we <span class="emphasis"><em>are</em></span> processing a drag operation, however,
115
+ we need to call <code class="methodname">handleDrag</code> on the drag source
116
+ window. FOX uses this information to send drag-and-drop messages (such as
117
+ <code class="constant">SEL_DND_ENTER</code>, <code class="constant">SEL_DND_MOTION</code>
118
+ and <code class="constant">SEL_DND_LEAVE</code>) to the window that the mouse is
119
+ currently over. Note that the coordinates passed to
120
+ <code class="methodname">handleDrag</code> are root window coordinates, and not
121
+ window-local coordinates.</p><p>Another good thing to consider doing here is to change the shape of
122
+ the cursor depending on the drop site's response to the drag-and-drop
123
+ messages from the drag source. For this example, we change the drag cursor
124
+ to one of FOX's built-in cursor shapes
125
+ (<code class="constant">DEF_SWATCH_CURSOR</code>) if we get any response other than
126
+ <code class="constant">DRAG_REJECT</code> from the drop site. If the drop site
127
+ rejects this drag source's overtures, we instead change the drag cursor to
128
+ a cursor that resembles a stop sign
129
+ (<code class="constant">DEF_DNDSTOP_CURSOR</code>).</p><p>I've purposely avoided suggesting that you run the program for the
130
+ last couple of changes, since until now there wasn't going to be any
131
+ visual indication that anything interesting was happening. But now you
132
+ should be able to run the application in its current state and see a few
133
+ things.</p><p>A first test is to confirm that the cursor shape changes to the
134
+ "stop" sign when you attempt to drag over some window that isn't willing
135
+ to accept a drop of the <code class="constant">FXWindow.colorType</code> drag type.
136
+ Start up one of the other FXRuby example programs (such as the
137
+ <code class="filename">scribble.rb</code> example) alongside your drag source
138
+ program, and then try "dragging" from the drag source's canvas onto the
139
+ Scribble program's canvas. During the drag attempt, the cursor should
140
+ maintain its shape as a "stop" sign since the canvas in the
141
+ <code class="filename">scribble.rb</code> example isn't drop-enabled.</p><p>Your next test can confirm that the cursor shape changes to the
142
+ "swatch" cursor (a small square) when you attempt to drag over a window
143
+ that is drop-enabled, and which is willing to accepts drops of this drag
144
+ type. The obvious choice is the example from the previous section (the
145
+ dropsite.rb program), but you should have success with any FXRuby example
146
+ program that displays color wells. Start up one of these drop-enabled
147
+ programs alongside your drag source program, and then try "dragging" from
148
+ the drag source's canvas onto the drop site. While the mouse pointer is
149
+ over a drop-enabled window, the cursor should change its shape.</p><p>The last (and most important) step is to actually complete the data
150
+ transfer. At any time during a drag-and-drop operation, a drop site may
151
+ request a copy of the drag-and-drop data by calling the
152
+ <code class="methodname">getDNDData</code> method (as described in the previous
153
+ section). When this happens, FOX sends a
154
+ <code class="constant">SEL_DND_REQUEST</code> message to the current drag source
155
+ window, and so we now add a handler for that message:</p><pre class="programlisting">@canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
156
+ if event.target == FXWindow.colorType
157
+ @canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
158
+ end
159
+ end
160
+ </pre><p>The first important thing to note here is that the
161
+ <code class="varname">target</code> field of the <code class="classname">FXEvent</code>
162
+ instance will contain the drag type requested by the drop site. If your
163
+ drag source offers its data in multiple formats, you definitely need to
164
+ check this in order to know how to package-up the data for transfer.
165
+ However, even if you're only offering the data in a single format (as in
166
+ this example) it's still a good idea to check the requested type, since a
167
+ rogue drop site could ask for the data in some unexpected format.</p><p>Assuming that the drag type is as expected, the last step is send
168
+ the data to the drop site by calling
169
+ <code class="methodname">setDNDData</code>. As with the call to
170
+ <code class="methodname">getDNDData</code> for our previous drop site program,
171
+ you want to be sure to specify the origin of the data
172
+ (<code class="constant">FROM_DRAGNDROP</code>), the drag type
173
+ (<code class="constant">FXWindow.colorType</code>) and the data itself as a binary
174
+ string.</p><p>As a final test of the completed program, try dragging from this
175
+ window to some drop-enabled window (as described earlier). Now, when you
176
+ release the left mouse button to complete the "drop", the drop site should
177
+ change its color to red.</p><p>The complete program is listed below, and is included in the
178
+ <code class="filename">examples</code> directory under the file
179
+ name <code class="filename">dragsource.rb</code>.</p><pre class="programlisting">require 'fox16'
180
+
181
+ include Fox
182
+
183
+ class DragSource &lt; FXMainWindow
184
+ def initialize(anApp)
185
+ # Initialize base class
186
+ super(anApp, "Drag Source", :opts =&gt; DECOR_ALL, :width =&gt; 400, :height =&gt; 300)
187
+
188
+ # Fill main window with canvas
189
+ @canvas = FXCanvas.new(self, :opts =&gt; LAYOUT_FILL_X|LAYOUT_FILL_Y)
190
+ @canvas.backColor = "red"
191
+
192
+ # Handle expose events on the canvas
193
+ @canvas.connect(SEL_PAINT) do |sender, sel, event|
194
+ FXDCWindow.new(@canvas, event) do |dc|
195
+ dc.foreground = @canvas.backColor
196
+ dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
197
+ end
198
+ end
199
+
200
+ # Handle left button press
201
+ @canvas.connect(SEL_LEFTBUTTONPRESS) do
202
+ #
203
+ # Capture (grab) the mouse when the button goes down, so that all future
204
+ # mouse events will be reported to this widget, even if those events occur
205
+ # outside of this widget.
206
+ #
207
+ @canvas.grab
208
+
209
+ # Advertise which drag types we can offer
210
+ dragTypes = [FXWindow.colorType]
211
+ @canvas.beginDrag(dragTypes)
212
+ end
213
+
214
+ # Handle mouse motion events
215
+ @canvas.connect(SEL_MOTION) do |sender, sel, event|
216
+ if @canvas.dragging?
217
+ @canvas.handleDrag(event.root_x, event.root_y)
218
+ unless @canvas.didAccept == DRAG_REJECT
219
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
220
+ else
221
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
222
+ end
223
+ end
224
+ end
225
+
226
+ # Handle left button release
227
+ @canvas.connect(SEL_LEFTBUTTONRELEASE) do
228
+ @canvas.ungrab
229
+ @canvas.endDrag
230
+ end
231
+
232
+ # Handle request for DND data
233
+ @canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
234
+ if event.target == FXWindow.colorType
235
+ @canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
236
+ end
237
+ end
238
+ end
239
+
240
+ def create
241
+ # Create the main window and canvas
242
+ super
243
+
244
+ # Register the drag type for colors
245
+ FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
246
+
247
+ # Show the main window
248
+ show(PLACEMENT_SCREEN)
249
+ end
250
+ end
251
+
252
+ if __FILE__ == $0
253
+ FXApp.new("DragSource", "FXRuby") do |theApp|
254
+ DragSource.new(theApp)
255
+ theApp.create
256
+ theApp.run
257
+ end
258
+ end
259
+
260
+ </pre></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dragdroptut.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dragdroptut.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch05s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;5.&nbsp;Drag and Drop&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Putting It All Together</td></tr></table></div></body></html>
data/doc/ch05s03.html ADDED
@@ -0,0 +1,127 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Putting It All Together</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="dragdroptut.html" title="Chapter&nbsp;5.&nbsp;Drag and Drop"><link rel="prev" href="ch05s02.html" title="Drag Sources"><link rel="next" href="unicode.html" title="Chapter&nbsp;6.&nbsp;Unicode and FXRuby"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Putting It All Together</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch05s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;5.&nbsp;Drag and Drop</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="unicode.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1567"></a>Putting It All Together</h2></div></div></div><p>We've studied drag-and-drop enabled applications from two points of
4
+ view, that of a drag source and that of a drop site. But for most
5
+ applications, you'll want a window to act as both a drag source
6
+ <span class="emphasis"><em>and</em></span> a drop site. As it turns out, this is just a
7
+ simple combination of the techniques we've already seen in the previous
8
+ sections.</p><p>If we use our completed drag source example program from the
9
+ previous section as a starting point, and then compare it to the drop site
10
+ example from the first section, it is apparent that the only "pieces"
11
+ missing are:</p><div class="itemizedlist"><ul type="disc"><li><p>A call to <code class="methodname">dropEnable</code>, to make
12
+ <code class="classname">DragSource</code>'s canvas drop-enabled;</p></li><li><p>A handler for the <code class="constant">SEL_DND_MOTION</code> message;
13
+ and,</p></li><li><p>A handler for the <code class="constant">SEL_DND_DROP</code>
14
+ message.</p></li></ul></div><p>If you merge those three short bits of code from
15
+ <code class="filename">dropsite.rb</code> into <code class="filename">dragsource.rb</code>,
16
+ you should end up with a program that can act as both a drag source and a
17
+ drop site. To test this program, you should be able to start up two
18
+ separate copies side-by-side and then drag from one to the other. Since,
19
+ as written, both copies will start up with a red background, you might
20
+ want to modify one of them to have a different initial backgroud color.
21
+ Another interesting possibility is to start up a third program (such as an
22
+ FXRuby example that has displays a color dialog) and drag colors back and
23
+ forth between all three programs. You could spend days doing this and
24
+ never leave the house.</p><p>The complete program is listed below, and is included in the
25
+ <code class="filename">examples</code> directory under the file
26
+ name <code class="filename">dragdrop.rb</code>.</p><pre class="programlisting">require 'fox16'
27
+
28
+ include Fox
29
+
30
+ class DragDropWindow &lt; FXMainWindow
31
+ def initialize(anApp)
32
+ # Initialize base class
33
+ super(anApp, "Drag and Drop", :opts =&gt; DECOR_ALL, :width =&gt; 400, :height =&gt; 300)
34
+
35
+ # Fill main window with canvas
36
+ @canvas = FXCanvas.new(self, :opts =&gt; LAYOUT_FILL_X|LAYOUT_FILL_Y)
37
+ @canvas.backColor = "red"
38
+
39
+ # Enable canvas for drag-and-drop messages
40
+ @canvas.dropEnable
41
+
42
+ # Handle expose events on the canvas
43
+ @canvas.connect(SEL_PAINT) do |sender, sel, event|
44
+ FXDCWindow.new(@canvas, event) do |dc|
45
+ dc.foreground = @canvas.backColor
46
+ dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
47
+ end
48
+ end
49
+
50
+ # Handle left button press
51
+ @canvas.connect(SEL_LEFTBUTTONPRESS) do
52
+ #
53
+ # Capture (grab) the mouse when the button goes down, so that all future
54
+ # mouse events will be reported to this widget, even if those events occur
55
+ # outside of this widget.
56
+ #
57
+ @canvas.grab
58
+
59
+ # Advertise which drag types we can offer
60
+ dragTypes = [FXWindow.colorType]
61
+ @canvas.beginDrag(dragTypes)
62
+ end
63
+
64
+ # Handle mouse motion events
65
+ @canvas.connect(SEL_MOTION) do |sender, sel, event|
66
+ if @canvas.dragging?
67
+ @canvas.handleDrag(event.root_x, event.root_y)
68
+ unless @canvas.didAccept == DRAG_REJECT
69
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
70
+ else
71
+ @canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
72
+ end
73
+ end
74
+ end
75
+
76
+ # Handle SEL_DND_MOTION messages from the canvas
77
+ @canvas.connect(SEL_DND_MOTION) do
78
+ if @canvas.offeredDNDType?(FROM_DRAGNDROP, FXWindow.colorType)
79
+ @canvas.acceptDrop
80
+ end
81
+ end
82
+
83
+ # Handle left button release
84
+ @canvas.connect(SEL_LEFTBUTTONRELEASE) do
85
+ @canvas.ungrab
86
+ @canvas.endDrag
87
+ end
88
+
89
+ # Handle SEL_DND_DROP message from the canvas
90
+ @canvas.connect(SEL_DND_DROP) do
91
+ # Try to obtain the data as color values first
92
+ data = @canvas.getDNDData(FROM_DRAGNDROP, FXWindow.colorType)
93
+ unless data.nil?
94
+ # Update canvas background color
95
+ @canvas.backColor = Fox.fxdecodeColorData(data)
96
+ end
97
+ end
98
+
99
+ # Handle request for DND data
100
+ @canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
101
+ if event.target == FXWindow.colorType
102
+ @canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
103
+ end
104
+ end
105
+ end
106
+
107
+ def create
108
+ # Create the main window and canvas
109
+ super
110
+
111
+ # Register the drag type for colors
112
+ FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
113
+
114
+ # Show the main window
115
+ show(PLACEMENT_SCREEN)
116
+ end
117
+ end
118
+
119
+ if __FILE__ == $0
120
+ FXApp.new("DragDrop", "FXRuby") do |theApp|
121
+ DragDropWindow.new(theApp)
122
+ theApp.create
123
+ theApp.run
124
+ end
125
+ end
126
+
127
+ </pre></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch05s02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dragdroptut.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="unicode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Drag Sources&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;6.&nbsp;Unicode and FXRuby</td></tr></table></div></body></html>