gtk2 0.20.1 → 0.90.2

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 (443) hide show
  1. data/ChangeLog +30 -0
  2. data/Rakefile +60 -54
  3. data/ext/gtk2/Makefile +163 -0
  4. data/ext/gtk2/depend +10 -0
  5. data/ext/gtk2/extconf.rb +202 -0
  6. data/{src → ext/gtk2}/global.h +0 -0
  7. data/ext/gtk2/gtk2.def +27 -0
  8. data/{src → ext/gtk2}/init.c +0 -0
  9. data/{src → ext/gtk2}/rbgdk.c +0 -0
  10. data/{src → ext/gtk2}/rbgdk.h +0 -0
  11. data/{src → ext/gtk2}/rbgdkatom.c +0 -0
  12. data/{src → ext/gtk2}/rbgdkcairo.c +0 -0
  13. data/{src → ext/gtk2}/rbgdkcolor.c +0 -0
  14. data/{src → ext/gtk2}/rbgdkcolormap.c +0 -0
  15. data/{src → ext/gtk2}/rbgdkconst.c +0 -0
  16. data/{src → ext/gtk2}/rbgdkconversions.h +0 -0
  17. data/{src → ext/gtk2}/rbgdkcursor.c +0 -0
  18. data/{src → ext/gtk2}/rbgdkdevice.c +0 -0
  19. data/{src → ext/gtk2}/rbgdkdisplay.c +0 -0
  20. data/{src → ext/gtk2}/rbgdkdisplaymanager.c +0 -0
  21. data/{src → ext/gtk2}/rbgdkdragcontext.c +0 -0
  22. data/{src → ext/gtk2}/rbgdkdraw.c +0 -0
  23. data/{src → ext/gtk2}/rbgdkevent.c +0 -0
  24. data/{src → ext/gtk2}/rbgdkgc.c +0 -0
  25. data/{src → ext/gtk2}/rbgdkgeometry.c +0 -0
  26. data/{src → ext/gtk2}/rbgdkimage.c +0 -0
  27. data/{src → ext/gtk2}/rbgdkinput.c +0 -0
  28. data/{src → ext/gtk2}/rbgdkkeymap.c +0 -0
  29. data/{src → ext/gtk2}/rbgdkkeysyms.h +0 -466
  30. data/{src → ext/gtk2}/rbgdkkeyval.c +0 -0
  31. data/{src → ext/gtk2}/rbgdkpango.c +0 -0
  32. data/{src → ext/gtk2}/rbgdkpangorenderer.c +0 -0
  33. data/{src → ext/gtk2}/rbgdkpixbuf.c +0 -0
  34. data/{src → ext/gtk2}/rbgdkpixmap.c +0 -0
  35. data/{src → ext/gtk2}/rbgdkproperty.c +0 -0
  36. data/{src → ext/gtk2}/rbgdkrectangle.c +0 -0
  37. data/{src → ext/gtk2}/rbgdkregion.c +0 -0
  38. data/{src → ext/gtk2}/rbgdkrgb.c +0 -0
  39. data/{src → ext/gtk2}/rbgdkscreen.c +0 -0
  40. data/{src → ext/gtk2}/rbgdkselection.c +0 -0
  41. data/{src → ext/gtk2}/rbgdkthreads.c +0 -0
  42. data/{src → ext/gtk2}/rbgdktimecoord.c +0 -0
  43. data/{src → ext/gtk2}/rbgdkvisual.c +0 -0
  44. data/{src → ext/gtk2}/rbgdkwindow.c +0 -0
  45. data/{src → ext/gtk2}/rbgdkwindowattr.c +0 -0
  46. data/{src → ext/gtk2}/rbgdkx11.c +0 -0
  47. data/{src → ext/gtk2}/rbgtk.c +0 -0
  48. data/{src → ext/gtk2}/rbgtk.h +0 -4
  49. data/{src → ext/gtk2}/rbgtkaboutdialog.c +0 -0
  50. data/{src → ext/gtk2}/rbgtkaccelerator.c +0 -0
  51. data/{src → ext/gtk2}/rbgtkaccelgroup.c +0 -0
  52. data/{src → ext/gtk2}/rbgtkaccelgroupentry.c +0 -0
  53. data/{src → ext/gtk2}/rbgtkaccelkey.c +0 -0
  54. data/{src → ext/gtk2}/rbgtkaccellabel.c +0 -0
  55. data/{src → ext/gtk2}/rbgtkaccelmap.c +0 -0
  56. data/{src → ext/gtk2}/rbgtkaccessible.c +0 -0
  57. data/{src → ext/gtk2}/rbgtkaction.c +0 -0
  58. data/{src → ext/gtk2}/rbgtkactiongroup.c +0 -0
  59. data/{src → ext/gtk2}/rbgtkadjustment.c +0 -0
  60. data/{src → ext/gtk2}/rbgtkalignment.c +0 -0
  61. data/{src → ext/gtk2}/rbgtkallocation.c +0 -0
  62. data/{src → ext/gtk2}/rbgtkarrow.c +0 -0
  63. data/{src → ext/gtk2}/rbgtkaspectframe.c +0 -0
  64. data/{src → ext/gtk2}/rbgtkassistant.c +0 -0
  65. data/{src → ext/gtk2}/rbgtkbbox.c +0 -0
  66. data/{src → ext/gtk2}/rbgtkbin.c +0 -0
  67. data/{src → ext/gtk2}/rbgtkbindingset.c +0 -0
  68. data/{src → ext/gtk2}/rbgtkborder.c +0 -0
  69. data/{src → ext/gtk2}/rbgtkbox.c +0 -0
  70. data/{src → ext/gtk2}/rbgtkbuildable.c +0 -0
  71. data/{src → ext/gtk2}/rbgtkbuilder.c +0 -0
  72. data/{src → ext/gtk2}/rbgtkbutton.c +0 -0
  73. data/{src → ext/gtk2}/rbgtkcalendar.c +0 -0
  74. data/{src → ext/gtk2}/rbgtkcelleditable.c +0 -0
  75. data/{src → ext/gtk2}/rbgtkcelllayout.c +0 -0
  76. data/{src → ext/gtk2}/rbgtkcellrenderer.c +0 -0
  77. data/{src → ext/gtk2}/rbgtkcellrendereraccel.c +0 -0
  78. data/{src → ext/gtk2}/rbgtkcellrenderercombo.c +0 -0
  79. data/{src → ext/gtk2}/rbgtkcellrendererpixbuf.c +0 -0
  80. data/{src → ext/gtk2}/rbgtkcellrendererprogress.c +0 -0
  81. data/{src → ext/gtk2}/rbgtkcellrendererspin.c +0 -0
  82. data/{src → ext/gtk2}/rbgtkcellrenderertext.c +0 -0
  83. data/{src → ext/gtk2}/rbgtkcellrenderertoggle.c +0 -0
  84. data/{src → ext/gtk2}/rbgtkcellview.c +0 -0
  85. data/{src → ext/gtk2}/rbgtkcheckbutton.c +0 -0
  86. data/{src → ext/gtk2}/rbgtkcheckmenuitem.c +0 -0
  87. data/{src → ext/gtk2}/rbgtkclipboard.c +0 -0
  88. data/{src → ext/gtk2}/rbgtkcolorbutton.c +0 -0
  89. data/{src → ext/gtk2}/rbgtkcolorsel.c +0 -0
  90. data/{src → ext/gtk2}/rbgtkcolorselectiondialog.c +0 -0
  91. data/{src → ext/gtk2}/rbgtkcombo.c +0 -0
  92. data/{src → ext/gtk2}/rbgtkcombobox.c +0 -0
  93. data/{src → ext/gtk2}/rbgtkcomboboxentry.c +0 -0
  94. data/{src → ext/gtk2}/rbgtkconst.c +0 -0
  95. data/{src → ext/gtk2}/rbgtkcontainer.c +0 -0
  96. data/{src → ext/gtk2}/rbgtkconversions.h +0 -0
  97. data/{src → ext/gtk2}/rbgtkcurve.c +0 -0
  98. data/{src → ext/gtk2}/rbgtkdialog.c +0 -0
  99. data/{src → ext/gtk2}/rbgtkdrag.c +0 -0
  100. data/{src → ext/gtk2}/rbgtkdrawingarea.c +0 -0
  101. data/{src → ext/gtk2}/rbgtkeditable.c +0 -0
  102. data/{src → ext/gtk2}/rbgtkentry.c +0 -0
  103. data/{src → ext/gtk2}/rbgtkentrycompletion.c +0 -0
  104. data/{src → ext/gtk2}/rbgtkeventbox.c +0 -0
  105. data/{src → ext/gtk2}/rbgtkexpander.c +0 -0
  106. data/{src → ext/gtk2}/rbgtkfilechooser.c +0 -0
  107. data/{src → ext/gtk2}/rbgtkfilechooserbutton.c +0 -0
  108. data/{src → ext/gtk2}/rbgtkfilechooserdialog.c +0 -0
  109. data/{src → ext/gtk2}/rbgtkfilechooserwidget.c +0 -0
  110. data/{src → ext/gtk2}/rbgtkfilefilter.c +0 -0
  111. data/{src → ext/gtk2}/rbgtkfilesel.c +0 -0
  112. data/{src → ext/gtk2}/rbgtkfixed.c +0 -0
  113. data/{src → ext/gtk2}/rbgtkfontbutton.c +0 -0
  114. data/{src → ext/gtk2}/rbgtkfontselection.c +0 -0
  115. data/{src → ext/gtk2}/rbgtkfontselectiondialog.c +0 -0
  116. data/{src → ext/gtk2}/rbgtkframe.c +0 -0
  117. data/{src → ext/gtk2}/rbgtkgamma.c +0 -0
  118. data/{src → ext/gtk2}/rbgtkhandlebox.c +0 -0
  119. data/{src → ext/gtk2}/rbgtkhbbox.c +0 -0
  120. data/{src → ext/gtk2}/rbgtkhbox.c +0 -0
  121. data/{src → ext/gtk2}/rbgtkhpaned.c +0 -0
  122. data/{src → ext/gtk2}/rbgtkhruler.c +0 -0
  123. data/{src → ext/gtk2}/rbgtkhscale.c +0 -0
  124. data/{src → ext/gtk2}/rbgtkhscrollbar.c +0 -0
  125. data/{src → ext/gtk2}/rbgtkhseparator.c +0 -0
  126. data/{src → ext/gtk2}/rbgtkiconfactory.c +0 -0
  127. data/{src → ext/gtk2}/rbgtkiconinfo.c +0 -0
  128. data/{src → ext/gtk2}/rbgtkiconset.c +0 -0
  129. data/{src → ext/gtk2}/rbgtkiconsize.c +0 -0
  130. data/{src → ext/gtk2}/rbgtkiconsource.c +0 -0
  131. data/{src → ext/gtk2}/rbgtkicontheme.c +0 -0
  132. data/{src → ext/gtk2}/rbgtkiconview.c +0 -0
  133. data/{src → ext/gtk2}/rbgtkimage.c +0 -0
  134. data/{src → ext/gtk2}/rbgtkimagemenuitem.c +0 -0
  135. data/{src → ext/gtk2}/rbgtkimcontext.c +0 -0
  136. data/{src → ext/gtk2}/rbgtkimcontextsimple.c +0 -0
  137. data/{src → ext/gtk2}/rbgtkimmulticontext.c +0 -0
  138. data/{src → ext/gtk2}/rbgtkinits.c +2 -6
  139. data/{src → ext/gtk2}/rbgtkinputdialog.c +0 -0
  140. data/{src → ext/gtk2}/rbgtkinvisible.c +0 -0
  141. data/{src → ext/gtk2}/rbgtkitem.c +0 -0
  142. data/{src → ext/gtk2}/rbgtkitemfactory.c +0 -0
  143. data/{src → ext/gtk2}/rbgtklabel.c +0 -0
  144. data/{src → ext/gtk2}/rbgtklayout.c +0 -0
  145. data/{src → ext/gtk2}/rbgtklinkbutton.c +0 -0
  146. data/{src → ext/gtk2}/rbgtkliststore.c +0 -0
  147. data/{src → ext/gtk2}/rbgtkmacros.h +0 -0
  148. data/{src → ext/gtk2}/rbgtkmain.c +0 -0
  149. data/{src → ext/gtk2}/rbgtkmenu.c +0 -0
  150. data/{src → ext/gtk2}/rbgtkmenubar.c +0 -0
  151. data/{src → ext/gtk2}/rbgtkmenuitem.c +0 -0
  152. data/{src → ext/gtk2}/rbgtkmenushell.c +0 -0
  153. data/{src → ext/gtk2}/rbgtkmenutoolbutton.c +0 -0
  154. data/{src → ext/gtk2}/rbgtkmessagedialog.c +0 -0
  155. data/{src → ext/gtk2}/rbgtkmisc.c +0 -0
  156. data/{src → ext/gtk2}/rbgtknotebook.c +0 -0
  157. data/{src → ext/gtk2}/rbgtkobject.c +0 -0
  158. data/{src → ext/gtk2}/rbgtkoptionmenu.c +0 -0
  159. data/{src → ext/gtk2}/rbgtkpagesetup.c +0 -0
  160. data/{src → ext/gtk2}/rbgtkpagesetupunixdialog.c +0 -0
  161. data/{src → ext/gtk2}/rbgtkpaned.c +0 -0
  162. data/{src → ext/gtk2}/rbgtkpapersize.c +0 -0
  163. data/{src → ext/gtk2}/rbgtkplug.c +0 -0
  164. data/{src → ext/gtk2}/rbgtkprintcontext.c +0 -0
  165. data/{src → ext/gtk2}/rbgtkprinter.c +0 -0
  166. data/{src → ext/gtk2}/rbgtkprintjob.c +0 -0
  167. data/{src → ext/gtk2}/rbgtkprintoperation.c +0 -0
  168. data/{src → ext/gtk2}/rbgtkprintoperationpreview.c +0 -0
  169. data/{src → ext/gtk2}/rbgtkprintsettings.c +0 -0
  170. data/{src → ext/gtk2}/rbgtkprintunixdialog.c +0 -0
  171. data/{src → ext/gtk2}/rbgtkprogress.c +0 -0
  172. data/{src → ext/gtk2}/rbgtkprogressbar.c +0 -0
  173. data/{src → ext/gtk2}/rbgtkradioaction.c +0 -0
  174. data/{src → ext/gtk2}/rbgtkradiobutton.c +0 -0
  175. data/{src → ext/gtk2}/rbgtkradiomenuitem.c +0 -0
  176. data/{src → ext/gtk2}/rbgtkradiotoolbutton.c +0 -0
  177. data/{src → ext/gtk2}/rbgtkrange.c +0 -0
  178. data/{src → ext/gtk2}/rbgtkrc.c +0 -0
  179. data/{src → ext/gtk2}/rbgtkrcstyle.c +0 -0
  180. data/{src → ext/gtk2}/rbgtkrecentaction.c +0 -0
  181. data/{src → ext/gtk2}/rbgtkrecentchooser.c +0 -0
  182. data/{src → ext/gtk2}/rbgtkrecentchooserdialog.c +0 -0
  183. data/{src → ext/gtk2}/rbgtkrecentchoosermenu.c +0 -0
  184. data/{src → ext/gtk2}/rbgtkrecentchooserwidget.c +0 -0
  185. data/{src → ext/gtk2}/rbgtkrecentdata.c +0 -0
  186. data/{src → ext/gtk2}/rbgtkrecentfilter.c +0 -0
  187. data/{src → ext/gtk2}/rbgtkrecentfilterinfo.c +0 -0
  188. data/{src → ext/gtk2}/rbgtkrecentinfo.c +0 -0
  189. data/{src → ext/gtk2}/rbgtkrecentmanager.c +0 -0
  190. data/{src → ext/gtk2}/rbgtkruler.c +0 -0
  191. data/{src → ext/gtk2}/rbgtkscale.c +0 -0
  192. data/{src → ext/gtk2}/rbgtkscalebutton.c +0 -0
  193. data/{src → ext/gtk2}/rbgtkscrollbar.c +0 -0
  194. data/{src → ext/gtk2}/rbgtkscrolledwindow.c +0 -0
  195. data/{src → ext/gtk2}/rbgtkselection.c +0 -0
  196. data/{src → ext/gtk2}/rbgtkselectiondata.c +0 -0
  197. data/{src → ext/gtk2}/rbgtkseparator.c +0 -0
  198. data/{src → ext/gtk2}/rbgtkseparatormenuitem.c +0 -0
  199. data/{src → ext/gtk2}/rbgtkseparatortoolitem.c +0 -0
  200. data/{src → ext/gtk2}/rbgtksettings.c +0 -0
  201. data/{src → ext/gtk2}/rbgtksizegroup.c +0 -0
  202. data/{src → ext/gtk2}/rbgtksocket.c +0 -0
  203. data/{src → ext/gtk2}/rbgtkspinbutton.c +0 -0
  204. data/{src → ext/gtk2}/rbgtkstatusbar.c +0 -0
  205. data/{src → ext/gtk2}/rbgtkstatusicon.c +0 -0
  206. data/{src → ext/gtk2}/rbgtkstock.c +0 -0
  207. data/{src → ext/gtk2}/rbgtkstyle.c +0 -0
  208. data/{src → ext/gtk2}/rbgtktable.c +0 -0
  209. data/{src → ext/gtk2}/rbgtktargetlist.c +0 -0
  210. data/{src → ext/gtk2}/rbgtktearoffmenuitem.c +0 -0
  211. data/{src → ext/gtk2}/rbgtktextappearance.c +0 -0
  212. data/{src → ext/gtk2}/rbgtktextattributes.c +0 -0
  213. data/{src → ext/gtk2}/rbgtktextbuffer.c +0 -0
  214. data/{src → ext/gtk2}/rbgtktextchild.c +0 -0
  215. data/{src → ext/gtk2}/rbgtktextiter.c +0 -0
  216. data/{src → ext/gtk2}/rbgtktextmark.c +0 -0
  217. data/{src → ext/gtk2}/rbgtktexttag.c +0 -0
  218. data/{src → ext/gtk2}/rbgtktexttagtable.c +0 -0
  219. data/{src → ext/gtk2}/rbgtktextview.c +0 -0
  220. data/{src → ext/gtk2}/rbgtktoggleaction.c +0 -0
  221. data/{src → ext/gtk2}/rbgtktogglebutton.c +0 -0
  222. data/{src → ext/gtk2}/rbgtktoggletoolbutton.c +0 -0
  223. data/{src → ext/gtk2}/rbgtktoolbar.c +0 -0
  224. data/{src → ext/gtk2}/rbgtktoolbutton.c +0 -0
  225. data/{src → ext/gtk2}/rbgtktoolitem.c +0 -0
  226. data/{src → ext/gtk2}/rbgtktooltip.c +0 -0
  227. data/{src → ext/gtk2}/rbgtktooltips.c +0 -0
  228. data/{src → ext/gtk2}/rbgtktreedragdest.c +0 -0
  229. data/{src → ext/gtk2}/rbgtktreedragsource.c +0 -0
  230. data/{src → ext/gtk2}/rbgtktreeiter.c +0 -0
  231. data/{src → ext/gtk2}/rbgtktreemodel.c +0 -0
  232. data/{src → ext/gtk2}/rbgtktreemodelfilter.c +0 -0
  233. data/{src → ext/gtk2}/rbgtktreemodelsort.c +0 -0
  234. data/{src → ext/gtk2}/rbgtktreepath.c +0 -0
  235. data/{src → ext/gtk2}/rbgtktreerowreference.c +0 -0
  236. data/{src → ext/gtk2}/rbgtktreeselection.c +0 -0
  237. data/{src → ext/gtk2}/rbgtktreesortable.c +0 -0
  238. data/{src → ext/gtk2}/rbgtktreestore.c +0 -0
  239. data/{src → ext/gtk2}/rbgtktreeview.c +0 -0
  240. data/{src → ext/gtk2}/rbgtktreeviewcolumn.c +0 -0
  241. data/{src → ext/gtk2}/rbgtkuimanager.c +0 -0
  242. data/{src → ext/gtk2}/rbgtkvbbox.c +0 -0
  243. data/{src → ext/gtk2}/rbgtkvbox.c +0 -0
  244. data/{src → ext/gtk2}/rbgtkviewport.c +0 -0
  245. data/{src → ext/gtk2}/rbgtkvolumebutton.c +0 -0
  246. data/{src → ext/gtk2}/rbgtkvpaned.c +0 -0
  247. data/{src → ext/gtk2}/rbgtkvruler.c +0 -0
  248. data/{src → ext/gtk2}/rbgtkvscale.c +0 -0
  249. data/{src → ext/gtk2}/rbgtkvscrollbar.c +0 -0
  250. data/{src → ext/gtk2}/rbgtkvseparator.c +0 -0
  251. data/{src → ext/gtk2}/rbgtkwidget.c +0 -0
  252. data/{src → ext/gtk2}/rbgtkwindow.c +0 -0
  253. data/{src → ext/gtk2}/rbgtkwindowgroup.c +0 -0
  254. data/extconf.rb +48 -113
  255. data/{src/lib → lib}/gtk2.rb +0 -0
  256. data/{src/lib → lib}/gtk2/base.rb +12 -1
  257. data/sample/gtk-demo/README +7 -0
  258. data/sample/gtk-demo/alphatest.png +0 -0
  259. data/sample/gtk-demo/apple-red.png +0 -0
  260. data/sample/gtk-demo/appwindow.rb +233 -0
  261. data/sample/gtk-demo/background.jpg +0 -0
  262. data/sample/gtk-demo/builder.rb +51 -0
  263. data/sample/gtk-demo/button_box.rb +84 -0
  264. data/sample/gtk-demo/cairo-arc-negative.rb +41 -0
  265. data/sample/gtk-demo/cairo-arc.rb +41 -0
  266. data/sample/gtk-demo/cairo-clip-image.rb +51 -0
  267. data/sample/gtk-demo/cairo-clip-rectangle.rb +35 -0
  268. data/sample/gtk-demo/cairo-clip.rb +35 -0
  269. data/sample/gtk-demo/cairo-curve-rectangle.rb +76 -0
  270. data/sample/gtk-demo/cairo-curve-to.rb +43 -0
  271. data/sample/gtk-demo/cairo-dash.rb +39 -0
  272. data/sample/gtk-demo/cairo-fill-and-stroke.rb +32 -0
  273. data/sample/gtk-demo/cairo-fill-and-stroke2.rb +38 -0
  274. data/sample/gtk-demo/cairo-gradient.rb +35 -0
  275. data/sample/gtk-demo/cairo-image-pattern.rb +39 -0
  276. data/sample/gtk-demo/cairo-image.rb +49 -0
  277. data/sample/gtk-demo/cairo-line-cap.rb +53 -0
  278. data/sample/gtk-demo/cairo-line-join.rb +41 -0
  279. data/sample/gtk-demo/cairo-long-lines.rb +41 -0
  280. data/sample/gtk-demo/cairo-operator.rb +83 -0
  281. data/sample/gtk-demo/cairo-path.rb +28 -0
  282. data/sample/gtk-demo/cairo-pattern-fill.rb +88 -0
  283. data/sample/gtk-demo/cairo-self-intersect.rb +32 -0
  284. data/sample/gtk-demo/cairo-text-align-center.rb +45 -0
  285. data/sample/gtk-demo/cairo-text-extents.rb +46 -0
  286. data/sample/gtk-demo/cairo-text.rb +43 -0
  287. data/sample/gtk-demo/changedisplay.rb +408 -0
  288. data/sample/gtk-demo/clipboard.rb +72 -0
  289. data/sample/gtk-demo/colorsel.rb +84 -0
  290. data/sample/gtk-demo/common.rb +88 -0
  291. data/sample/gtk-demo/demo.ui +258 -0
  292. data/sample/gtk-demo/dialog.rb +137 -0
  293. data/sample/gtk-demo/drawingarea.rb +226 -0
  294. data/sample/gtk-demo/editable_cells.rb +172 -0
  295. data/sample/gtk-demo/entry_completion.rb +63 -0
  296. data/sample/gtk-demo/expander.rb +40 -0
  297. data/sample/gtk-demo/floppybuddy.gif +0 -0
  298. data/sample/gtk-demo/gnome-applets.png +0 -0
  299. data/sample/gtk-demo/gnome-calendar.png +0 -0
  300. data/sample/gtk-demo/gnome-foot.png +0 -0
  301. data/sample/gtk-demo/gnome-fs-directory.png +0 -0
  302. data/sample/gtk-demo/gnome-fs-regular.png +0 -0
  303. data/sample/gtk-demo/gnome-gimp.png +0 -0
  304. data/sample/gtk-demo/gnome-gmush.png +0 -0
  305. data/sample/gtk-demo/gnome-gsame.png +0 -0
  306. data/sample/gtk-demo/gnu-keys.png +0 -0
  307. data/sample/gtk-demo/gtk-logo-rgb.gif +0 -0
  308. data/sample/gtk-demo/hypertext.rb +211 -0
  309. data/sample/gtk-demo/iconview.rb +109 -0
  310. data/sample/gtk-demo/images.rb +197 -0
  311. data/sample/gtk-demo/item_factory.rb +94 -0
  312. data/sample/gtk-demo/list_store.rb +138 -0
  313. data/sample/gtk-demo/main.rb +380 -0
  314. data/sample/gtk-demo/menus.rb +172 -0
  315. data/sample/gtk-demo/panes.rb +156 -0
  316. data/sample/gtk-demo/pixbufs.rb +176 -0
  317. data/sample/gtk-demo/printing.rb +128 -0
  318. data/sample/gtk-demo/rotated_text.rb +84 -0
  319. data/sample/gtk-demo/ruby-gnome2-logo.png +0 -0
  320. data/sample/gtk-demo/sizegroup.rb +118 -0
  321. data/sample/gtk-demo/stock_browser.rb +235 -0
  322. data/sample/gtk-demo/textview.rb +435 -0
  323. data/sample/gtk-demo/tree_store.rb +270 -0
  324. data/sample/misc/aboutdialog.rb +42 -0
  325. data/sample/misc/aboutdialog2.rb +42 -0
  326. data/sample/misc/alpha-demo.rb +70 -0
  327. data/sample/misc/assistant.rb +347 -0
  328. data/sample/misc/bindings.rb +107 -0
  329. data/sample/misc/button.rb +69 -0
  330. data/sample/misc/button2.rb +28 -0
  331. data/sample/misc/buttonbox.rb +93 -0
  332. data/sample/misc/cairo-pong.rb +215 -0
  333. data/sample/misc/calendar.rb +62 -0
  334. data/sample/misc/checkbutton.rb +46 -0
  335. data/sample/misc/colorselection.rb +25 -0
  336. data/sample/misc/combo_check.rb +71 -0
  337. data/sample/misc/combobox.rb +86 -0
  338. data/sample/misc/composited-windows.rb +113 -0
  339. data/sample/misc/cursor.rb +32 -0
  340. data/sample/misc/dialog.rb +44 -0
  341. data/sample/misc/dialog2.rb +39 -0
  342. data/sample/misc/dnd.rb +65 -0
  343. data/sample/misc/dndtreeview.rb +56 -0
  344. data/sample/misc/drag-move.rb +131 -0
  345. data/sample/misc/drawing.rb +90 -0
  346. data/sample/misc/entry.rb +34 -0
  347. data/sample/misc/entrycompletion.rb +39 -0
  348. data/sample/misc/expander.rb +27 -0
  349. data/sample/misc/filechooser.rb +49 -0
  350. data/sample/misc/fileselection.rb +26 -0
  351. data/sample/misc/frame.rb +69 -0
  352. data/sample/misc/gc.rb +59 -0
  353. data/sample/misc/gdkscreen.rb +32 -0
  354. data/sample/misc/gnome-logo-icon.png +0 -0
  355. data/sample/misc/helloworld.rb +35 -0
  356. data/sample/misc/iconview.rb +38 -0
  357. data/sample/misc/image.rb +42 -0
  358. data/sample/misc/itemfactory.rb +73 -0
  359. data/sample/misc/itemfactory2.rb +74 -0
  360. data/sample/misc/keyboard_grab.rb +29 -0
  361. data/sample/misc/label.rb +33 -0
  362. data/sample/misc/linkbutton.rb +42 -0
  363. data/sample/misc/listview.rb +92 -0
  364. data/sample/misc/menu.rb +81 -0
  365. data/sample/misc/misc_button.rb +59 -0
  366. data/sample/misc/mouse-gesture.rb +465 -0
  367. data/sample/misc/pangorenderer.rb +66 -0
  368. data/sample/misc/pointer_grab.rb +34 -0
  369. data/sample/misc/print.rb +247 -0
  370. data/sample/misc/properties.rb +85 -0
  371. data/sample/misc/radiobutton.rb +47 -0
  372. data/sample/misc/recentchooserdialog.rb +59 -0
  373. data/sample/misc/rgtk+cairo.rb +44 -0
  374. data/sample/misc/scalebutton.rb +25 -0
  375. data/sample/misc/settings.rb +41 -0
  376. data/sample/misc/statusicon.rb +123 -0
  377. data/sample/misc/stock.rb +36 -0
  378. data/sample/misc/style_property.rb +67 -0
  379. data/sample/misc/style_property.rc +19 -0
  380. data/sample/misc/t-gtkplug.rb +58 -0
  381. data/sample/misc/t-gtksocket.rb +65 -0
  382. data/sample/misc/test.xpm +92 -0
  383. data/sample/misc/textbuffer_serialize.rb +130 -0
  384. data/sample/misc/threads.rb +72 -0
  385. data/sample/misc/to_drawable.rb +42 -0
  386. data/sample/misc/togglebutton.rb +34 -0
  387. data/sample/misc/toolbar.rb +55 -0
  388. data/sample/misc/tooltips.rb +204 -0
  389. data/sample/misc/tree_combo.rb +85 -0
  390. data/sample/misc/tree_progress.rb +69 -0
  391. data/sample/misc/treemodelfilter.rb +55 -0
  392. data/sample/misc/treeview.rb +71 -0
  393. data/sample/misc/uimanager.rb +148 -0
  394. data/sample/misc/uimanager2.rb +91 -0
  395. data/sample/misc/uimanager2.xml +36 -0
  396. data/sample/misc/window.rb +24 -0
  397. data/sample/misc/xbm_cursor.rb +43 -0
  398. data/sample/testgtk/3DRings.xpm +116 -0
  399. data/sample/testgtk/FilesQueue.xpm +98 -0
  400. data/sample/testgtk/Modeller.xpm +117 -0
  401. data/sample/testgtk/README +14 -0
  402. data/sample/testgtk/button.rb +133 -0
  403. data/sample/testgtk/buttonbox.rb +108 -0
  404. data/sample/testgtk/check-n.xpm +21 -0
  405. data/sample/testgtk/check-y.xpm +21 -0
  406. data/sample/testgtk/checkbutton.rb +67 -0
  407. data/sample/testgtk/circles.xbm +46 -0
  408. data/sample/testgtk/colorselect.rb +33 -0
  409. data/sample/testgtk/dialog.rb +47 -0
  410. data/sample/testgtk/entry.rb +73 -0
  411. data/sample/testgtk/filesel.rb +67 -0
  412. data/sample/testgtk/fontselection.rb +56 -0
  413. data/sample/testgtk/gammacurve.rb +70 -0
  414. data/sample/testgtk/labels.rb +73 -0
  415. data/sample/testgtk/layout.rb +108 -0
  416. data/sample/testgtk/marble.xpm +408 -0
  417. data/sample/testgtk/menu.rb +79 -0
  418. data/sample/testgtk/notebook.rb +281 -0
  419. data/sample/testgtk/pixmap.rb +58 -0
  420. data/sample/testgtk/progressbar.rb +181 -0
  421. data/sample/testgtk/radiobutton.rb +61 -0
  422. data/sample/testgtk/range.rb +65 -0
  423. data/sample/testgtk/reparent.rb +91 -0
  424. data/sample/testgtk/rulers.rb +46 -0
  425. data/sample/testgtk/sample.rb +80 -0
  426. data/sample/testgtk/savedposition.rb +87 -0
  427. data/sample/testgtk/scrolledwindow.rb +67 -0
  428. data/sample/testgtk/shapedwindow.rb +99 -0
  429. data/sample/testgtk/spinbutton.rb +181 -0
  430. data/sample/testgtk/statusbar.rb +89 -0
  431. data/sample/testgtk/test.xpm +92 -0
  432. data/sample/testgtk/testgtk.rb +179 -0
  433. data/sample/testgtk/testgtkrc +146 -0
  434. data/sample/testgtk/testgtkrc2 +21 -0
  435. data/sample/testgtk/togglebutton.rb +53 -0
  436. data/sample/testgtk/toolbar.rb +82 -0
  437. data/sample/testgtk/tooltips.rb +41 -0
  438. data/sample/testgtk/wmhints.rb +40 -0
  439. data/test/run-test.rb +10 -8
  440. data/test/test_gtk_builder.rb +1 -1
  441. metadata +495 -334
  442. data/src/makeinits.rb +0 -57
  443. data/src/makekeysyms.rb +0 -5
@@ -0,0 +1,63 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ # $Id: entry_completion.rb,v 1.3 2005/02/25 17:09:24 kzys Exp $
4
+ =begin
5
+ = Entry Completion (EntryCompletion)
6
+
7
+ GtkEntryCompletion provides a mechanism for adding support for
8
+ completion in GtkEntry.
9
+ =end
10
+
11
+ require 'common'
12
+
13
+ module Demo
14
+ class EntryCompletion < Gtk::Dialog
15
+ def initialize
16
+ super('GtkEntryCompletion',
17
+ nil, # parent
18
+ 0,
19
+ [Gtk::Stock::CLOSE, Gtk::Dialog::RESPONSE_NONE])
20
+
21
+ self.resizable = false
22
+
23
+ signal_connect('response') do
24
+ self.destroy
25
+ end
26
+
27
+ vbox = Gtk::VBox.new(false, 5)
28
+ self.vbox.pack_start(vbox, true, true)
29
+ vbox.border_width = 5
30
+
31
+ label = Gtk::Label.new
32
+ label.markup = 'Completion demo, try writing <b>total</b> or <b>gnome</b> for example'
33
+ vbox.pack_start(label, false, false)
34
+
35
+ # Create our entry
36
+ entry = Gtk::Entry.new
37
+ vbox.pack_start(entry, false, false)
38
+
39
+ # Create the completion object
40
+ completion = Gtk::EntryCompletion.new
41
+
42
+ # Assign the completion to the entry
43
+ entry.completion = completion
44
+
45
+ # Create a tree model and use it as the completion model
46
+ completion.model = create_completion_model
47
+
48
+ # Use model column 0 as the text column
49
+ completion.text_column = 0
50
+ end
51
+
52
+
53
+ def create_completion_model
54
+ store = Gtk::ListStore.new(String)
55
+ %w(GNOME total totally).each do |word|
56
+ iter = store.append
57
+ iter[0] = word
58
+ end
59
+
60
+ store
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,40 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ # $Id: expander.rb,v 1.2 2005/02/25 17:09:25 kzys Exp $
4
+ =begin
5
+ = Expander (Expander)
6
+
7
+ GtkExpander allows to provide additional content that is initially hidden.
8
+ This is also known as "disclosure triangle".
9
+ =end
10
+
11
+ require 'common'
12
+
13
+ module Demo
14
+ class Expander < Gtk::Dialog
15
+ def initialize
16
+ super('GtkExpander',
17
+ nil, # parent
18
+ 0,
19
+ [Gtk::Stock::CLOSE, Gtk::Dialog::RESPONSE_NONE])
20
+ self.resizable = false
21
+
22
+ signal_connect('response') do
23
+ self.destroy
24
+ end
25
+
26
+ vbox = Gtk::VBox.new(false, 5)
27
+ self.vbox.pack_start(vbox, true, true)
28
+ vbox.border_width = 5
29
+
30
+ label = Gtk::Label.new('Expander demo. CLick on the triangle for details.')
31
+ vbox.pack_start(label, false, false)
32
+
33
+ # Create the expander
34
+ expander = Gtk::Expander.new('Details')
35
+ vbox.pack_start(expander, false, false)
36
+
37
+ expander.add(Gtk::Label.new('Details can be shown or hidden.'))
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,211 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: hypertext.rb,v 1.2 2005/12/01 09:27:01 ktou Exp $
5
+ =begin
6
+ = Text Widget/Hypertext
7
+
8
+ Usually, tags modify the appearance of text in the view, e.g. making it
9
+ bold or colored or underlined. But tags are not restricted to appearance.
10
+ They can also affect the behavior of mouse and key presses, as this demo
11
+ shows.
12
+ =end
13
+
14
+ require 'common'
15
+
16
+ module Demo
17
+ class Hypertext < BasicWindow
18
+ def initialize
19
+ super('Hypertext')
20
+
21
+ @hand_cursor = Gdk::Cursor.new(Gdk::Cursor::HAND2)
22
+ @regular_cursor = Gdk::Cursor.new(Gdk::Cursor::XTERM)
23
+ @hovering = false
24
+
25
+ set_default_size(450, 450)
26
+ self.border_width = 0
27
+
28
+ view = Gtk::TextView.new
29
+
30
+ view.wrap_mode = Gtk::TextTag::WRAP_WORD
31
+
32
+ view.signal_connect('key-press-event') do |*args|
33
+ key_press_event(*args)
34
+ end
35
+ view.signal_connect('event-after') do |*args|
36
+ event_after(*args)
37
+ end
38
+ view.signal_connect('motion-notify-event') do |*args|
39
+ motion_notify_event(*args)
40
+ end
41
+ view.signal_connect('visibility-notify-event') do |*args|
42
+ visibility_notify_event(*args)
43
+ end
44
+
45
+ buffer = view.buffer
46
+
47
+ sw = Gtk::ScrolledWindow.new
48
+ sw.set_policy(Gtk::POLICY_AUTOMATIC,
49
+ Gtk::POLICY_AUTOMATIC)
50
+
51
+ add(sw)
52
+ sw.add(view)
53
+
54
+ show_page(buffer, 1)
55
+ end
56
+
57
+
58
+ # Inserts a piece of text into the buffer, giving it the usual
59
+ # appearance of a hyperlink in a web browser: blue and underlined.
60
+ # Additionally, attaches some data on the tag, to make it recognizable
61
+ # as a link.
62
+ def insert_link(buffer, iter, text, page)
63
+ tag = buffer.create_tag(nil,
64
+ {
65
+ 'foreground' => 'blue',
66
+ 'underline' => Pango::AttrUnderline::SINGLE,
67
+ })
68
+ tag.page = page
69
+
70
+ buffer.insert(iter, text, tag)
71
+ print("Insert #{tag}:#{page}\n")
72
+ end
73
+
74
+ # Fills the buffer with text and interspersed links. In any real
75
+ # hypertext app, this method would parse a file to identify the links.
76
+ def show_page(buffer, page)
77
+ puts
78
+
79
+ buffer.text = ''
80
+ iter = buffer.get_iter_at_offset(0)
81
+
82
+ case page
83
+ when 1
84
+ buffer.insert(iter, 'Some text ot show that simple ')
85
+ insert_link(buffer, iter, 'hypertext', 3)
86
+ buffer.insert(iter, ' can easily be realized with ')
87
+ insert_link(buffer, iter, 'tags', 2)
88
+ buffer.insert(iter, '.')
89
+ when 2
90
+ buffer.insert(iter,
91
+ %Q[A tag is an attribute that can be applied to some range of text. For example, a tag might be called "bold" and make the text insid the tag bold. However, the tag concept is more general than that; tags don't have to affect appearance. They can instead affect the behavior of mouse and key presses, "lock" a range of text so the user can't edit it, or countless other things.])
92
+ buffer.insert(iter, "\n")
93
+ insert_link(buffer, iter, 'Go back', 1)
94
+ when 3
95
+ tag = buffer.create_tag(nil,
96
+ {
97
+ 'weight' =>
98
+ Pango::FontDescription::WEIGHT_BOLD
99
+ })
100
+ buffer.insert(iter, "hypertext:\n", tag);
101
+ buffer.insert(iter, %Q[machine-readable text that is not sequential but is organized so that related items of information are connected.\n])
102
+ insert_link(buffer, iter, 'Go back', 1)
103
+ end
104
+ end
105
+
106
+ # Looks at all tags covering the position of iter in the text view,
107
+ # and if one of them is a link, follow it by showing the page identified
108
+ # by the data attached to it.
109
+ def follow_if_link(text_view, iter)
110
+ tags = iter.tags
111
+ tags.each do |tag|
112
+ print("Follow #{tag}:#{tag.page}\n")
113
+ if tag.page
114
+ show_page(text_view.buffer, tag.page)
115
+ break
116
+ end
117
+ end
118
+ end
119
+
120
+ # Links can be activated by pressing Enter.
121
+ def key_press_event(text_view, event)
122
+ case event.keyval
123
+ when Gdk::Keyval::GDK_Return, Gdk::Keyval::GDK_KP_Enter
124
+ buffer = text_view.buffer
125
+ iter = buffer.get_iter_at_mark(buffer.get_mark("insert"))
126
+ follow_if_link(text_view, iter)
127
+ end
128
+
129
+ false
130
+ end
131
+
132
+ # Links can also be activated by clicking.
133
+ def event_after(text_view, event)
134
+ unless event.kind_of?(Gdk::EventButton) and event.button == 1
135
+ return false
136
+ end
137
+
138
+ buffer = text_view.buffer
139
+
140
+ # we shouldn't follow a link if the user has selected something
141
+ range = buffer.selection_bounds
142
+ if range and range[0].offset != range[1].offset
143
+ return false
144
+ end
145
+
146
+ x, y = text_view.window_to_buffer_coords(Gtk::TextView::WINDOW_WIDGET,
147
+ event.x, event.y)
148
+ iter = text_view.get_iter_at_location(x, y)
149
+
150
+ follow_if_link(text_view, iter)
151
+ end
152
+
153
+ # Looks at all tags covering the position (x, y) in the text view,
154
+ # and if one of them is a link, change the cursor to the "hands" cursor
155
+ # typically used by web browsers.
156
+ def set_cursor_if_appropriate(text_view, x, y)
157
+
158
+ buffer = text_view.buffer
159
+ iter = text_view.get_iter_at_location(x, y)
160
+
161
+ hovering = false
162
+
163
+ tags = iter.tags
164
+ tags.each do |t|
165
+ if t.page
166
+ hovering = true
167
+ break
168
+ end
169
+ end
170
+
171
+ if hovering != @hovering
172
+ @hovering = hovering
173
+
174
+ window = text_view.get_window(Gtk::TextView::WINDOW_TEXT)
175
+
176
+ window.cursor = if @hovering
177
+ @hand_cursor
178
+ else
179
+ @regular_cursor
180
+ end
181
+ end
182
+ end
183
+
184
+ # Update the cursor image if the pointer moved.
185
+ def motion_notify_event(text_view, event)
186
+ x, y = text_view.window_to_buffer_coords(Gtk::TextView::WINDOW_WIDGET,
187
+ event.x, event.y)
188
+ set_cursor_if_appropriate(text_view, x, y)
189
+ text_view.window.pointer
190
+
191
+ false
192
+ end
193
+
194
+ # Also update the cursor image if the window becomes visible
195
+ # (e.g. when a window covering it got iconified).
196
+ def visibility_notify_event (text_view, event)
197
+ window, wx, wy = text_view.window.pointer
198
+ bx, by = text_view.window_to_buffer_coords(Gtk::TextView::WINDOW_WIDGET,
199
+ wx, wy)
200
+ set_cursor_if_appropriate(text_view, bx, by)
201
+
202
+ false
203
+ end
204
+ end
205
+ end
206
+
207
+ module Gtk
208
+ class TextTag
209
+ attr_accessor :page
210
+ end
211
+ end
@@ -0,0 +1,109 @@
1
+ # Copyright (c) 2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: iconview.rb,v 1.7 2007/08/05 15:41:31 mutoh Exp $
5
+ =begin
6
+ = Icon View (IconView)
7
+
8
+ The Gtk::IconView widget is used to display and manipulate icons.
9
+ It uses a Gtk::TreeModel for data storage, so the list store example
10
+ might be helpful.
11
+ =end
12
+ $KCODE="u"
13
+ require 'common'
14
+
15
+ module Demo
16
+ class IconView < Demo::BasicWindow
17
+ COL_PATH, COL_DISPLAY_NAME, COL_IS_DIR, COL_PIXBUF = (0..3).to_a
18
+
19
+ def fill_store
20
+ @store.clear
21
+ Dir.glob(File.join(@parent, "*")).each do |path|
22
+ is_dir = FileTest.directory?(path)
23
+ iter = @store.append
24
+ # set COL_DISPLAY_NAME first because changing an iter will trigger the
25
+ # sort function; if we set something else first, the value of
26
+ # COL_DISPLAY_NAME for this row will be "nil" and the sort function will fail
27
+ puts path
28
+ #puts GLib.convert(GLib.filename_to_utf8(path), "Shift_JIS", "UTF-8")
29
+ #puts File.basename(GLib.convert(GLib.filename_to_utf8(path), "Shift_JIS", "UTF-8"))
30
+ # iter[COL_DISPLAY_NAME] = File.basename(GLib.filename_to_utf8(path))
31
+ iter[COL_DISPLAY_NAME] = GLib.filename_to_utf8(path)
32
+ iter[COL_PATH] = path
33
+ iter[COL_IS_DIR] = is_dir
34
+ iter[COL_PIXBUF] = is_dir ? @folder_pixbuf : @file_pixbuf
35
+ end
36
+ end
37
+
38
+ def initialize
39
+ super('Gtk::IconView demo')
40
+ @file_pixbuf = Gdk::Pixbuf.new(Demo.find_file("gnome-fs-regular.png"))
41
+ @folder_pixbuf = Gdk::Pixbuf.new(Demo.find_file("gnome-fs-directory.png"))
42
+
43
+ @store = Gtk::ListStore.new(String, String, TrueClass, Gdk::Pixbuf)
44
+ @parent = "/"
45
+
46
+ @store.set_default_sort_func do |a, b|
47
+ if !a[COL_IS_DIR] and b[COL_IS_DIR]
48
+ 1
49
+ elsif a[COL_IS_DIR] and !b[COL_IS_DIR]
50
+ -1
51
+ else
52
+ a[COL_DISPLAY_NAME] <=> b[COL_DISPLAY_NAME]
53
+ end
54
+ end
55
+ @store.set_sort_column_id(Gtk::TreeSortable::DEFAULT_SORT_COLUMN_ID,
56
+ Gtk::SORT_ASCENDING)
57
+
58
+ fill_store
59
+ set_default_size(650, 400)
60
+ set_border_width(8)
61
+
62
+ vbox = Gtk::VBox.new(false, 0)
63
+ add(vbox)
64
+
65
+ toolbar = Gtk::Toolbar.new
66
+ vbox.pack_start(toolbar, false, false, 0)
67
+
68
+ up_button = Gtk::ToolButton.new(Gtk::Stock::GO_UP)
69
+ up_button.important = true
70
+ up_button.sensitive = false
71
+ toolbar.insert(-1, up_button)
72
+ up_button.signal_connect("clicked") do
73
+ @parent = File.dirname(@parent)
74
+ fill_store
75
+ up_button.sensitive = @parent != "/"
76
+ end
77
+
78
+ home_button = Gtk::ToolButton.new(Gtk::Stock::HOME)
79
+ home_button.important = true
80
+ toolbar.insert(-1, home_button)
81
+ home_button.signal_connect("clicked") do
82
+ @parent = GLib.home_dir
83
+ fill_store
84
+ up_button.sensitive = true
85
+ end
86
+
87
+ sw = Gtk::ScrolledWindow.new
88
+ sw.shadow_type = Gtk::SHADOW_ETCHED_IN
89
+ sw.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
90
+ vbox.pack_start(sw, true, true, 0)
91
+
92
+ iconview = Gtk::IconView.new(@store)
93
+ iconview.selection_mode = Gtk::SELECTION_MULTIPLE
94
+ iconview.text_column = COL_DISPLAY_NAME
95
+ iconview.pixbuf_column = COL_PIXBUF
96
+ iconview.signal_connect("item_activated") do |iview, path|
97
+ iter = @store.get_iter(path)
98
+ if iter[COL_DISPLAY_NAME]
99
+ @parent = iter[COL_PATH]
100
+ fill_store
101
+ up_button.sensitive = true
102
+ end
103
+ end
104
+ sw.add(iconview)
105
+ iconview.grab_focus
106
+ end
107
+ end
108
+ end
109
+
@@ -0,0 +1,197 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: images.rb,v 1.5 2006/04/08 12:30:03 mutoh Exp $
5
+ =begin
6
+ = Images
7
+
8
+ Gtk::Image is used to display an image; the image can be in a number of formats.
9
+ Typically, you load an image into a Gdk::Pixbuf, then display the pixbuf.
10
+
11
+ This demo code shows some of the more obscure cases, in the simple
12
+ case a call to Gtk::Image.new is all you need.
13
+
14
+ If you want to put image data in your program as a String variable,
15
+ use the make-inline-pixbuf program that comes with GTK+.
16
+ This way you won't need to depend on loading external files, your
17
+ application binary can be self-contained.
18
+ =end
19
+ require 'common'
20
+
21
+ module Demo
22
+ class Images < BasicWindow
23
+ def initialize
24
+ @pixbuf_loader = nil
25
+ @load_timeout = 0
26
+ @image_stream = nil
27
+
28
+ super('Images')
29
+ signal_connect('destroy') do
30
+ cleanup_callback
31
+ end
32
+
33
+ self.border_width = 8
34
+
35
+ vbox = Gtk::VBox.new(false, 8)
36
+ vbox.border_width = 8
37
+ add(vbox)
38
+
39
+ label = Gtk::Label.new
40
+ label.set_markup('<u>Image loaded from a file</u>')
41
+ vbox.pack_start(label, false, false, 0)
42
+
43
+ frame = Gtk::Frame.new
44
+ frame.shadow_type = Gtk::SHADOW_IN
45
+
46
+ # The alignment keeps the frame from growing when users resize
47
+ # the window
48
+ align = Gtk::Alignment.new(0.5, 0.5, 0, 0)
49
+ align.add(frame)
50
+ vbox.pack_start(align, false, false, 0)
51
+
52
+ # demo_find_file looks in the the current directory first,
53
+ # so you can run gtk-demo without installing GTK, then looks
54
+ # in the location where the file is installed.
55
+ pixbuf = nil
56
+ begin
57
+ filename = Demo.find_file('gtk-logo-rgb.gif')
58
+ pixbuf = Gdk::Pixbuf.new(filename)
59
+ rescue
60
+ # This code shows off error handling. You can just use
61
+ # Gtk::Image.new instead if you don't want to report
62
+ # errors to the user. If the file doesn't load when using
63
+ # Gtk::Image.new, a 'missing image' icon will
64
+ # be displayed instead.
65
+ dialog = Gtk::MessageDialog.new(self,
66
+ Gtk::Dialog::DESTROY_WITH_PARENT,
67
+ Gtk::MessageDialog::ERROR,
68
+ Gtk::MessageDialog::BUTTONS_CLOSE,
69
+ "Unable to open image file 'gtk-logo-rgb.gif': #{$1}")
70
+
71
+ dialog.signal_connect('response') do |widget, data|
72
+ widget.destroy
73
+ end
74
+ dialog.show
75
+ end
76
+
77
+ image = Gtk::Image.new(pixbuf)
78
+ frame.add(image)
79
+
80
+
81
+ # Animation
82
+ label = Gtk::Label.new
83
+ label.set_markup('<u>Animation loaded from a file</u>')
84
+ vbox.pack_start(label, false, false, 0)
85
+
86
+ frame = Gtk::Frame.new
87
+ frame.shadow_type = Gtk::SHADOW_IN
88
+
89
+ # The alignment keeps the frame from growing when users resize
90
+ # the window
91
+ align = Gtk::Alignment.new(0.5, 0.5, 0, 0)
92
+ align.add(frame)
93
+ vbox.pack_start(align, false, false, 0)
94
+
95
+ filename = Demo.find_file('floppybuddy.gif')
96
+ image = Gtk::Image.new(filename)
97
+ frame.add(image)
98
+
99
+
100
+ # Progressive
101
+ label = Gtk::Label.new
102
+ label.set_markup('<u>Progressive image loading</u>')
103
+ vbox.pack_start(label, false, false, 0)
104
+
105
+ frame = Gtk::Frame.new(nil)
106
+ frame.shadow_type = Gtk::SHADOW_IN
107
+
108
+ # The alignment keeps the frame from growing when users resize
109
+ # the window
110
+ align = Gtk::Alignment.new(0.5, 0.5, 0, 0)
111
+ align.add(frame)
112
+ vbox.pack_start(align, false, false, 0)
113
+
114
+ # Create an empty image for now; the progressive loader
115
+ # will create the pixbuf and fill it in.
116
+ image = Gtk::Image.new
117
+ frame.add(image)
118
+
119
+ start_progressive_loading(image)
120
+
121
+ # Sensitivity control
122
+ button = Gtk::ToggleButton.new('_Insensitive', true)
123
+ vbox.pack_start(button, false, false, 0)
124
+
125
+ button.signal_connect('toggled') do |widget|
126
+ vbox.children.each do |widget|
127
+ if widget != button
128
+ widget.sensitive = ! button.active?
129
+ end
130
+ end
131
+ end
132
+ end
133
+
134
+ def start_progressive_loading(image)
135
+ @load_timeout = Gtk.timeout_add(150) do
136
+ progressive_timeout(image)
137
+ end
138
+ end
139
+
140
+ def progressive_timeout(image)
141
+ if @image_stream
142
+ buf = @image_stream.read(256)
143
+
144
+ @pixbuf_loader.write(buf)
145
+
146
+ if @image_stream.eof?
147
+ @image_stream.close
148
+ @image_stream = nil
149
+
150
+ @pixbuf_loader.close
151
+ @pixbuf_loader = nil
152
+ end
153
+ else
154
+ filename = Demo.find_file('alphatest.png')
155
+ @image_stream = File.open(filename, 'rb')
156
+
157
+ if @pixbuf_loader != nil
158
+ @pixbuf_loader.close
159
+ @pixbuf_loader = nil
160
+ end
161
+
162
+ @pixbuf_loader = Gdk::PixbufLoader.new
163
+
164
+ @pixbuf_loader.signal_connect('area_prepared') do |loader|
165
+ pixbuf = loader.pixbuf
166
+
167
+ # Avoid displaying random memory contents, since the pixbuf
168
+ # isn't filled in yet.
169
+ pixbuf.fill!(0xaaaaaaff)
170
+
171
+ image.pixbuf = pixbuf
172
+ end
173
+
174
+ @pixbuf_loader.signal_connect('area_updated') do
175
+ # We know the pixbuf inside the Gtk::Image has changed, but the image
176
+ # itself doesn't know this; so queue a redraw. If we wanted to be
177
+ # really efficient, we could use a drawing area or something
178
+ # instead of a Gtk::Image, so we could control the exact position of
179
+ # the pixbuf on the display, then we could queue a draw for only
180
+ # the updated area of the image.
181
+ image.queue_draw
182
+ end
183
+ end
184
+
185
+ # leave timeout installed
186
+ return true
187
+ end
188
+
189
+ def cleanup_callback
190
+ @pixbuf_loader.close if @pixbuf_loader
191
+ @pixbuf_loader = nil
192
+ if @load_timeout != 0
193
+ Gtk.timeout_remove(@load_timeout)
194
+ end
195
+ end
196
+ end
197
+ end