fxruby 1.6.50 → 1.6.51

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 (350) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.github/workflows/binary.yml +17 -0
  4. data/.github/workflows/ci.yml +13 -2
  5. data/Gemfile +7 -2
  6. data/History.md +14 -0
  7. data/Rakefile +28 -46
  8. data/doap.rdf +2 -2
  9. data/docs/Fox/Canvas/CanvasError.html +2 -2
  10. data/docs/Fox/Canvas/CircleShape.html +2 -2
  11. data/docs/Fox/Canvas/ImageShape.html +2 -2
  12. data/docs/Fox/Canvas/LineShape.html +2 -2
  13. data/docs/Fox/Canvas/PolygonShape.html +2 -2
  14. data/docs/Fox/Canvas/RectangleShape.html +2 -2
  15. data/docs/Fox/Canvas/SelectionPolicy.html +2 -2
  16. data/docs/Fox/Canvas/Shape.html +3 -3
  17. data/docs/Fox/Canvas/ShapeCanvas.html +2 -2
  18. data/docs/Fox/Canvas/ShapeGroup.html +2 -2
  19. data/docs/Fox/Canvas/SingleSelectionPolicy.html +2 -2
  20. data/docs/Fox/Canvas/TextShape.html +7 -9
  21. data/docs/Fox/Canvas.html +3 -3
  22. data/docs/Fox/FTNonModal.html +2 -2
  23. data/docs/Fox/FX4Splitter.html +41 -41
  24. data/docs/Fox/FX7Segment.html +5 -5
  25. data/docs/Fox/FXAccelTable.html +2 -2
  26. data/docs/Fox/FXApp.html +54 -54
  27. data/docs/Fox/FXArc.html +2 -2
  28. data/docs/Fox/FXArrowButton.html +22 -22
  29. data/docs/Fox/FXBMPIcon.html +10 -10
  30. data/docs/Fox/FXBMPImage.html +9 -9
  31. data/docs/Fox/FXBitmap.html +7 -7
  32. data/docs/Fox/FXBitmapFrame.html +3 -3
  33. data/docs/Fox/FXBitmapView.html +4 -4
  34. data/docs/Fox/FXButton.html +21 -21
  35. data/docs/Fox/FXCURCursor.html +2 -2
  36. data/docs/Fox/FXCalendar.html +4 -4
  37. data/docs/Fox/FXCanvas.html +7 -7
  38. data/docs/Fox/FXCheckButton.html +13 -13
  39. data/docs/Fox/FXChoiceBox.html +20 -20
  40. data/docs/Fox/FXColor.html +2 -2
  41. data/docs/Fox/FXColorBar.html +10 -10
  42. data/docs/Fox/FXColorDialog.html +7 -7
  43. data/docs/Fox/FXColorItem.html +2 -2
  44. data/docs/Fox/FXColorList.html +2 -2
  45. data/docs/Fox/FXColorRing.html +7 -7
  46. data/docs/Fox/FXColorSelector.html +36 -36
  47. data/docs/Fox/FXColorWell.html +19 -19
  48. data/docs/Fox/FXColorWheel.html +20 -20
  49. data/docs/Fox/FXComboBox.html +31 -31
  50. data/docs/Fox/FXComboTableItem.html +2 -2
  51. data/docs/Fox/FXCommand.html +2 -2
  52. data/docs/Fox/FXComposite.html +5 -5
  53. data/docs/Fox/FXCursor.html +14 -14
  54. data/docs/Fox/FXDC.html +207 -207
  55. data/docs/Fox/FXDCPrint.html +2 -2
  56. data/docs/Fox/FXDCWindow.html +2 -2
  57. data/docs/Fox/FXDataTarget.html +8 -8
  58. data/docs/Fox/FXDebugTarget.html +3 -3
  59. data/docs/Fox/FXDelegator.html +2 -2
  60. data/docs/Fox/FXDial.html +28 -28
  61. data/docs/Fox/FXDialogBox.html +5 -5
  62. data/docs/Fox/FXDict.html +2 -2
  63. data/docs/Fox/FXDirBox.html +7 -7
  64. data/docs/Fox/FXDirDialog.html +2 -2
  65. data/docs/Fox/FXDirItem.html +2 -2
  66. data/docs/Fox/FXDirList.html +19 -19
  67. data/docs/Fox/FXDirSelector.html +15 -15
  68. data/docs/Fox/FXDockBar.html +27 -27
  69. data/docs/Fox/FXDockHandler.html +5 -5
  70. data/docs/Fox/FXDockSite.html +14 -14
  71. data/docs/Fox/FXDockTitle.html +2 -2
  72. data/docs/Fox/FXDocument.html +5 -5
  73. data/docs/Fox/FXDragCorner.html +2 -2
  74. data/docs/Fox/FXDrawable.html +5 -5
  75. data/docs/Fox/FXDriveBox.html +5 -5
  76. data/docs/Fox/FXEvent.html +62 -60
  77. data/docs/Fox/FXExtentd.html +2 -2
  78. data/docs/Fox/FXExtentf.html +2 -2
  79. data/docs/Fox/FXFileAssoc.html +2 -2
  80. data/docs/Fox/FXFileDialog.html +32 -32
  81. data/docs/Fox/FXFileDict.html +7 -7
  82. data/docs/Fox/FXFileItem.html +2 -2
  83. data/docs/Fox/FXFileList.html +27 -27
  84. data/docs/Fox/FXFileSelector.html +35 -35
  85. data/docs/Fox/FXFileStream.html +6 -6
  86. data/docs/Fox/FXFoldingItem.html +2 -2
  87. data/docs/Fox/FXFoldingList.html +41 -41
  88. data/docs/Fox/FXFont.html +172 -170
  89. data/docs/Fox/FXFontDesc.html +2 -2
  90. data/docs/Fox/FXFontDialog.html +2 -2
  91. data/docs/Fox/FXFontSelector.html +14 -14
  92. data/docs/Fox/FXFrame.html +4 -4
  93. data/docs/Fox/FXGIFCursor.html +2 -2
  94. data/docs/Fox/FXGIFIcon.html +10 -10
  95. data/docs/Fox/FXGIFImage.html +9 -9
  96. data/docs/Fox/FXGLCanvas.html +2 -2
  97. data/docs/Fox/FXGLCone.html +2 -2
  98. data/docs/Fox/FXGLContext.html +2 -2
  99. data/docs/Fox/FXGLCube.html +2 -2
  100. data/docs/Fox/FXGLCylinder.html +2 -2
  101. data/docs/Fox/FXGLGroup.html +2 -2
  102. data/docs/Fox/FXGLLine.html +2 -2
  103. data/docs/Fox/FXGLObject.html +14 -14
  104. data/docs/Fox/FXGLPoint.html +2 -2
  105. data/docs/Fox/FXGLShape.html +26 -26
  106. data/docs/Fox/FXGLSphere.html +2 -2
  107. data/docs/Fox/FXGLViewer.html +74 -74
  108. data/docs/Fox/FXGLVisual.html +2 -2
  109. data/docs/Fox/FXGradient.html +2 -2
  110. data/docs/Fox/FXGradientBar.html +34 -34
  111. data/docs/Fox/FXGroupBox.html +7 -7
  112. data/docs/Fox/FXHeader.html +20 -20
  113. data/docs/Fox/FXHeaderItem.html +19 -19
  114. data/docs/Fox/FXHiliteStyle.html +2 -2
  115. data/docs/Fox/FXHorizontalFrame.html +15 -15
  116. data/docs/Fox/FXHorizontalSeparator.html +13 -13
  117. data/docs/Fox/FXICOIcon.html +10 -10
  118. data/docs/Fox/FXICOImage.html +9 -9
  119. data/docs/Fox/FXIcon.html +10 -10
  120. data/docs/Fox/FXIconDict.html +2 -2
  121. data/docs/Fox/FXIconItem.html +2 -2
  122. data/docs/Fox/FXIconList.html +43 -43
  123. data/docs/Fox/FXIconSource.html +2 -2
  124. data/docs/Fox/FXId.html +2 -2
  125. data/docs/Fox/FXImage.html +120 -297
  126. data/docs/Fox/FXImageFrame.html +14 -14
  127. data/docs/Fox/FXImageView.html +13 -13
  128. data/docs/Fox/FXInputDialog.html +7 -7
  129. data/docs/Fox/FXIrb.html +2 -2
  130. data/docs/Fox/FXJPGIcon.html +11 -11
  131. data/docs/Fox/FXJPGImage.html +10 -10
  132. data/docs/Fox/FXKnob.html +17 -17
  133. data/docs/Fox/FXLabel.html +25 -25
  134. data/docs/Fox/FXLight.html +2 -2
  135. data/docs/Fox/FXList.html +29 -29
  136. data/docs/Fox/FXListBox.html +8 -8
  137. data/docs/Fox/FXListItem.html +2 -2
  138. data/docs/Fox/FXMDIChild.html +21 -21
  139. data/docs/Fox/FXMDIClient.html +224 -28
  140. data/docs/Fox/FXMDIDeleteButton.html +2 -2
  141. data/docs/Fox/FXMDIMaximizeButton.html +2 -2
  142. data/docs/Fox/FXMDIMenu.html +2 -2
  143. data/docs/Fox/FXMDIMinimizeButton.html +2 -2
  144. data/docs/Fox/FXMDIRestoreButton.html +2 -2
  145. data/docs/Fox/FXMDIWindowButton.html +2 -2
  146. data/docs/Fox/FXMainWindow.html +4 -4
  147. data/docs/Fox/FXMaterial.html +2 -2
  148. data/docs/Fox/FXMatrix.html +5 -5
  149. data/docs/Fox/FXMemoryBuffer.html +4 -4
  150. data/docs/Fox/FXMemoryStream.html +8 -8
  151. data/docs/Fox/FXMenuBar.html +2 -2
  152. data/docs/Fox/FXMenuButton.html +24 -24
  153. data/docs/Fox/FXMenuCaption.html +5 -5
  154. data/docs/Fox/FXMenuCascade.html +2 -2
  155. data/docs/Fox/FXMenuCheck.html +4 -4
  156. data/docs/Fox/FXMenuCommand.html +4 -4
  157. data/docs/Fox/FXMenuPane.html +2 -2
  158. data/docs/Fox/FXMenuRadio.html +4 -4
  159. data/docs/Fox/FXMenuSeparator.html +2 -2
  160. data/docs/Fox/FXMenuTitle.html +7 -7
  161. data/docs/Fox/FXMessageBox.html +21 -21
  162. data/docs/Fox/FXObject.html +2 -2
  163. data/docs/Fox/FXOption.html +8 -8
  164. data/docs/Fox/FXOptionMenu.html +8 -8
  165. data/docs/Fox/FXPCXIcon.html +10 -10
  166. data/docs/Fox/FXPCXImage.html +9 -9
  167. data/docs/Fox/FXPNGIcon.html +10 -10
  168. data/docs/Fox/FXPNGImage.html +9 -9
  169. data/docs/Fox/FXPPMIcon.html +10 -10
  170. data/docs/Fox/FXPPMImage.html +9 -9
  171. data/docs/Fox/FXPSBounds.html +2 -2
  172. data/docs/Fox/FXPacker.html +2 -2
  173. data/docs/Fox/FXPicker.html +5 -5
  174. data/docs/Fox/FXPopup.html +6 -6
  175. data/docs/Fox/FXPrintDialog.html +23 -23
  176. data/docs/Fox/FXPrinter.html +22 -22
  177. data/docs/Fox/FXProgressBar.html +8 -8
  178. data/docs/Fox/FXProgressDialog.html +6 -6
  179. data/docs/Fox/FXPseudoKeyboard.html +2 -2
  180. data/docs/Fox/FXPseudoMouse.html +2 -2
  181. data/docs/Fox/FXPseudoTarget.html +2 -2
  182. data/docs/Fox/FXQuatd.html +19 -19
  183. data/docs/Fox/FXQuatf.html +24 -24
  184. data/docs/Fox/FXRGBIcon.html +10 -10
  185. data/docs/Fox/FXRGBImage.html +9 -9
  186. data/docs/Fox/FXRadioButton.html +12 -12
  187. data/docs/Fox/FXRanged.html +2 -2
  188. data/docs/Fox/FXRangef.html +2 -2
  189. data/docs/Fox/FXRealSlider.html +40 -40
  190. data/docs/Fox/FXRealSpinner.html +32 -32
  191. data/docs/Fox/FXRecentFiles.html +17 -17
  192. data/docs/Fox/FXRectangle.html +15 -15
  193. data/docs/Fox/FXRegion.html +2 -2
  194. data/docs/Fox/FXRegistry.html +2 -2
  195. data/docs/Fox/FXReplaceDialog.html +29 -29
  196. data/docs/Fox/FXRootWindow.html +5 -5
  197. data/docs/Fox/FXRuler.html +31 -31
  198. data/docs/Fox/FXRulerView.html +2 -2
  199. data/docs/Fox/FXScintilla.html +9116 -2763
  200. data/docs/Fox/FXScrollArea.html +21 -21
  201. data/docs/Fox/FXScrollBar.html +31 -31
  202. data/docs/Fox/FXScrollCorner.html +2 -2
  203. data/docs/Fox/FXScrollPane.html +6 -6
  204. data/docs/Fox/FXScrollWindow.html +9 -9
  205. data/docs/Fox/FXSearchDialog.html +11 -11
  206. data/docs/Fox/FXSegment.html +2 -2
  207. data/docs/Fox/FXSeparator.html +7 -7
  208. data/docs/Fox/FXSettings.html +56 -56
  209. data/docs/Fox/FXShell.html +2 -2
  210. data/docs/Fox/FXShutter.html +24 -24
  211. data/docs/Fox/FXShutterItem.html +19 -19
  212. data/docs/Fox/FXSize.html +12 -12
  213. data/docs/Fox/FXSlider.html +40 -40
  214. data/docs/Fox/FXSphered.html +2 -2
  215. data/docs/Fox/FXSpheref.html +2 -2
  216. data/docs/Fox/FXSpinner.html +31 -31
  217. data/docs/Fox/FXSplashScreen.html +3 -3
  218. data/docs/Fox/FXSplashWindow.html +7 -7
  219. data/docs/Fox/FXSplitter.html +22 -22
  220. data/docs/Fox/FXSpring.html +17 -17
  221. data/docs/Fox/FXStatusBar.html +17 -17
  222. data/docs/Fox/FXStatusLine.html +8 -8
  223. data/docs/Fox/FXStream.html +26 -26
  224. data/docs/Fox/FXStreamAllocError.html +2 -2
  225. data/docs/Fox/FXStreamEndError.html +2 -2
  226. data/docs/Fox/FXStreamError.html +2 -2
  227. data/docs/Fox/FXStreamFailureError.html +2 -2
  228. data/docs/Fox/FXStreamFormatError.html +2 -2
  229. data/docs/Fox/FXStreamFullError.html +2 -2
  230. data/docs/Fox/FXStreamNoReadError.html +2 -2
  231. data/docs/Fox/FXStreamNoWriteError.html +2 -2
  232. data/docs/Fox/FXStreamUnknownError.html +2 -2
  233. data/docs/Fox/FXStringDict.html +2 -2
  234. data/docs/Fox/FXSwitcher.html +30 -30
  235. data/docs/Fox/FXTGAIcon.html +10 -10
  236. data/docs/Fox/FXTGAImage.html +9 -9
  237. data/docs/Fox/FXTIFIcon.html +10 -10
  238. data/docs/Fox/FXTIFImage.html +9 -9
  239. data/docs/Fox/FXTabBar.html +37 -37
  240. data/docs/Fox/FXTabBook.html +15 -15
  241. data/docs/Fox/FXTabItem.html +27 -27
  242. data/docs/Fox/FXTable.html +89 -89
  243. data/docs/Fox/FXTableItem.html +6 -6
  244. data/docs/Fox/FXTablePos.html +2 -2
  245. data/docs/Fox/FXTableRange.html +2 -2
  246. data/docs/Fox/FXText.html +115 -115
  247. data/docs/Fox/FXTextChange.html +2 -2
  248. data/docs/Fox/FXTextField.html +55 -55
  249. data/docs/Fox/FXToggleButton.html +31 -31
  250. data/docs/Fox/FXToolBar.html +15 -15
  251. data/docs/Fox/FXToolBarGrip.html +14 -14
  252. data/docs/Fox/FXToolBarShell.html +11 -11
  253. data/docs/Fox/FXToolBarTab.html +21 -21
  254. data/docs/Fox/FXToolTip.html +12 -10
  255. data/docs/Fox/FXTopWindow.html +34 -34
  256. data/docs/Fox/FXTranslator.html +2 -2
  257. data/docs/Fox/FXTreeItem.html +2 -2
  258. data/docs/Fox/FXTreeList.html +41 -41
  259. data/docs/Fox/FXTreeListBox.html +23 -23
  260. data/docs/Fox/FXTriStateButton.html +21 -21
  261. data/docs/Fox/FXUndoList.html +3 -3
  262. data/docs/Fox/FXVec2d.html +2 -2
  263. data/docs/Fox/FXVec2f.html +2 -2
  264. data/docs/Fox/FXVec3d.html +2 -2
  265. data/docs/Fox/FXVec3f.html +2 -2
  266. data/docs/Fox/FXVec4d.html +2 -2
  267. data/docs/Fox/FXVec4f.html +2 -2
  268. data/docs/Fox/FXVerticalFrame.html +15 -15
  269. data/docs/Fox/FXVerticalSeparator.html +13 -13
  270. data/docs/Fox/FXViewport.html +2 -2
  271. data/docs/Fox/FXVisual.html +24 -24
  272. data/docs/Fox/FXWindow.html +143 -143
  273. data/docs/Fox/FXWizard.html +5 -5
  274. data/docs/Fox/FXXBMIcon.html +11 -11
  275. data/docs/Fox/FXXBMImage.html +10 -10
  276. data/docs/Fox/FXXPMIcon.html +10 -10
  277. data/docs/Fox/FXXPMImage.html +9 -9
  278. data/docs/Fox/NotifyHeader.html +2 -2
  279. data/docs/Fox/SCNotification.html +2 -2
  280. data/docs/Fox/TextRange.html +2 -2
  281. data/docs/Fox.html +89 -89
  282. data/docs/IRB.html +2 -2
  283. data/docs/Responder.html +2 -2
  284. data/docs/Responder2.html +2 -2
  285. data/docs/_index.html +2 -2
  286. data/docs/css/style.css +2 -15
  287. data/docs/file.History.html +1432 -842
  288. data/docs/file.README.html +9 -9
  289. data/docs/index.html +94 -53
  290. data/docs/js/app.js +91 -40
  291. data/docs/js/full_list.js +22 -20
  292. data/docs/method_list.html +2854 -2286
  293. data/docs/top-level-namespace.html +2 -2
  294. data/examples/canvasdemo.rb +4 -4
  295. data/examples/iconlist.rb +79 -4
  296. data/examples/inputs.rb +1 -1
  297. data/examples/rmagick.rb +9 -9
  298. data/ext/fox16_c/FXRbApp.cpp +2 -1
  299. data/ext/fox16_c/FXRbDataTarget.cpp +1 -0
  300. data/ext/fox16_c/FXRbGLViewer.cpp +1 -0
  301. data/ext/fox16_c/FXRbObjRegistry.cpp +12 -5
  302. data/ext/fox16_c/FXRuby.cpp +57 -37
  303. data/ext/fox16_c/core_wrap.cpp +2593 -2155
  304. data/ext/fox16_c/dc_wrap.cpp +1033 -707
  305. data/ext/fox16_c/dialogs_wrap.cpp +1865 -1513
  306. data/ext/fox16_c/extconf.rb +11 -8
  307. data/ext/fox16_c/frames_wrap.cpp +3257 -2876
  308. data/ext/fox16_c/fx3d_wrap.cpp +2170 -1780
  309. data/ext/fox16_c/gvl_wrappers.cpp +1 -0
  310. data/ext/fox16_c/iconlist_wrap.cpp +1209 -882
  311. data/ext/fox16_c/icons_wrap.cpp +1132 -775
  312. data/ext/fox16_c/image_wrap.cpp +1116 -756
  313. data/ext/fox16_c/impl.cpp +1 -0
  314. data/ext/fox16_c/include/FXRbDCWindow.h +1 -1
  315. data/ext/fox16_c/include/FXRuby.h +6 -6
  316. data/ext/fox16_c/label_wrap.cpp +1702 -1354
  317. data/ext/fox16_c/layout_wrap.cpp +1752 -1392
  318. data/ext/fox16_c/list_wrap.cpp +899 -572
  319. data/ext/fox16_c/make_impl.rb +1 -0
  320. data/ext/fox16_c/markfuncs.cpp +1 -0
  321. data/ext/fox16_c/mdi_wrap.cpp +1220 -881
  322. data/ext/fox16_c/menu_wrap.cpp +1402 -1057
  323. data/ext/fox16_c/scintilla_wrap.cpp +658 -337
  324. data/ext/fox16_c/swigruby.h +262 -119
  325. data/ext/fox16_c/table_wrap.cpp +1064 -741
  326. data/ext/fox16_c/text_wrap.cpp +1062 -741
  327. data/ext/fox16_c/treelist_wrap.cpp +1522 -1189
  328. data/ext/fox16_c/ui_wrap.cpp +3610 -3216
  329. data/ext/fox16_c/unregisterOwnedObjects.cpp +1 -0
  330. data/fxruby.gemspec +6 -1
  331. data/lib/fox16/canvas.rb +1 -1
  332. data/lib/fox16/core.rb +97 -26
  333. data/lib/fox16/undolist.rb +32 -32
  334. data/lib/fox16/version.rb +1 -1
  335. data/rdoc-sources/FXApp.rb +12 -0
  336. data/rdoc-sources/FXFont.rb +2 -0
  337. data/rdoc-sources/FXMDIClient.rb +15 -0
  338. data/scripts/iface.rb +1 -0
  339. data/swig-interfaces/FXScintilla.i +1 -1
  340. data/swig-interfaces/FXText.i +1 -1
  341. data/swig-interfaces/freefuncs.i +1 -0
  342. data/swig-interfaces/ruby-typemaps.i +19 -19
  343. data/test/TC_FXBMPImage.rb +1 -1
  344. data/test/TC_FXDC.rb +24 -0
  345. data/test/TC_FXMat4f.rb +23 -14
  346. data/test/TC_FXSize.rb +8 -4
  347. data/test/TS_All.rb +4 -0
  348. data.tar.gz.sig +0 -0
  349. metadata +18 -15
  350. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91f5dfd3fc0e923e7a233119fcfad086caab6dc09dd8f6abb5fb29b7bd275152
4
- data.tar.gz: a85827224c5717b7214e20f9cc62a846f57a92f5b5a065f4aa9e42af9d6f4b39
3
+ metadata.gz: b78df00327beab3240be587e4d02ba6ad450ccb6155a7b251bbf661cbbaa4ae1
4
+ data.tar.gz: 73625a8a66f288a42c142e1a4e20d33acd10f22086e2232b9e284a269996b4f8
5
5
  SHA512:
6
- metadata.gz: acb3b10556bfc07b2d7258a2afe2453cb9b653e6b41dabf8ccf1283fcd393dd174b150cf2aa6c2c7e07dcc81a71f4b13eec2645dca51cd264d032744711da856
7
- data.tar.gz: 53596e21c809737675ae5fc692c8309b952fe480c3c954cf3a8525efb2263a919b030a1a80f4db8589752ee5d50e496f4ff83b3840c5affc89d09ecce36dfb6b
6
+ metadata.gz: 38ee07ab04312c494b269b5687756ea19bfd79eed59688bc2b931e89be59061e35f746ec8abfa2de41f4fe9bd72e2ba807b210492b3ec4ddc5e5efd420a9a294
7
+ data.tar.gz: f487234efc9da4704985004d9480a9a7fa357dee1683f0f688f07566aabf4bce49eb0a1ba1e80cfe748f7a68188983a311f29a54c86e8a63e187fccf6c58d084
checksums.yaml.gz.sig CHANGED
Binary file
@@ -25,6 +25,23 @@ jobs:
25
25
  uses: ruby/setup-ruby@v1
26
26
  with:
27
27
  ruby-version: "4.0"
28
+
29
+ - name: install latest swig
30
+ run: |
31
+ wget http://prdownloads.sourceforge.net/swig/swig-4.5.0.tar.gz
32
+ tar xf swig-4.5.0.tar.gz
33
+ cd swig-4.5.0
34
+ ./configure -without-alllang --with-ruby
35
+ make -j`nproc`
36
+ sudo make install
37
+
38
+ - name: Print tool versions
39
+ run: |
40
+ ruby -v
41
+ gcc -v
42
+ swig -version
43
+ gem env
44
+
28
45
  - run: bundle install
29
46
 
30
47
  - name: Build binary gem
@@ -35,10 +35,20 @@ jobs:
35
35
  - uses: ruby/setup-ruby-pkgs@v1
36
36
  with:
37
37
  ruby-version: ${{ matrix.ruby }} # passed to ruby/setup-ruby
38
- apt-get: "xpra xserver-xorg-video-dummy libxrandr-dev libfox-1.6-dev swig" # Ubuntu
39
- brew: "fox swig xquartz" # macOS
38
+ apt-get: "xserver-xorg-video-dummy libxrandr-dev libfox-1.6-dev" # Ubuntu
39
+ brew: "fox xquartz" # macOS
40
40
  mingw: "fox swig" # Windows mingw / mswin /ucrt
41
41
 
42
+ - name: install latest swig
43
+ if: matrix.os != 'windows'
44
+ run: |
45
+ wget http://prdownloads.sourceforge.net/swig/swig-4.5.0.tar.gz
46
+ tar xf swig-4.5.0.tar.gz
47
+ cd swig-4.5.0
48
+ ./configure -without-alllang --with-ruby
49
+ make -j`nproc`
50
+ sudo make install
51
+
42
52
  - name: Print tool versions
43
53
  run: |
44
54
  ruby -v
@@ -68,6 +78,7 @@ jobs:
68
78
  - name: Linux Start xpra to enable GLX
69
79
  if: matrix.os == 'ubuntu'
70
80
  run: |
81
+ curl https://xpra.org/get-xpra.sh | bash
71
82
  xpra --xvfb="Xorg +extension GLX -config `pwd`/test/dummy.xorg.conf -logfile ${HOME}/.xpra/xorg.log" start :9
72
83
  echo "DISPLAY=:9" >> $GITHUB_ENV
73
84
 
data/Gemfile CHANGED
@@ -1,5 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ plugin "rubygems-requirements-system"
4
+
3
5
  # No fxruby gemspec, since "bundle package" fails on bundler-2.7+, if the extension isn't built
4
6
  # gemspec
5
7
 
@@ -9,10 +11,13 @@ gem 'mini_portile2'
9
11
 
10
12
  group :development do
11
13
  gem 'rake-compiler', '~> 1.0'
12
- gem 'rake-compiler-dock', '~> 1.11.0'
13
- gem 'yard', '~> 0.8'
14
+ gem 'rake-compiler-dock', '~> 1.12.0'
15
+ gem 'yard', '~> 0.8', '>= 0.9.36'
14
16
  gem "bundler", ">= 1.12", "< 5.a"
15
17
  gem "rake", "~> 13.0"
18
+ gem 'rdoc'
19
+ gem 'webrick' # for "yard server"
20
+ gem 'redcarpet', '~> 3.0'
16
21
  end
17
22
 
18
23
  group :test do
data/History.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## 1.6.51 / 2026-11-12
2
+
3
+ * Update to swig-4.5 which makes use of TypedData structs which is required for ruby-4.1.
4
+ * Replace `DATA_PTR` and `Data_Get_Struct` by `SWIG_ConvertPtr`.
5
+ * Add possibility to enable FXTRACE output by the environment variable "fxTraceLevel" when running "rake test".
6
+ * Add `FXMat[34][fd]#to_a` , `#==` and `#inspect`.
7
+ They have been available for years in `FXVec` classes already.
8
+ * Fix `Fox::Canvas::Shape` when running without global `include Fox`
9
+ * Fix segfault because of missing object deregister for FXDCWindow.
10
+ * Fix deprecation warnung about `fptr->tied_io_for_writing`
11
+ * Fix type conversions of `Array<FXPoint>`, `Array<FXRectangle>`, `Array<FXSegment>` and `Array<FXArc>` to raise an error on type mismatch.
12
+ This wasn't checked before and could lead to invalid memory access.
13
+ * Update to libz-1.4, libpng-1.6.59, libjpeg-turbo-3.2.1, libtiff-4.7.2 for Windows binary gems.
14
+
1
15
  ## 1.6.50 / 2026-01-02
2
16
 
3
17
  * Add binary gem support for ruby-4.0.
data/Rakefile CHANGED
@@ -184,6 +184,8 @@ namespace :gem do
184
184
  task plat => ['gem', 'prepare'] do
185
185
  debug = "FXRUBY_MINGW_DEBUG=#{ENV['FXRUBY_MINGW_DEBUG'].inspect}" if ENV['FXRUBY_MINGW_DEBUG']
186
186
  RakeCompilerDock.sh <<-EOT, platform: plat
187
+ sudo mkdir -p /__w/mingw-w64-gcc-xpack/mingw-w64-gcc-xpack/build/linux-arm64/application/x86_64-w64-mingw32/lib/../lib/ &&
188
+ (sudo ln /xpack-mingw/x86_64-w64-mingw32/lib/libstdc++.la /__w/mingw-w64-gcc-xpack/mingw-w64-gcc-xpack/build/linux-arm64/application/x86_64-w64-mingw32/lib/../lib/libstdc++.la || true) &&
187
189
  sudo apt-get update &&
188
190
  sudo apt-get install -y yasm libtool m4 automake &&
189
191
  bundle config set without test &&
@@ -194,56 +196,28 @@ namespace :gem do
194
196
  end
195
197
  end
196
198
 
197
- namespace :swig do
198
- def patch_swigruby(line)
199
- # Ruby-2.7+ finally changed callback function signatures from (*)(ANYARGS) to a proper signature, on which the compiler is able to check parameter types.
200
- # Unfortunately this requires a bunch of patches to swig's generated code.
201
-
202
- line.gsub! '#include <ruby.h>', <<-EOT
203
- #include <ruby.h>
204
-
205
- #if defined(RB_METHOD_DEFINITION_DECL)
206
- # define RUBY_VALUE_METHOD_FUNC(func) (func)
207
- # define RUBY_INT_METHOD_FUNC(func) (func)
208
- # define RUBY_VOID_METHOD_FUNC(func) (func)
209
- # define RUBY_VOIDP_METHOD_FUNC(func) (func)
210
- #else
211
- # define RUBY_VALUE_METHOD_FUNC(func) ((VALUE (*)(ANYARGS))(func))
212
- # define RUBY_INT_METHOD_FUNC(func) ((int (*)(ANYARGS))(func))
213
- # define RUBY_VOID_METHOD_FUNC(func) ((void (*)(ANYARGS))(func))
214
- # define RUBY_VOIDP_METHOD_FUNC(func) ((void *(*)(ANYARGS))(func))
215
- #endif
216
- EOT
217
- line.gsub! /rb_define_virtual_variable\((.*?), (\w+), NULL\)/, <<-EOT
218
- rb_define_virtual_variable(\\1, RUBY_VALUE_METHOD_FUNC(\\2), RUBY_VOID_METHOD_FUNC((rb_gvar_setter_t*)NULL))
219
- EOT
220
-
221
- line.gsub!('static VALUE swig_ruby_trackings_count(ANYARGS)', 'static VALUE swig_ruby_trackings_count(ID id, VALUE *var)')
222
- line.gsub!('SWIG_ruby_failed(void)', 'SWIG_ruby_failed(VALUE, VALUE)')
223
-
224
- line.gsub!(/SWIGINTERN VALUE SWIG_AUX_(\w+)\(VALUE \*args\)\s\{/m, 'SWIGINTERN VALUE SWIG_AUX_\\1(VALUE pargs){VALUE *args=(VALUE *)pargs;')
225
-
226
- line.gsub! /static int swig_ruby_internal_iterate_callback\(void\* ptr, VALUE obj, void\(\*meth\)\(void\* ptr, VALUE obj\)\)\s*{\s*\(\*meth\)\(ptr, obj\);/m, <<-EOT
227
- static int swig_ruby_internal_iterate_callback(st_data_t ptr, st_data_t obj, st_data_t meth) {
228
- ((void(*)(void*, VALUE))meth)((void*)ptr, (VALUE)obj);
229
- EOT
199
+ $matched_gsubs = Hash.new { |h,e| h[e] = [] }
200
+ def checked_gsub!(str, from, to)
201
+ old = str.dup
202
+ n = str.gsub!(from, to)
230
203
 
231
- line.gsub!('(int (*)(ANYARGS))&swig_ruby_internal_iterate_callback', 'RUBY_INT_METHOD_FUNC(swig_ruby_internal_iterate_callback)')
204
+ $matched_gsubs[[from, to]] << (old != str)
232
205
 
233
- line.gsub! /rb_ensure\(VALUEFUNC\((.*)\), self, VALUEFUNC\((.*)\), self\);/, 'rb_ensure(RUBY_VALUE_METHOD_FUNC(\\1), self, RUBY_VALUE_METHOD_FUNC(\\2), self);'
234
- line.gsub! /rb_rescue\(RUBY_METHOD_FUNC\((.*)\), \(VALUE\)a, RUBY_METHOD_FUNC\((.*)\), 0\)/, 'rb_rescue(RUBY_VALUE_METHOD_FUNC(\\1), (VALUE)a, RUBY_VALUE_METHOD_FUNC(\\2), 0)'
206
+ n
207
+ end
235
208
 
236
- line.gsub!('VALUE cl = rb_define_class("swig_runtime_data", rb_cObject);', 'VALUE cl = rb_define_class("SWIG_RUNTIME_DATA", rb_cObject);rb_undef_alloc_func(cl);')
209
+ namespace :swig do
210
+ def patch_swigruby(line)
237
211
 
238
212
  # Allow Truffleruby-22.1.0 to compile the sources without fxscintilla.
239
213
  # Unfortunately Truffleruby still fails with various runtime errors.
240
214
  if RUBY_ENGINE == "truffleruby"
241
- line.gsub! '#include <ruby.h>', <<-EOT
215
+ checked_gsub! line, '#include <ruby.h>', <<-EOT
242
216
  #include <ruby.h>
243
217
  #define rb_define_virtual_variable(x,y,z)
244
218
  EOT
245
219
 
246
- line.gsub! 'rb_define_readonly_variable("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, &swig_runtime_data_type_pointer);', <<-EOT
220
+ checked_gsub! line, 'rb_define_readonly_variable("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, &swig_runtime_data_type_pointer);', <<-EOT
247
221
  if (rb_gv_get("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME) == RUBY_Qnil) {
248
222
  rb_gv_set("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, swig_runtime_data_type_pointer);
249
223
  }
@@ -257,13 +231,13 @@ namespace :swig do
257
231
  puts "Update #{wrapper_src_file_name}"
258
232
 
259
233
  line = File.read(wrapper_src_file_name)
260
- line.gsub!(/static VALUE mCore;/, "VALUE mCore;")
261
- line.gsub!(/mCore = rb_define_module\("Core"\)/, "mFox = rb_define_module(\"Fox\")")
262
- line.gsub!(/mCore/, "mFox")
263
- line.gsub!(/static VALUE m(Dc|Dialogs|Frames|Iconlist|Icons|Image|Label|Layout|List|Mdi|Menu|Fx3d|Scintilla|Table|Text|Treelist|Ui);/, '')
264
- line.gsub!(/m(Dc|Dialogs|Frames|Iconlist|Icons|Image|Label|Layout|List|Mdi|Menu|Fx3d|Scintilla|Table|Text|Treelist|Ui) = rb_define_module.*/, '')
265
- line.gsub!(/rb_require.*/, '')
266
- line.gsub!(/m(Dc|Dialogs|Frames|Iconlist|Icons|Image|Label|Layout|List|Mdi|Menu|Fx3d|Scintilla|Table|Text|Treelist|Ui),/, "mFox,")
234
+ checked_gsub!(line, /static VALUE mCore;/, "VALUE mCore;")
235
+ checked_gsub!(line, /mCore = rb_define_module\("Core"\)/, "mFox = rb_define_module(\"Fox\")")
236
+ checked_gsub!(line, /mCore/, "mFox")
237
+ # checked_gsub!(line, /static VALUE m(Dc|Dialogs|Frames|Iconlist|Icons|Image|Label|Layout|List|Mdi|Menu|Fx3d|Scintilla|Table|Text|Treelist|Ui);/, '')
238
+ checked_gsub!(line, /m(Dc|Dialogs|Frames|Iconlist|Icons|Image|Label|Layout|List|Mdi|Menu|Fx3d|Scintilla|Table|Text|Treelist|Ui) = rb_define_module.*/, '')
239
+ checked_gsub!(line, /rb_require.*/, '')
240
+ checked_gsub!(line, /m(Dc|Dialogs|Frames|Iconlist|Icons|Image|Label|Layout|List|Mdi|Menu|Fx3d|Scintilla|Table|Text|Treelist|Ui),/, "mFox,")
267
241
 
268
242
  line = patch_swigruby(line)
269
243
 
@@ -396,3 +370,11 @@ namespace :docs do
396
370
  sh 'git', 'add', 'docs'
397
371
  end
398
372
  end
373
+
374
+ task :compile do
375
+ never_matched = $matched_gsubs.select { |_key, matches| matches.all?(false) }
376
+
377
+ never_matched.each do |(from, to), |
378
+ warn "gsub didn't match on\n from: #{from}\n to: #{to}"
379
+ end
380
+ end
data/doap.rdf CHANGED
@@ -77,8 +77,8 @@
77
77
  <doap:release>
78
78
  <doap:Version>
79
79
  <doap:branch>fox16</doap:branch>
80
- <doap:created>2025-04-07</doap:created>
81
- <doap:revision>1.6.48</doap:revision>
80
+ <doap:created>2026-03-27</doap:created>
81
+ <doap:revision>1.6.50</doap:revision>
82
82
  </doap:Version>
83
83
  </doap:release>
84
84
 
@@ -114,9 +114,9 @@
114
114
  </div>
115
115
 
116
116
  <div id="footer">
117
- Generated on Tue Mar 11 16:01:57 2025 by
117
+ Generated on Thu Mar 26 09:49:31 2026 by
118
118
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
119
- 0.9.37 (ruby-3.5.0).
119
+ 0.9.38 (ruby-4.0.0).
120
120
  </div>
121
121
 
122
122
  </div>
@@ -467,9 +467,9 @@
467
467
  </div>
468
468
 
469
469
  <div id="footer">
470
- Generated on Tue Mar 11 16:01:58 2025 by
470
+ Generated on Thu Mar 26 09:49:31 2026 by
471
471
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
472
- 0.9.37 (ruby-3.5.0).
472
+ 0.9.38 (ruby-4.0.0).
473
473
  </div>
474
474
 
475
475
  </div>
@@ -467,9 +467,9 @@
467
467
  </div>
468
468
 
469
469
  <div id="footer">
470
- Generated on Tue Mar 11 16:01:58 2025 by
470
+ Generated on Thu Mar 26 09:49:31 2026 by
471
471
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
472
- 0.9.37 (ruby-3.5.0).
472
+ 0.9.38 (ruby-4.0.0).
473
473
  </div>
474
474
 
475
475
  </div>
@@ -995,9 +995,9 @@
995
995
  </div>
996
996
 
997
997
  <div id="footer">
998
- Generated on Tue Mar 11 16:01:58 2025 by
998
+ Generated on Thu Mar 26 09:49:31 2026 by
999
999
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1000
- 0.9.37 (ruby-3.5.0).
1000
+ 0.9.38 (ruby-4.0.0).
1001
1001
  </div>
1002
1002
 
1003
1003
  </div>
@@ -135,9 +135,9 @@
135
135
  </div>
136
136
 
137
137
  <div id="footer">
138
- Generated on Tue Mar 11 16:01:58 2025 by
138
+ Generated on Thu Mar 26 09:49:31 2026 by
139
139
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
140
- 0.9.37 (ruby-3.5.0).
140
+ 0.9.38 (ruby-4.0.0).
141
141
  </div>
142
142
 
143
143
  </div>
@@ -429,9 +429,9 @@
429
429
  </div>
430
430
 
431
431
  <div id="footer">
432
- Generated on Tue Mar 11 16:01:58 2025 by
432
+ Generated on Thu Mar 26 09:49:31 2026 by
433
433
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
434
- 0.9.37 (ruby-3.5.0).
434
+ 0.9.38 (ruby-4.0.0).
435
435
  </div>
436
436
 
437
437
  </div>
@@ -342,9 +342,9 @@
342
342
  </div>
343
343
 
344
344
  <div id="footer">
345
- Generated on Tue Mar 11 16:01:58 2025 by
345
+ Generated on Thu Mar 26 09:49:31 2026 by
346
346
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
347
- 0.9.37 (ruby-3.5.0).
347
+ 0.9.38 (ruby-4.0.0).
348
348
  </div>
349
349
 
350
350
  </div>
@@ -816,7 +816,7 @@
816
816
  <span class='ivar'>@draggable</span> <span class='op'>=</span> <span class='kw'>false</span>
817
817
  <span class='ivar'>@x</span> <span class='op'>=</span> <span class='id identifier rubyid_x'>x</span>
818
818
  <span class='ivar'>@y</span> <span class='op'>=</span> <span class='id identifier rubyid_y'>y</span>
819
- <span class='ivar'>@foreground</span> <span class='op'>=</span> <span class='const'>FXRGB</span><span class='lparen'>(</span><span class='int'>0</span><span class='comma'>,</span> <span class='int'>0</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span>
819
+ <span class='ivar'>@foreground</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../Fox.html" title="Fox (module)">Fox</a></span></span><span class='period'>.</span><span class='const'>FXRGB</span><span class='lparen'>(</span><span class='int'>0</span><span class='comma'>,</span> <span class='int'>0</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span>
820
820
  <span class='ivar'>@target</span> <span class='op'>=</span> <span class='kw'>nil</span>
821
821
  <span class='ivar'>@selector</span> <span class='op'>=</span> <span class='int'>0</span>
822
822
  <span class='kw'>end</span></pre>
@@ -1945,9 +1945,9 @@
1945
1945
  </div>
1946
1946
 
1947
1947
  <div id="footer">
1948
- Generated on Tue Mar 11 16:01:58 2025 by
1948
+ Generated on Thu Mar 26 09:49:31 2026 by
1949
1949
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1950
- 0.9.37 (ruby-3.5.0).
1950
+ 0.9.38 (ruby-4.0.0).
1951
1951
  </div>
1952
1952
 
1953
1953
  </div>
@@ -2021,9 +2021,9 @@
2021
2021
  </div>
2022
2022
 
2023
2023
  <div id="footer">
2024
- Generated on Tue Mar 11 16:01:58 2025 by
2024
+ Generated on Thu Mar 26 09:49:32 2026 by
2025
2025
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
2026
- 0.9.37 (ruby-3.5.0).
2026
+ 0.9.38 (ruby-4.0.0).
2027
2027
  </div>
2028
2028
 
2029
2029
  </div>
@@ -517,9 +517,9 @@
517
517
  </div>
518
518
 
519
519
  <div id="footer">
520
- Generated on Tue Mar 11 16:01:58 2025 by
520
+ Generated on Thu Mar 26 09:49:31 2026 by
521
521
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
522
- 0.9.37 (ruby-3.5.0).
522
+ 0.9.38 (ruby-4.0.0).
523
523
  </div>
524
524
 
525
525
  </div>
@@ -281,9 +281,9 @@
281
281
  </div>
282
282
 
283
283
  <div id="footer">
284
- Generated on Tue Mar 11 16:01:58 2025 by
284
+ Generated on Thu Mar 26 09:49:31 2026 by
285
285
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
286
- 0.9.37 (ruby-3.5.0).
286
+ 0.9.38 (ruby-4.0.0).
287
287
  </div>
288
288
 
289
289
  </div>
@@ -120,8 +120,6 @@
120
120
 
121
121
 
122
122
 
123
- <span class="note title readonly">readonly</span>
124
-
125
123
 
126
124
 
127
125
 
@@ -358,11 +356,11 @@
358
356
  <h2>Instance Attribute Details</h2>
359
357
 
360
358
 
361
- <span id=""></span>
359
+ <span id="font=-instance_method"></span>
362
360
  <div class="method_details first">
363
361
  <h3 class="signature first" id="font-instance_method">
364
362
 
365
- #<strong>font</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
363
+ #<strong>font</strong> &#x21d2; <tt>Object</tt>
366
364
 
367
365
 
368
366
 
@@ -385,12 +383,12 @@
385
383
  <pre class="lines">
386
384
 
387
385
 
388
- 246
389
386
  247
390
- 248</pre>
387
+ 248
388
+ 249</pre>
391
389
  </td>
392
390
  <td>
393
- <pre class="code"><span class="info file"># File 'lib/fox16/canvas.rb', line 246</span>
391
+ <pre class="code"><span class="info file"># File 'lib/fox16/canvas.rb', line 247</span>
394
392
 
395
393
  <span class='kw'>def</span> <span class='id identifier rubyid_font'>font</span>
396
394
  <span class='ivar'>@font</span>
@@ -599,9 +597,9 @@
599
597
  </div>
600
598
 
601
599
  <div id="footer">
602
- Generated on Tue Mar 11 16:01:58 2025 by
600
+ Generated on Thu Mar 26 09:49:31 2026 by
603
601
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
604
- 0.9.37 (ruby-3.5.0).
602
+ 0.9.38 (ruby-4.0.0).
605
603
  </div>
606
604
 
607
605
  </div>
data/docs/Fox/Canvas.html CHANGED
@@ -90,7 +90,7 @@
90
90
 
91
91
  <p>Links</p>
92
92
 
93
- <h5 id="label-"></h5>
93
+ <h5 id=""></h5>
94
94
 
95
95
  <p>Tk’s Canvas Widget</p>
96
96
 
@@ -131,9 +131,9 @@
131
131
  </div>
132
132
 
133
133
  <div id="footer">
134
- Generated on Tue Mar 11 16:01:30 2025 by
134
+ Generated on Thu Mar 26 09:48:23 2026 by
135
135
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
136
- 0.9.37 (ruby-3.5.0).
136
+ 0.9.38 (ruby-4.0.0).
137
137
  </div>
138
138
 
139
139
  </div>
@@ -540,9 +540,9 @@
540
540
  </div>
541
541
 
542
542
  <div id="footer">
543
- Generated on Tue Mar 11 16:01:30 2025 by
543
+ Generated on Thu Mar 26 09:48:23 2026 by
544
544
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
545
- 0.9.37 (ruby-3.5.0).
545
+ 0.9.38 (ruby-4.0.0).
546
546
  </div>
547
547
 
548
548
  </div>