rabbit 0.6.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 (620) hide show
  1. data/COPYING +56 -0
  2. data/COPYING.ja +51 -0
  3. data/GPL +340 -0
  4. data/INSTALL.macosx-macports.en +75 -0
  5. data/INSTALL.macosx-macports.ja +101 -0
  6. data/INSTALL.win32.en +74 -0
  7. data/INSTALL.win32.ja +77 -0
  8. data/NEWS.en +337 -0
  9. data/NEWS.ja +338 -0
  10. data/README.en +836 -0
  11. data/README.ja +871 -0
  12. data/Rakefile +82 -0
  13. data/TODO +7 -0
  14. data/bin/rabbirc +86 -0
  15. data/bin/rabbit +759 -0
  16. data/bin/rabbit-command +95 -0
  17. data/bin/rabbit-theme-manager +133 -0
  18. data/bin/rabbit.bat +8 -0
  19. data/bin/rabrick +82 -0
  20. data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
  21. data/data/locale/fr/LC_MESSAGES/rabbit.mo +0 -0
  22. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  23. data/data/rabbit/image/clear-blue-images/clear-blue-headline-background.png +0 -0
  24. data/data/rabbit/image/clear-blue-images/clear-blue-icon.png +0 -0
  25. data/data/rabbit/image/clear-blue-images/clear-blue-images.rb +0 -0
  26. data/data/rabbit/image/clear-blue-images/property.rb +4 -0
  27. data/data/rabbit/image/cozmixng-images/cozmixchu.png +0 -0
  28. data/data/rabbit/image/cozmixng-images/cozmixng-images.rb +2 -0
  29. data/data/rabbit/image/cozmixng-images/powered-by-cozmixng.png +0 -0
  30. data/data/rabbit/image/cozmixng-images/property.rb +4 -0
  31. data/data/rabbit/image/rabbit-images/blue-item.png +0 -0
  32. data/data/rabbit/image/rabbit-images/close-quote-blue.png +0 -0
  33. data/data/rabbit/image/rabbit-images/close-quote-brown.png +0 -0
  34. data/data/rabbit/image/rabbit-images/close-quote-light-blue.png +0 -0
  35. data/data/rabbit/image/rabbit-images/goal-flag.png +0 -0
  36. data/data/rabbit/image/rabbit-images/green-item.png +0 -0
  37. data/data/rabbit/image/rabbit-images/kame.png +0 -0
  38. data/data/rabbit/image/rabbit-images/lavie-icon.png +0 -0
  39. data/data/rabbit/image/rabbit-images/lavie-with-logo.png +0 -0
  40. data/data/rabbit/image/rabbit-images/lavie.png +0 -0
  41. data/data/rabbit/image/rabbit-images/mini-alice.png +0 -0
  42. data/data/rabbit/image/rabbit-images/mini-horizontal-bar.png +0 -0
  43. data/data/rabbit/image/rabbit-images/mini-kame-taro.png +0 -0
  44. data/data/rabbit/image/rabbit-images/mini-tanu-kitaro.png +0 -0
  45. data/data/rabbit/image/rabbit-images/mini-usa-taro.png +0 -0
  46. data/data/rabbit/image/rabbit-images/mini-usagi.png +0 -0
  47. data/data/rabbit/image/rabbit-images/mini-vertical-bar.png +0 -0
  48. data/data/rabbit/image/rabbit-images/mini-yukidaru-taro.png +0 -0
  49. data/data/rabbit/image/rabbit-images/open-quote-blue.png +0 -0
  50. data/data/rabbit/image/rabbit-images/open-quote-brown.png +0 -0
  51. data/data/rabbit/image/rabbit-images/open-quote-light-blue.png +0 -0
  52. data/data/rabbit/image/rabbit-images/property.rb +4 -0
  53. data/data/rabbit/image/rabbit-images/rabbit-banner-blue.png +0 -0
  54. data/data/rabbit/image/rabbit-images/rabbit-banner-green.png +0 -0
  55. data/data/rabbit/image/rabbit-images/rabbit-banner-heads.png +0 -0
  56. data/data/rabbit/image/rabbit-images/rabbit-banner-pink.png +0 -0
  57. data/data/rabbit/image/rabbit-images/rabbit-banner.png +0 -0
  58. data/data/rabbit/image/rabbit-images/rabbit-banner2.png +0 -0
  59. data/data/rabbit/image/rabbit-images/rabbit-images.rb +2 -0
  60. data/data/rabbit/image/rabbit-images/rabbit-pink-logo.png +0 -0
  61. data/data/rabbit/image/rabbit-images/rabbit-pink-logo2.png +0 -0
  62. data/data/rabbit/image/rabbit-images/red-item.png +0 -0
  63. data/data/rabbit/image/rabbit-images/red-item2.png +0 -0
  64. data/data/rabbit/image/rabbit-images/start-flag.png +0 -0
  65. data/data/rabbit/image/rabbit-images/tanu-kitaro.png +0 -0
  66. data/data/rabbit/image/rabbit-images/usa-taro.png +0 -0
  67. data/data/rabbit/image/rabbit-images/usagi.png +0 -0
  68. data/data/rabbit/image/rabbit-images/yukiusa.png +0 -0
  69. data/data/rabbit/image/ruby-images/property.rb +4 -0
  70. data/data/rabbit/image/ruby-images/ruby-images.rb +2 -0
  71. data/data/rabbit/image/ruby-images/ruby-pink-circle-icon.png +0 -0
  72. data/data/rabbit/image/ruby-images/ruby-pink-circle-logo.png +0 -0
  73. data/data/rabbit/image/ruby-images/ruby-pink-circle-small-icon.png +0 -0
  74. data/data/rabbit/image/ruby-images/ruby-pink-circle.png +0 -0
  75. data/data/rabbit/image/ruby-images/ruby-pink-polygon-icon.png +0 -0
  76. data/data/rabbit/image/ruby-images/ruby-pink-polygon-logo.png +0 -0
  77. data/data/rabbit/image/ruby-images/ruby-pink-polygon-small-icon.png +0 -0
  78. data/data/rabbit/image/ruby-images/ruby-pink-polygon.png +0 -0
  79. data/entities/README +10 -0
  80. data/entities/ent2rb.rb +57 -0
  81. data/entities/isoamsa.ent +167 -0
  82. data/entities/isoamsb.ent +143 -0
  83. data/entities/isoamsc.ent +43 -0
  84. data/entities/isoamsn.ent +114 -0
  85. data/entities/isoamso.ent +73 -0
  86. data/entities/isoamsr.ent +204 -0
  87. data/entities/isobox.ent +61 -0
  88. data/entities/isocyr1.ent +88 -0
  89. data/entities/isocyr2.ent +47 -0
  90. data/entities/isodia.ent +35 -0
  91. data/entities/isogrk3.ent +64 -0
  92. data/entities/isolat1.ent +83 -0
  93. data/entities/isolat2.ent +142 -0
  94. data/entities/isomfrk.ent +75 -0
  95. data/entities/isomopf.ent +49 -0
  96. data/entities/isomscr.ent +75 -0
  97. data/entities/isonum.ent +97 -0
  98. data/entities/isopub.ent +105 -0
  99. data/entities/isotech.ent +182 -0
  100. data/entities/mmlalias.ent +564 -0
  101. data/entities/mmlextra.ent +122 -0
  102. data/lib/rabbit/action.rb +143 -0
  103. data/lib/rabbit/action/basic.rb +304 -0
  104. data/lib/rabbit/action/radio.rb +78 -0
  105. data/lib/rabbit/action/toggle.rb +89 -0
  106. data/lib/rabbit/canvas.rb +760 -0
  107. data/lib/rabbit/comment-canvas.rb +21 -0
  108. data/lib/rabbit/comment/log.rb +74 -0
  109. data/lib/rabbit/console.rb +133 -0
  110. data/lib/rabbit/console/roff.rb +84 -0
  111. data/lib/rabbit/cursor-manager.rb +62 -0
  112. data/lib/rabbit/default-config.rb +16 -0
  113. data/lib/rabbit/dependency-canvas.rb +14 -0
  114. data/lib/rabbit/div/comment-i.erb +7 -0
  115. data/lib/rabbit/div/comment.erb +45 -0
  116. data/lib/rabbit/div/css.erb +1 -0
  117. data/lib/rabbit/div/js.erb +1 -0
  118. data/lib/rabbit/div/log.erb +5 -0
  119. data/lib/rabbit/div/main-i.erb +24 -0
  120. data/lib/rabbit/div/main.css +40 -0
  121. data/lib/rabbit/div/main.erb +33 -0
  122. data/lib/rabbit/div/navi-i.erb +6 -0
  123. data/lib/rabbit/div/navi.erb +6 -0
  124. data/lib/rabbit/div/prototype.js +4320 -0
  125. data/lib/rabbit/div/slide-i.erb +2 -0
  126. data/lib/rabbit/div/slide.erb +5 -0
  127. data/lib/rabbit/div/tofu.rb +309 -0
  128. data/lib/rabbit/element.rb +8 -0
  129. data/lib/rabbit/element/base.rb +499 -0
  130. data/lib/rabbit/element/base/draw-hook.rb +75 -0
  131. data/lib/rabbit/element/block-element.rb +38 -0
  132. data/lib/rabbit/element/block.rb +53 -0
  133. data/lib/rabbit/element/container-element.rb +254 -0
  134. data/lib/rabbit/element/description-list.rb +56 -0
  135. data/lib/rabbit/element/enum-list.rb +33 -0
  136. data/lib/rabbit/element/footnote.rb +32 -0
  137. data/lib/rabbit/element/image-title-slide.rb +18 -0
  138. data/lib/rabbit/element/image.rb +167 -0
  139. data/lib/rabbit/element/index-slide.rb +190 -0
  140. data/lib/rabbit/element/item-list.rb +31 -0
  141. data/lib/rabbit/element/method-list.rb +50 -0
  142. data/lib/rabbit/element/poppler-page.rb +36 -0
  143. data/lib/rabbit/element/poppler-slide.rb +25 -0
  144. data/lib/rabbit/element/poppler-title-slide.rb +23 -0
  145. data/lib/rabbit/element/preformatted.rb +27 -0
  146. data/lib/rabbit/element/slide-element.rb +97 -0
  147. data/lib/rabbit/element/slide.rb +51 -0
  148. data/lib/rabbit/element/table.rb +100 -0
  149. data/lib/rabbit/element/tag.rb +29 -0
  150. data/lib/rabbit/element/text-container-element.rb +104 -0
  151. data/lib/rabbit/element/text-element.rb +59 -0
  152. data/lib/rabbit/element/text-renderer.rb +321 -0
  153. data/lib/rabbit/element/text.rb +82 -0
  154. data/lib/rabbit/element/title-slide.rb +190 -0
  155. data/lib/rabbit/formatter.rb +143 -0
  156. data/lib/rabbit/frame.rb +275 -0
  157. data/lib/rabbit/front.rb +238 -0
  158. data/lib/rabbit/gesture/handler.rb +232 -0
  159. data/lib/rabbit/gesture/processor.rb +118 -0
  160. data/lib/rabbit/gettext.rb +90 -0
  161. data/lib/rabbit/graffiti/config-dialog.rb +57 -0
  162. data/lib/rabbit/graffiti/processor.rb +116 -0
  163. data/lib/rabbit/html/generator.rb +458 -0
  164. data/lib/rabbit/html/template.erb +109 -0
  165. data/lib/rabbit/image.rb +35 -0
  166. data/lib/rabbit/image/base.rb +104 -0
  167. data/lib/rabbit/image/default.rb +27 -0
  168. data/lib/rabbit/image/dia.rb +63 -0
  169. data/lib/rabbit/image/eps.rb +113 -0
  170. data/lib/rabbit/image/gimp.rb +53 -0
  171. data/lib/rabbit/image/pdf.rb +77 -0
  172. data/lib/rabbit/image/svg.rb +78 -0
  173. data/lib/rabbit/info-window.rb +160 -0
  174. data/lib/rabbit/keys.rb +190 -0
  175. data/lib/rabbit/logger.rb +14 -0
  176. data/lib/rabbit/logger/base.rb +129 -0
  177. data/lib/rabbit/logger/gui.rb +172 -0
  178. data/lib/rabbit/logger/stderr.rb +28 -0
  179. data/lib/rabbit/menu.rb +287 -0
  180. data/lib/rabbit/parser.rb +24 -0
  181. data/lib/rabbit/parser/base.rb +20 -0
  182. data/lib/rabbit/parser/ext/anthy.rb +43 -0
  183. data/lib/rabbit/parser/ext/enscript.rb +122 -0
  184. data/lib/rabbit/parser/ext/entity.rb +4178 -0
  185. data/lib/rabbit/parser/ext/escape.rb +18 -0
  186. data/lib/rabbit/parser/ext/image.rb +102 -0
  187. data/lib/rabbit/parser/ext/inline.rb +29 -0
  188. data/lib/rabbit/parser/ext/tex.rb +77 -0
  189. data/lib/rabbit/parser/image.rb +34 -0
  190. data/lib/rabbit/parser/pause-support.rb +32 -0
  191. data/lib/rabbit/parser/pdf.rb +35 -0
  192. data/lib/rabbit/parser/rd.rb +54 -0
  193. data/lib/rabbit/parser/rd/ext/anthy.rb +29 -0
  194. data/lib/rabbit/parser/rd/ext/base.rb +79 -0
  195. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +103 -0
  196. data/lib/rabbit/parser/rd/ext/enscript.rb +24 -0
  197. data/lib/rabbit/parser/rd/ext/entity.rb +38 -0
  198. data/lib/rabbit/parser/rd/ext/image.rb +27 -0
  199. data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +89 -0
  200. data/lib/rabbit/parser/rd/ext/refer.rb +34 -0
  201. data/lib/rabbit/parser/rd/ext/tex.rb +24 -0
  202. data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +424 -0
  203. data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +83 -0
  204. data/lib/rabbit/parser/rd/visitor.rb +56 -0
  205. data/lib/rabbit/parser/wiki.rb +30 -0
  206. data/lib/rabbit/parser/wiki/output.rb +460 -0
  207. data/lib/rabbit/post-setup.rb +8 -0
  208. data/lib/rabbit/pre-clean.rb +2 -0
  209. data/lib/rabbit/pre-distclean.rb +2 -0
  210. data/lib/rabbit/progress.rb +68 -0
  211. data/lib/rabbit/rabbit.rb +222 -0
  212. data/lib/rabbit/renderer.rb +27 -0
  213. data/lib/rabbit/renderer/base.rb +512 -0
  214. data/lib/rabbit/renderer/color.rb +80 -0
  215. data/lib/rabbit/renderer/display.rb +25 -0
  216. data/lib/rabbit/renderer/display/base.rb +93 -0
  217. data/lib/rabbit/renderer/display/button-handler.rb +145 -0
  218. data/lib/rabbit/renderer/display/clutter-embed.rb +634 -0
  219. data/lib/rabbit/renderer/display/comment-drawing-area.rb +173 -0
  220. data/lib/rabbit/renderer/display/comment.rb +194 -0
  221. data/lib/rabbit/renderer/display/cursor.rb +34 -0
  222. data/lib/rabbit/renderer/display/drawing-area-base.rb +395 -0
  223. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +219 -0
  224. data/lib/rabbit/renderer/display/drawing-area-view-only.rb +33 -0
  225. data/lib/rabbit/renderer/display/drawing-area.rb +31 -0
  226. data/lib/rabbit/renderer/display/gesture.rb +94 -0
  227. data/lib/rabbit/renderer/display/gl.rb +98 -0
  228. data/lib/rabbit/renderer/display/graffiti.rb +120 -0
  229. data/lib/rabbit/renderer/display/info.rb +45 -0
  230. data/lib/rabbit/renderer/display/key-handler.rb +303 -0
  231. data/lib/rabbit/renderer/display/magnifier.rb +123 -0
  232. data/lib/rabbit/renderer/display/mask.rb +68 -0
  233. data/lib/rabbit/renderer/display/menu.rb +30 -0
  234. data/lib/rabbit/renderer/display/progress.rb +62 -0
  235. data/lib/rabbit/renderer/display/search.rb +107 -0
  236. data/lib/rabbit/renderer/display/spotlight.rb +117 -0
  237. data/lib/rabbit/renderer/engine.rb +18 -0
  238. data/lib/rabbit/renderer/engine/cairo.rb +438 -0
  239. data/lib/rabbit/renderer/engine/gdk.rb +229 -0
  240. data/lib/rabbit/renderer/gl.rb +176 -0
  241. data/lib/rabbit/renderer/kernel.rb +256 -0
  242. data/lib/rabbit/renderer/pixmap.rb +25 -0
  243. data/lib/rabbit/renderer/pixmap/base.rb +127 -0
  244. data/lib/rabbit/renderer/pixmap/cairo.rb +23 -0
  245. data/lib/rabbit/renderer/pixmap/gdk.rb +29 -0
  246. data/lib/rabbit/renderer/pixmap/gl.rb +46 -0
  247. data/lib/rabbit/renderer/print.rb +31 -0
  248. data/lib/rabbit/renderer/print/base.rb +73 -0
  249. data/lib/rabbit/renderer/print/cairo.rb +130 -0
  250. data/lib/rabbit/renderer/print/layout.rb +123 -0
  251. data/lib/rabbit/renderer/print/multiple.rb +205 -0
  252. data/lib/rabbit/search-window.rb +99 -0
  253. data/lib/rabbit/searcher.rb +106 -0
  254. data/lib/rabbit/soap/base.rb +17 -0
  255. data/lib/rabbit/soap/driver.rb +45 -0
  256. data/lib/rabbit/soap/server.rb +33 -0
  257. data/lib/rabbit/source.rb +14 -0
  258. data/lib/rabbit/source/argf.rb +29 -0
  259. data/lib/rabbit/source/base.rb +164 -0
  260. data/lib/rabbit/source/file.rb +65 -0
  261. data/lib/rabbit/source/hiki.rb +36 -0
  262. data/lib/rabbit/source/memory.rb +41 -0
  263. data/lib/rabbit/source/rwiki.rb +54 -0
  264. data/lib/rabbit/source/slide-share.rb +53 -0
  265. data/lib/rabbit/source/uri.rb +73 -0
  266. data/lib/rabbit/stock.rb +31 -0
  267. data/lib/rabbit/theme-browser.rb +104 -0
  268. data/lib/rabbit/theme-browser/default-tag.yaml +89 -0
  269. data/lib/rabbit/theme-browser/document.rb +200 -0
  270. data/lib/rabbit/theme-browser/ext/block-verbatim.rb +39 -0
  271. data/lib/rabbit/theme-browser/page.rb +133 -0
  272. data/lib/rabbit/theme-browser/rd2document-lib.rb +181 -0
  273. data/lib/rabbit/theme-browser/tag.rb +67 -0
  274. data/lib/rabbit/theme-browser/tree.rb +91 -0
  275. data/lib/rabbit/theme/applier.rb +613 -0
  276. data/lib/rabbit/theme/auto-slide/auto-slide.rb +6 -0
  277. data/lib/rabbit/theme/auto-slide/property.rb +4 -0
  278. data/lib/rabbit/theme/base/base.rb +76 -0
  279. data/lib/rabbit/theme/base/property.rb +4 -0
  280. data/lib/rabbit/theme/blue-bar/blue-bar.rb +93 -0
  281. data/lib/rabbit/theme/blue-bar/property.rb +3 -0
  282. data/lib/rabbit/theme/blue-circle/blue-circle.rb +14 -0
  283. data/lib/rabbit/theme/blue-circle/property.rb +3 -0
  284. data/lib/rabbit/theme/centering-rabbit/centering-rabbit.rb +5 -0
  285. data/lib/rabbit/theme/centering-rabbit/property.rb +3 -0
  286. data/lib/rabbit/theme/clear-blue/clear-blue.rb +100 -0
  287. data/lib/rabbit/theme/clear-blue/property.rb +3 -0
  288. data/lib/rabbit/theme/clock/clock.rb +37 -0
  289. data/lib/rabbit/theme/clock/property.rb +21 -0
  290. data/lib/rabbit/theme/color-circle-block-quote/color-circle-block-quote.rb +26 -0
  291. data/lib/rabbit/theme/color-circle-block-quote/property.rb +4 -0
  292. data/lib/rabbit/theme/color-circle-common/color-circle-common.rb +48 -0
  293. data/lib/rabbit/theme/color-circle-common/property.rb +3 -0
  294. data/lib/rabbit/theme/color-circle-description/color-circle-description.rb +9 -0
  295. data/lib/rabbit/theme/color-circle-description/property.rb +4 -0
  296. data/lib/rabbit/theme/color-circle-foot-text/color-circle-foot-text.rb +14 -0
  297. data/lib/rabbit/theme/color-circle-foot-text/property.rb +4 -0
  298. data/lib/rabbit/theme/color-circle-item-mark/color-circle-item-mark.rb +77 -0
  299. data/lib/rabbit/theme/color-circle-item-mark/property.rb +4 -0
  300. data/lib/rabbit/theme/color-circle-method-list/color-circle-method-list.rb +8 -0
  301. data/lib/rabbit/theme/color-circle-method-list/property.rb +4 -0
  302. data/lib/rabbit/theme/color-circle-preformatted/color-circle-preformatted.rb +5 -0
  303. data/lib/rabbit/theme/color-circle-preformatted/property.rb +4 -0
  304. data/lib/rabbit/theme/color-circle-slide/color-circle-slide.rb +13 -0
  305. data/lib/rabbit/theme/color-circle-slide/property.rb +4 -0
  306. data/lib/rabbit/theme/color-circle-text/color-circle-text.rb +9 -0
  307. data/lib/rabbit/theme/color-circle-text/property.rb +4 -0
  308. data/lib/rabbit/theme/color-circle-title-slide/color-circle-title-slide.rb +27 -0
  309. data/lib/rabbit/theme/color-circle-title-slide/property.rb +4 -0
  310. data/lib/rabbit/theme/color-circle-title-text/color-circle-title-text.rb +7 -0
  311. data/lib/rabbit/theme/color-circle-title-text/property.rb +4 -0
  312. data/lib/rabbit/theme/color-circle/color-circle.rb +40 -0
  313. data/lib/rabbit/theme/color-circle/property.rb +4 -0
  314. data/lib/rabbit/theme/comment/comment.rb +5 -0
  315. data/lib/rabbit/theme/comment/property.rb +3 -0
  316. data/lib/rabbit/theme/cozmixng-powered-by/cozmixng-powered-by.rb +6 -0
  317. data/lib/rabbit/theme/cozmixng-powered-by/property.rb +7 -0
  318. data/lib/rabbit/theme/cozmixng/cozmixng.rb +55 -0
  319. data/lib/rabbit/theme/cozmixng/property.rb +3 -0
  320. data/lib/rabbit/theme/day-white/day-white.rb +14 -0
  321. data/lib/rabbit/theme/day-white/property.rb +3 -0
  322. data/lib/rabbit/theme/default-block-quote/default-block-quote.rb +113 -0
  323. data/lib/rabbit/theme/default-block-quote/property.rb +3 -0
  324. data/lib/rabbit/theme/default-description/default-description.rb +64 -0
  325. data/lib/rabbit/theme/default-description/property.rb +5 -0
  326. data/lib/rabbit/theme/default-foot-text/default-foot-text.rb +52 -0
  327. data/lib/rabbit/theme/default-foot-text/property.rb +3 -0
  328. data/lib/rabbit/theme/default-icon/default-icon.rb +4 -0
  329. data/lib/rabbit/theme/default-icon/property.rb +5 -0
  330. data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +116 -0
  331. data/lib/rabbit/theme/default-item-mark-setup/property.rb +3 -0
  332. data/lib/rabbit/theme/default-item-mark/default-item-mark.rb +92 -0
  333. data/lib/rabbit/theme/default-item-mark/property.rb +4 -0
  334. data/lib/rabbit/theme/default-method-list/default-method-list.rb +6 -0
  335. data/lib/rabbit/theme/default-method-list/property.rb +3 -0
  336. data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +37 -0
  337. data/lib/rabbit/theme/default-preformatted/property.rb +3 -0
  338. data/lib/rabbit/theme/default-slide/default-slide.rb +33 -0
  339. data/lib/rabbit/theme/default-slide/property.rb +3 -0
  340. data/lib/rabbit/theme/default-text/default-text.rb +183 -0
  341. data/lib/rabbit/theme/default-text/property.rb +3 -0
  342. data/lib/rabbit/theme/default-title-slide/default-title-slide.rb +13 -0
  343. data/lib/rabbit/theme/default-title-slide/property.rb +6 -0
  344. data/lib/rabbit/theme/default-title-text/default-title-text.rb +48 -0
  345. data/lib/rabbit/theme/default-title-text/property.rb +3 -0
  346. data/lib/rabbit/theme/default/default.rb +22 -0
  347. data/lib/rabbit/theme/default/property.rb +3 -0
  348. data/lib/rabbit/theme/document.erb +35 -0
  349. data/lib/rabbit/theme/edge-info-toolkit/edge-info-toolkit.rb +77 -0
  350. data/lib/rabbit/theme/edge-info-toolkit/property.rb +3 -0
  351. data/lib/rabbit/theme/emphasize-keyword/emphasize-keyword.rb +16 -0
  352. data/lib/rabbit/theme/emphasize-keyword/property.rb +4 -0
  353. data/lib/rabbit/theme/entry.rb +121 -0
  354. data/lib/rabbit/theme/footer-logo/footer-logo.rb +30 -0
  355. data/lib/rabbit/theme/footer-logo/property.rb +26 -0
  356. data/lib/rabbit/theme/green-circle/green-circle.rb +14 -0
  357. data/lib/rabbit/theme/green-circle/property.rb +3 -0
  358. data/lib/rabbit/theme/headline-logo/headline-logo.rb +24 -0
  359. data/lib/rabbit/theme/headline-logo/property.rb +10 -0
  360. data/lib/rabbit/theme/icon/icon.rb +8 -0
  361. data/lib/rabbit/theme/icon/property.rb +24 -0
  362. data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +111 -0
  363. data/lib/rabbit/theme/image-slide-number/property.rb +64 -0
  364. data/lib/rabbit/theme/image-timer/image-timer.rb +109 -0
  365. data/lib/rabbit/theme/image-timer/property.rb +46 -0
  366. data/lib/rabbit/theme/image-viewer/image-viewer.rb +7 -0
  367. data/lib/rabbit/theme/image-viewer/property.rb +3 -0
  368. data/lib/rabbit/theme/image/image.rb +72 -0
  369. data/lib/rabbit/theme/image/property.rb +3 -0
  370. data/lib/rabbit/theme/lightning-clear-blue/lightning-clear-blue.rb +13 -0
  371. data/lib/rabbit/theme/lightning-clear-blue/property.rb +3 -0
  372. data/lib/rabbit/theme/lightning-rabbit/lightning-rabbit.rb +13 -0
  373. data/lib/rabbit/theme/lightning-rabbit/property.rb +3 -0
  374. data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +60 -0
  375. data/lib/rabbit/theme/lightning-simple/property.rb +3 -0
  376. data/lib/rabbit/theme/lightning-talk-toolkit/lightning-talk-toolkit.rb +171 -0
  377. data/lib/rabbit/theme/lightning-talk-toolkit/property.rb +3 -0
  378. data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +65 -0
  379. data/lib/rabbit/theme/lightning-talk/property.rb +3 -0
  380. data/lib/rabbit/theme/manager.rb +35 -0
  381. data/lib/rabbit/theme/mirror-effect/mirror-effect.rb +27 -0
  382. data/lib/rabbit/theme/mirror-effect/property.rb +3 -0
  383. data/lib/rabbit/theme/newline-in-slides/newline-in-slides.rb +3 -0
  384. data/lib/rabbit/theme/newline-in-slides/property.rb +4 -0
  385. data/lib/rabbit/theme/newline-in-title/newline-in-title.rb +7 -0
  386. data/lib/rabbit/theme/newline-in-title/property.rb +4 -0
  387. data/lib/rabbit/theme/night-black/night-black.rb +25 -0
  388. data/lib/rabbit/theme/night-black/property.rb +3 -0
  389. data/lib/rabbit/theme/pdf-tortoise-and-hare/pdf-tortoise-and-hare.rb +18 -0
  390. data/lib/rabbit/theme/pdf-tortoise-and-hare/property.rb +3 -0
  391. data/lib/rabbit/theme/pdf/pdf.rb +4 -0
  392. data/lib/rabbit/theme/pdf/property.rb +3 -0
  393. data/lib/rabbit/theme/powered-by/powered-by.rb +67 -0
  394. data/lib/rabbit/theme/powered-by/property.rb +24 -0
  395. data/lib/rabbit/theme/rabbit-block-quote/property.rb +4 -0
  396. data/lib/rabbit/theme/rabbit-block-quote/rabbit-block-quote.rb +16 -0
  397. data/lib/rabbit/theme/rabbit-headline-logo/property.rb +5 -0
  398. data/lib/rabbit/theme/rabbit-headline-logo/rabbit-headline-logo.rb +4 -0
  399. data/lib/rabbit/theme/rabbit-icon/property.rb +5 -0
  400. data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +4 -0
  401. data/lib/rabbit/theme/rabbit-item-mark/property.rb +5 -0
  402. data/lib/rabbit/theme/rabbit-item-mark/rabbit-item-mark.rb +53 -0
  403. data/lib/rabbit/theme/rabbit-powered-by/property.rb +7 -0
  404. data/lib/rabbit/theme/rabbit-powered-by/rabbit-powered-by.rb +5 -0
  405. data/lib/rabbit/theme/rabbit-title-logo/property.rb +5 -0
  406. data/lib/rabbit/theme/rabbit-title-logo/rabbit-title-logo.rb +4 -0
  407. data/lib/rabbit/theme/rabbit/property.rb +3 -0
  408. data/lib/rabbit/theme/rabbit/rabbit.rb +63 -0
  409. data/lib/rabbit/theme/red-frame/property.rb +3 -0
  410. data/lib/rabbit/theme/red-frame/red-frame.rb +96 -0
  411. data/lib/rabbit/theme/rotate-zoom-effect/property.rb +4 -0
  412. data/lib/rabbit/theme/rotate-zoom-effect/rotate-zoom-effect.rb +51 -0
  413. data/lib/rabbit/theme/ruby-gnome2-description/property.rb +7 -0
  414. data/lib/rabbit/theme/ruby-gnome2-description/ruby-gnome2-description.rb +7 -0
  415. data/lib/rabbit/theme/ruby-gnome2-foot-text/property.rb +5 -0
  416. data/lib/rabbit/theme/ruby-gnome2-foot-text/ruby-gnome2-foot-text.rb +3 -0
  417. data/lib/rabbit/theme/ruby-gnome2-headline/property.rb +7 -0
  418. data/lib/rabbit/theme/ruby-gnome2-headline/ruby-gnome2-headline.rb +47 -0
  419. data/lib/rabbit/theme/ruby-gnome2-icon/property.rb +5 -0
  420. data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +4 -0
  421. data/lib/rabbit/theme/ruby-gnome2-item-mark/property.rb +10 -0
  422. data/lib/rabbit/theme/ruby-gnome2-item-mark/ruby-gnome2-item-mark.rb +65 -0
  423. data/lib/rabbit/theme/ruby-gnome2-preformatted/property.rb +4 -0
  424. data/lib/rabbit/theme/ruby-gnome2-preformatted/ruby-gnome2-preformatted.rb +8 -0
  425. data/lib/rabbit/theme/ruby-gnome2-slide/property.rb +4 -0
  426. data/lib/rabbit/theme/ruby-gnome2-slide/ruby-gnome2-slide.rb +40 -0
  427. data/lib/rabbit/theme/ruby-gnome2/property.rb +3 -0
  428. data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +61 -0
  429. data/lib/rabbit/theme/scroll-effect/property.rb +3 -0
  430. data/lib/rabbit/theme/scroll-effect/scroll-effect.rb +32 -0
  431. data/lib/rabbit/theme/searcher.rb +120 -0
  432. data/lib/rabbit/theme/show-frame/property.rb +16 -0
  433. data/lib/rabbit/theme/show-frame/show-frame.rb +17 -0
  434. data/lib/rabbit/theme/simple-item-mark/property.rb +5 -0
  435. data/lib/rabbit/theme/simple-item-mark/simple-item-mark.rb +112 -0
  436. data/lib/rabbit/theme/slide-background-image/property.rb +10 -0
  437. data/lib/rabbit/theme/slide-background-image/slide-background-image.rb +25 -0
  438. data/lib/rabbit/theme/slide-background/property.rb +6 -0
  439. data/lib/rabbit/theme/slide-background/slide-background.rb +3 -0
  440. data/lib/rabbit/theme/slide-footer-info/property.rb +43 -0
  441. data/lib/rabbit/theme/slide-footer-info/slide-footer-info.rb +42 -0
  442. data/lib/rabbit/theme/slide-header-info/property.rb +43 -0
  443. data/lib/rabbit/theme/slide-header-info/slide-header-info.rb +42 -0
  444. data/lib/rabbit/theme/slide-logo/property.rb +26 -0
  445. data/lib/rabbit/theme/slide-logo/slide-logo.rb +30 -0
  446. data/lib/rabbit/theme/slide-number/property.rb +21 -0
  447. data/lib/rabbit/theme/slide-number/slide-number.rb +28 -0
  448. data/lib/rabbit/theme/slide-show/property.rb +4 -0
  449. data/lib/rabbit/theme/slide-show/slide-show.rb +31 -0
  450. data/lib/rabbit/theme/table/property.rb +3 -0
  451. data/lib/rabbit/theme/table/table.rb +169 -0
  452. data/lib/rabbit/theme/timer/property.rb +3 -0
  453. data/lib/rabbit/theme/timer/timer.rb +63 -0
  454. data/lib/rabbit/theme/title-background-color/property.rb +10 -0
  455. data/lib/rabbit/theme/title-background-color/title-background-color.rb +17 -0
  456. data/lib/rabbit/theme/title-background-image/property.rb +11 -0
  457. data/lib/rabbit/theme/title-background-image/title-background-image.rb +25 -0
  458. data/lib/rabbit/theme/title-logo/property.rb +23 -0
  459. data/lib/rabbit/theme/title-logo/title-logo.rb +38 -0
  460. data/lib/rabbit/theme/title-on-image-toolkit/property.rb +3 -0
  461. data/lib/rabbit/theme/title-on-image-toolkit/title-on-image-toolkit.rb +122 -0
  462. data/lib/rabbit/theme/title-shadow/property.rb +11 -0
  463. data/lib/rabbit/theme/title-shadow/title-shadow.rb +33 -0
  464. data/lib/rabbit/trackball.rb +228 -0
  465. data/lib/rabbit/utils.rb +459 -0
  466. data/lib/rabbit/xmlrpc/base.rb +6 -0
  467. data/lib/rabbit/xmlrpc/client.rb +17 -0
  468. data/lib/rabbit/xmlrpc/server.rb +23 -0
  469. data/lib/rt/rt2html-lib.rb +157 -0
  470. data/lib/rt/rtparser.rb +226 -0
  471. data/lib/rt/rtvisitor.rb +68 -0
  472. data/lib/rwiki/soap/common.rb +5 -0
  473. data/lib/rwiki/soap/driver.rb +43 -0
  474. data/lib/rwiki/soap/servant.rb +78 -0
  475. data/misc/emacs/README.ja +177 -0
  476. data/misc/emacs/rabbit-mode.el +375 -0
  477. data/misc/make-image-sample.rb +94 -0
  478. data/misc/make-print-sample.rb +95 -0
  479. data/misc/update-rd.rb +78 -0
  480. data/misc/xyzzy/rabbit-mode.l +775 -0
  481. data/po/en/rabbit.po +2356 -0
  482. data/po/fr/rabbit.po +2452 -0
  483. data/po/ja/rabbit.po +2465 -0
  484. data/sample/asahina/alice.png +0 -0
  485. data/sample/asahina/yukiusa.png +0 -0
  486. data/sample/blue-circle.rd +37 -0
  487. data/sample/can_rabbit.rd +470 -0
  488. data/sample/cozmixng.rd +85 -0
  489. data/sample/cozmixng_is_field.png +0 -0
  490. data/sample/cozmixng_is_field.svg +430 -0
  491. data/sample/equation.eps +571 -0
  492. data/sample/gl-sample.rd +10 -0
  493. data/sample/html_and_wiki.png +0 -0
  494. data/sample/html_and_wiki.svg +275 -0
  495. data/sample/join_cozmixng.png +0 -0
  496. data/sample/join_cozmixng.svg +293 -0
  497. data/sample/kof2005/gesture-flow.svg +329 -0
  498. data/sample/kof2005/gesture.rb +473 -0
  499. data/sample/kof2005/gtk+-widget.svg +128 -0
  500. data/sample/kof2005/high-light-architecture.svg +203 -0
  501. data/sample/kof2005/high-light-expose.rb +120 -0
  502. data/sample/kof2005/high-light-expose.svg +153 -0
  503. data/sample/kof2005/high-light-widget.rb +147 -0
  504. data/sample/kof2005/high-light-widget.svg +172 -0
  505. data/sample/kof2005/high-light.svg +132 -0
  506. data/sample/kof2005/mask-screenshot.png +0 -0
  507. data/sample/kof2005/mask.rb +105 -0
  508. data/sample/kof2005/mask.svg +120 -0
  509. data/sample/kof2005/ruby-gnome2-logo.png +0 -0
  510. data/sample/kof2005/ruby-pink-circle-logo.png +0 -0
  511. data/sample/kof2005/skip-up-with-ruby-gnome2.rd +450 -0
  512. data/sample/kof2005/widget.svg +202 -0
  513. data/sample/kou/clear-blue-headline-background.svg +283 -0
  514. data/sample/kou/clear-blue-icon.svg +194 -0
  515. data/sample/kou/horizontal-bar.svg +82 -0
  516. data/sample/kou/quote.svg +497 -0
  517. data/sample/kou/vertical-bar.svg +70 -0
  518. data/sample/lavie.png +0 -0
  519. data/sample/lightning-talk.rd +50 -0
  520. data/sample/lldn/input.svg +269 -0
  521. data/sample/lldn/interface.svg +410 -0
  522. data/sample/lldn/kame.png +0 -0
  523. data/sample/lldn/lavie.png +0 -0
  524. data/sample/lldn/lldn.rd +212 -0
  525. data/sample/lldn/output.svg +284 -0
  526. data/sample/lldn/rabbit-rwiki.svg +353 -0
  527. data/sample/lldn/rabbit_banner.png +0 -0
  528. data/sample/lldn/rabbit_banner2.png +0 -0
  529. data/sample/m17n.rd +138 -0
  530. data/sample/momo/banner/bn1.png +0 -0
  531. data/sample/momo/banner/bn2.png +0 -0
  532. data/sample/momo/banner/bn_psd.psd +0 -0
  533. data/sample/momo/banner/bn_psd2.psd +0 -0
  534. data/sample/momo/tailavi/tailavi-ruby.png +0 -0
  535. data/sample/momo/tailavi/tailavi-ruby.psd +0 -0
  536. data/sample/momo/tailavi/tailavi-taiyaki.png +0 -0
  537. data/sample/momo/tailavi/tailavi-taiyaki.psd +0 -0
  538. data/sample/momo/tailavi/tailavi-yokubari.png +0 -0
  539. data/sample/momo/tailavi/tailavi-yokubari.psd +0 -0
  540. data/sample/momo/tailavi/taiyaki.png +0 -0
  541. data/sample/momo/tailavi/taiyaki.psd +0 -0
  542. data/sample/momo/usako/blue_dot.png +0 -0
  543. data/sample/momo/usako/green_dot.png +0 -0
  544. data/sample/momo/usako/rabbit.png +0 -0
  545. data/sample/momo/usako/rabbit_mimi.png +0 -0
  546. data/sample/momo/usako/rabbit_mimi2.png +0 -0
  547. data/sample/momo/usako/red_dot.png +0 -0
  548. data/sample/momo/usako/ruby.png +0 -0
  549. data/sample/momo/usako/ruby_new.png +0 -0
  550. data/sample/momo/usako/usa1.png +0 -0
  551. data/sample/momo/usako/usa2.png +0 -0
  552. data/sample/momo/usako/usa3.png +0 -0
  553. data/sample/momo/usako/usako_psd.psd +0 -0
  554. data/sample/momo/usako/usako_psd_100.png +0 -0
  555. data/sample/momo/usako/usako_psd_200.png +0 -0
  556. data/sample/ppt/hare-and-tortoise-end.png +0 -0
  557. data/sample/ppt/hare-and-tortoise-middle.png +0 -0
  558. data/sample/ppt/hare-and-tortoise-start.png +0 -0
  559. data/sample/ppt/ppt.rd +207 -0
  560. data/sample/ppt/rabbit-with-ruby.png +0 -0
  561. data/sample/pre.rd +112 -0
  562. data/sample/rabbit-balloon.eps +233 -0
  563. data/sample/rabbit-balloon.obj +93 -0
  564. data/sample/rabbit-en.rd +376 -0
  565. data/sample/rabbit-history.svg +280 -0
  566. data/sample/rabbit-implementation.rd +187 -0
  567. data/sample/rabbit.dia +408 -0
  568. data/sample/rabbit.hiki +328 -0
  569. data/sample/rabbit.rd +383 -0
  570. data/sample/rabbit.xcf +0 -0
  571. data/sample/rabbit/theme/festival/festival.rb +6 -0
  572. data/sample/rabbit/theme/gl-sample/gl-sample.rb +29 -0
  573. data/sample/rabbit/theme/image-with-frame/image-with-frame.rb +2 -0
  574. data/sample/rabbit/theme/image-with-no-shadow-frame/image-with-no-shadow-frame.rb +3 -0
  575. data/sample/rabbit/theme/image-without-frame/image-without-frame.rb +2 -0
  576. data/sample/rabbit/theme/kof2005/kof2005.rb +9 -0
  577. data/sample/rabbit/theme/kof2005/property.rb +3 -0
  578. data/sample/rabbit/theme/lightning-talk-with-contact/lightning-talk-with-contact.rb +6 -0
  579. data/sample/rabbit/theme/lldn/lldn.rb +20 -0
  580. data/sample/rabbit/theme/pdf/pdf.rb +16 -0
  581. data/sample/rabbit/theme/pdf/property.rb +4 -0
  582. data/sample/rabbit/theme/ppt/ppt.rb +5 -0
  583. data/sample/rabbit/theme/rabbit-and-tortoise/rabbit-and-tortoise.rb +11 -0
  584. data/sample/rabbit/theme/rectangle-image-slide-number/rectangle-image-slide-number.rb +4 -0
  585. data/sample/rabbit/theme/stop-auto-slide/stop-auto-slide.rb +2 -0
  586. data/sample/rabbit/theme/triangle-image-slide-number/triangle-image-slide-number.rb +5 -0
  587. data/sample/rabbit_icon.ico +0 -0
  588. data/sample/rabbit_icon.png +0 -0
  589. data/sample/shocker.jpg +0 -0
  590. data/sample/slide-property.hiki +14 -0
  591. data/sample/slide-property.rab +18 -0
  592. data/sample/sode/kame-color.riff +0 -0
  593. data/sample/sode/kame.riff +0 -0
  594. data/sample/spiral.svg +29 -0
  595. data/sample/table-en.rd +55 -0
  596. data/sample/table.rd +55 -0
  597. data/sample/theme-bench-en.rab +127 -0
  598. data/sample/theme-bench.rab +128 -0
  599. data/sample/usagi.png +0 -0
  600. data/sample/usatti/kame-taro.png +0 -0
  601. data/sample/usatti/rabbit-pink-logo.png +0 -0
  602. data/sample/usatti/rabbit-pink-logo2.png +0 -0
  603. data/sample/usatti/ruby-pink-circle-logo.png +0 -0
  604. data/sample/usatti/ruby-pink-circle.png +0 -0
  605. data/sample/usatti/ruby-pink-polygon-logo.png +0 -0
  606. data/sample/usatti/ruby-pink-polygon.png +0 -0
  607. data/sample/usatti/tanu-kitaro.png +0 -0
  608. data/sample/usatti/usa-taro.png +0 -0
  609. data/sample/usatti/yukidaru-taro.png +0 -0
  610. data/setup.rb +1585 -0
  611. data/test/rabbit-test-utils.rb +24 -0
  612. data/test/run-test.rb +11 -0
  613. data/test/test_applier.rb +42 -0
  614. data/test/test_color.rb +42 -0
  615. data/test/test_element.rb +91 -0
  616. data/test/test_source.rb +47 -0
  617. data/test/test_utils.rb +50 -0
  618. data/update-mo.rb +20 -0
  619. data/update-po.rb +57 -0
  620. metadata +703 -0
@@ -0,0 +1,80 @@
1
+ require "gtk2"
2
+
3
+ require "rabbit/rabbit"
4
+ require "rabbit/gettext"
5
+
6
+ module Rabbit
7
+ module Renderer
8
+ Color = Struct.new(:red, :green, :blue, :alpha, :have_alpha)
9
+ class Color
10
+ GDK_COLOR_NORMALIZE = 65535.0
11
+
12
+ class << self
13
+ def new_from_gdk_color(color, have_alpha=false)
14
+ red = color.red / GDK_COLOR_NORMALIZE
15
+ green = color.green / GDK_COLOR_NORMALIZE
16
+ blue = color.blue / GDK_COLOR_NORMALIZE
17
+ alpha = 1.0
18
+ new(red, green, blue, alpha, have_alpha)
19
+ end
20
+
21
+ HEX = "(?i:[a-z0-9])"
22
+ def parse(spec)
23
+ case spec
24
+ when Array
25
+ new(*spec)
26
+ when /\A\#(#{HEX})(#{HEX})(#{HEX})(#{HEX})?\z/
27
+ new(*normalize($1, $2, $3, $4, 16 ** 1 - 1))
28
+ when /\A\#(#{HEX}{2})(#{HEX}{2})(#{HEX}{2})(#{HEX}{2})?\z/
29
+ new(*normalize($1, $2, $3, $4, 16 ** 2 - 1))
30
+ when /\A\#(#{HEX}{4})(#{HEX}{4})(#{HEX}{4})(#{HEX}{4})?\z/
31
+ new(*normalize($1, $2, $3, $4, 16 ** 4 - 1))
32
+ else
33
+ new_from_gdk_color(Gdk::Color.parse(spec))
34
+ end
35
+ end
36
+
37
+ def normalize(r, g, b, a, max)
38
+ red = r.hex / max.to_f
39
+ green = g.hex / max.to_f
40
+ blue = b.hex / max.to_f
41
+ have_alpha = !a.nil?
42
+ alpha = have_alpha ? a.hex / max.to_f : 1.0
43
+ [red, green, blue, alpha, have_alpha]
44
+ end
45
+ end
46
+
47
+ alias have_alpha? have_alpha
48
+
49
+ def to_s
50
+ "#%04X%04X%04X%04X" % to_gdk_rgba
51
+ end
52
+
53
+ def to_a
54
+ if have_alpha?
55
+ [red, green, blue, alpha]
56
+ else
57
+ [red, green, blue]
58
+ end
59
+ end
60
+
61
+ def to_gdk_rgb
62
+ to_gdk_rgba[0..-2]
63
+ end
64
+
65
+ def to_gdk_rgba
66
+ [red, green, blue, alpha || 1.0].collect do |color|
67
+ (color * GDK_COLOR_NORMALIZE).truncate
68
+ end
69
+ end
70
+
71
+ def to_gdk_format
72
+ to_s.gsub(/[a-z0-9]{4}\z/i, '')
73
+ end
74
+
75
+ def to_gdk_color
76
+ Gdk::Color.new(*to_gdk_rgb)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,25 @@
1
+ require "rabbit/utils"
2
+
3
+ module Rabbit
4
+ module Renderer
5
+ module Display
6
+ extend Utils
7
+
8
+ class << self
9
+ @initialized = false
10
+ def init
11
+ unless @initialized
12
+ @initialized = true
13
+ dir = ::File.join("rabbit", "renderer", "display")
14
+ require_files_under_directory_in_load_path(dir)
15
+ end
16
+ end
17
+
18
+ def new(*args, &block)
19
+ init
20
+ corresponding_class_under_module(self).new(*args, &block)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,93 @@
1
+ require "rabbit/renderer/base"
2
+
3
+ module Rabbit
4
+ module Renderer
5
+ module Display
6
+ module Base
7
+ include Renderer::Base
8
+
9
+ def initialize(*args, &block)
10
+ @drawable = nil
11
+ super
12
+ end
13
+
14
+ def width
15
+ if @drawable
16
+ @drawable.size[0]
17
+ end
18
+ end
19
+ alias original_width width
20
+
21
+ def height
22
+ if @drawable
23
+ @drawable.size[1]
24
+ end
25
+ end
26
+ alias original_height height
27
+
28
+ def redraw
29
+ widget.queue_draw
30
+ end
31
+
32
+ def attach_to(window)
33
+ @window = window
34
+
35
+ set_configure_event
36
+ end
37
+
38
+ def detach
39
+ @window = nil
40
+ end
41
+
42
+ def toggle_whiteout
43
+ super
44
+ update_menu
45
+ end
46
+
47
+ def toggle_blackout
48
+ super
49
+ update_menu
50
+ end
51
+
52
+ def make_layout(text)
53
+ attrs, text = Pango.parse_markup(text)
54
+ layout = create_pango_layout(text)
55
+ layout.set_attributes(attrs)
56
+ layout
57
+ end
58
+
59
+ def create_pango_context
60
+ context = widget.create_pango_context
61
+ set_font_resolution(context)
62
+ context
63
+ end
64
+
65
+ def create_pango_layout(text)
66
+ layout = widget.create_pango_layout(text)
67
+ set_font_resolution(layout.context)
68
+ layout
69
+ end
70
+
71
+ def update_title
72
+ @canvas.update_title(@canvas.slide_title)
73
+ end
74
+
75
+ private
76
+ def set_configure_event
77
+ id = @window.signal_connect("configure_event") do |widget, event|
78
+ configured(event.x, event.y, event.width, event.height)
79
+ false
80
+ end
81
+ @configure_signal_id = id
82
+ end
83
+
84
+ def configured(x, y, w, h)
85
+ end
86
+
87
+ def queue_draw
88
+ widget.queue_draw
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,145 @@
1
+ require 'gtk2'
2
+
3
+ module Rabbit
4
+ module Renderer
5
+ module Display
6
+ module ButtonHandler
7
+ BUTTON_PRESS_ACCEPTING_TIME = 250
8
+
9
+ def initialize(*args, &block)
10
+ super
11
+ init_button_handler
12
+ end
13
+
14
+ private
15
+ def init_button_handler
16
+ @button_handing = false
17
+ clear_button_handler
18
+ end
19
+
20
+ def clear_button_handler
21
+ @button_handler = []
22
+ end
23
+
24
+ def set_button_event(widget)
25
+ last_button_press_event = nil
26
+ widget.signal_connect("button_press_event") do |_widget, event|
27
+ last_button_press_event = event
28
+ call_hook_procs(@button_press_hook_procs, event)
29
+ end
30
+
31
+ widget.signal_connect("button_release_event") do |_widget, event|
32
+ handled = call_hook_procs(@button_release_hook_procs,
33
+ event, last_button_press_event)
34
+ if handled
35
+ clear_button_handler
36
+ else
37
+ handled = handle_button_release(event, last_button_press_event)
38
+ end
39
+ handled
40
+ end
41
+ end
42
+
43
+ BUTTON_PRESS_HANDLER = {
44
+ Gdk::Event::Type::BUTTON_PRESS => "handle_button_press",
45
+ Gdk::Event::Type::BUTTON2_PRESS => "handle_button2_press",
46
+ Gdk::Event::Type::BUTTON3_PRESS => "handle_button3_press",
47
+ }
48
+
49
+ def handle_button_release(event, last_button_press_event)
50
+ press_event_type = last_button_press_event.event_type
51
+ if BUTTON_PRESS_HANDLER.has_key?(press_event_type)
52
+ __send__(BUTTON_PRESS_HANDLER[press_event_type],
53
+ last_button_press_event, event)
54
+ start_button_handler
55
+ end
56
+ true
57
+ end
58
+
59
+ def handle_button_press(event, release_event)
60
+ case event.button
61
+ when 1, 5
62
+ if release_event.state.control_mask?
63
+ add_button_handler do
64
+ popup_menu
65
+ true
66
+ end
67
+ elsif !release_event.state.mod1_mask?
68
+ add_button_handler do
69
+ @canvas.activate("NextSlide")
70
+ true
71
+ end
72
+ end
73
+ when 2, 4
74
+ unless release_event.state.mod1_mask?
75
+ add_button_handler do
76
+ @canvas.activate("PreviousSlide")
77
+ true
78
+ end
79
+ end
80
+ when 3
81
+ add_button_handler do
82
+ popup_menu
83
+ true
84
+ end
85
+ end
86
+ end
87
+
88
+ def handle_button2_press(event, release_event)
89
+ add_button_handler do
90
+ if @canvas.index_mode?
91
+ index = @canvas.current_slide.slide_number(@canvas,
92
+ event.x,
93
+ event.y)
94
+ if index
95
+ @canvas.activate("ToggleIndexMode")
96
+ @canvas.activate("JumpTo") {index}
97
+ end
98
+ true
99
+ else
100
+ false
101
+ end
102
+ end
103
+ end
104
+
105
+ def handle_button3_press(event, release_event)
106
+ add_button_handler do
107
+ false
108
+ end
109
+ end
110
+
111
+ def add_button_handler(handler=Proc.new)
112
+ @button_handler.push(handler)
113
+ end
114
+
115
+ def call_button_handler
116
+ until @button_handler.empty?
117
+ clear_button_handler if @button_handler.pop.call
118
+ end
119
+ end
120
+
121
+ def start_button_handler
122
+ if @button_handling
123
+ @button_event_coming = true
124
+ else
125
+ @button_handling = true
126
+ @button_event_coming = false
127
+ Gtk.timeout_add(BUTTON_PRESS_ACCEPTING_TIME) do
128
+ if @button_event_coming
129
+ Gtk.timeout_add(BUTTON_PRESS_ACCEPTING_TIME) do
130
+ call_button_handler
131
+ @button_handling = false
132
+ false
133
+ end
134
+ else
135
+ call_button_handler
136
+ @button_handling = false
137
+ end
138
+ false
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,634 @@
1
+ require 'clutter_gtk'
2
+ require 'clutter_cairo'
3
+
4
+ require "rabbit/utils"
5
+ require "rabbit/renderer/engine"
6
+ require "rabbit/renderer/display/base"
7
+ require 'rabbit/renderer/display/cursor'
8
+ require "rabbit/renderer/display/progress"
9
+ require "rabbit/renderer/display/mask"
10
+ require "rabbit/renderer/display/search"
11
+ require "rabbit/renderer/display/gesture"
12
+ require "rabbit/renderer/display/graffiti"
13
+ require "rabbit/renderer/display/menu"
14
+ require "rabbit/renderer/display/button-handler"
15
+ require "rabbit/renderer/display/key-handler"
16
+ require "rabbit/renderer/display/info"
17
+ require "rabbit/renderer/display/spotlight"
18
+ require "rabbit/renderer/display/magnifier"
19
+
20
+ module Rabbit
21
+ add_gui_init_proc do
22
+ Clutter::Gtk.init
23
+ end
24
+
25
+ module Renderer
26
+ module Display
27
+ class ClutterEmbed
28
+ class << self
29
+ def priority
30
+ 200
31
+ end
32
+ end
33
+
34
+ include Base
35
+
36
+ include Cursor
37
+ include Menu
38
+ include Graffiti
39
+ include Mask
40
+ include Progress
41
+ include Search
42
+ include Gesture
43
+ include KeyHandler
44
+ include ButtonHandler
45
+ include Info
46
+ include Spotlight
47
+ include Magnifier
48
+
49
+ include Renderer::Engine::Cairo
50
+
51
+ attr_accessor :filename
52
+ def initialize(canvas)
53
+ @recreate_id = nil
54
+ @need_reload_theme = false
55
+ super
56
+ @filename = nil
57
+ init_clutter_embed
58
+ end
59
+
60
+ def widget
61
+ @embed
62
+ end
63
+
64
+ def clear_slide
65
+ super
66
+ redraw
67
+ end
68
+
69
+ def post_fullscreen
70
+ update_cursor(:blank, true)
71
+ end
72
+
73
+ def post_unfullscreen
74
+ update_menu
75
+ end
76
+
77
+ def post_iconify
78
+ end
79
+
80
+ def post_apply_theme
81
+ recreate_actors
82
+ end
83
+
84
+ def post_move(old_index, index)
85
+ update_title
86
+ update_menu
87
+
88
+ old_actor = retrieve_actor(old_index)
89
+ old_actor.hide if old_actor
90
+ actor = retrieve_actor(index)
91
+ if actor and !hiding?
92
+ actor.show
93
+ actor.raise_top
94
+ if old_actor
95
+ transition = @canvas.slides[index].transition
96
+ transition_method = "transition_#{transition}"
97
+ if transition and respond_to?(transition_method, true)
98
+ send(transition_method, old_actor, actor, old_index, index)
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ def post_move_in_slide(old_index, index)
105
+ actor = retrieve_actor(nil, old_index)
106
+ actor.hide if actor
107
+ actor = retrieve_actor(nil, index)
108
+ if actor and !hiding?
109
+ actor.show
110
+ actor.raise_top
111
+ end
112
+ end
113
+
114
+ def pre_parse
115
+ end
116
+
117
+ def post_parse
118
+ clear_button_handler
119
+ update_title
120
+ update_menu
121
+ if @need_reload_theme
122
+ @need_reload_theme = false
123
+ reload_theme
124
+ end
125
+ end
126
+
127
+ def pre_toggle_index_mode
128
+ end
129
+
130
+ def post_toggle_index_mode
131
+ recreate_actors
132
+ end
133
+
134
+ def pre_to_pixbuf(slide_size)
135
+ end
136
+
137
+ def to_pixbufing(i)
138
+ true
139
+ end
140
+
141
+ def post_to_pixbuf(canceled)
142
+ end
143
+
144
+ def index_mode_on
145
+ keep_cursor(:index)
146
+ update_cursor(nil, true)
147
+ end
148
+
149
+ def index_mode_off
150
+ restore_cursor(:index)
151
+ end
152
+
153
+ def toggle_whiteout
154
+ super
155
+ if whiteouting?
156
+ @stage.color = Clutter::Color.parse("white")
157
+ current_actor.hide
158
+ else
159
+ reset_stage_color
160
+ current_actor.show
161
+ end
162
+ redraw
163
+ end
164
+
165
+ def toggle_blackout
166
+ super
167
+ if blackouting?
168
+ @stage.color = Clutter::Color.parse("black")
169
+ current_actor.hide
170
+ else
171
+ reset_stage_color
172
+ current_actor.show
173
+ end
174
+ redraw
175
+ end
176
+
177
+ def display?
178
+ true
179
+ end
180
+
181
+ def reload_theme(&callback)
182
+ if @canvas.applying?
183
+ @need_reload_theme = true
184
+ else
185
+ callback ||= Utils.process_pending_events_proc
186
+ @canvas.activate("ReloadTheme", &callback)
187
+ end
188
+ end
189
+
190
+ def attach_to(window)
191
+ super
192
+
193
+ init_menu
194
+ add_widget_to_window(@window)
195
+ widget.show
196
+ attach_menu(@window)
197
+ end
198
+
199
+ def detach
200
+ detach_menu(@window)
201
+ widget.hide
202
+ unless @window.destroyed?
203
+ remove_widget_from_window(@window)
204
+ @window.signal_handler_disconnect(@configure_signal_id)
205
+ end
206
+
207
+ super
208
+ end
209
+
210
+ def reset_adjustment
211
+ super
212
+ @actors.each do |slide_actors|
213
+ slide_actors.each do |actor|
214
+ actor.x = 0
215
+ actor.y = 0
216
+ actor.set_scale(1, 1)
217
+ actor.set_rotation(Clutter::X_AXIS, 0, 0, 0, 0)
218
+ actor.set_rotation(Clutter::Y_AXIS, 0, 0, 0, 0)
219
+ actor.set_rotation(Clutter::Z_AXIS, 0, 0, 0, 0)
220
+ end
221
+ end
222
+ end
223
+
224
+ def cache_all_slides
225
+ end
226
+
227
+ def update_comment(source, &block)
228
+ comment = @canvas.comments.last
229
+
230
+ color = Clutter::Color.new(rand(256), rand(256), rand(256),
231
+ 128 + rand(128))
232
+ size = 36 + rand(72)
233
+ actor = Clutter::Label.new("Sans #{size}", comment, color)
234
+ actor.x = @canvas.width
235
+ actor.y = (@canvas.height / 2.0) * rand
236
+ actor.show
237
+ @stage.add(actor)
238
+
239
+ n = 150 + rand(150)
240
+ delta = (@canvas.width + actor.width) / n.to_f
241
+
242
+ do_rotate_x = rand(5).zero?
243
+ do_rotate_y = rand(5).zero?
244
+ do_rotate_z = rand(5).zero?
245
+ do_scale = rand(5).zero?
246
+
247
+ x_axis = actor.x
248
+ y_axis = actor.y - (actor.height * 0.5)
249
+ if do_rotate_x
250
+ actor.set_rotation(Clutter::X_AXIS, rand(360), 0, y_axis, 0)
251
+ end
252
+ if do_rotate_y
253
+ actor.set_rotation(Clutter::Y_AXIS, rand(360), x_axis, 0, 0)
254
+ end
255
+ if do_rotate_z
256
+ actor.set_rotation(Clutter::Z_AXIS, rand(360), x_axis, y_axis, 0)
257
+ end
258
+ if do_scale
259
+ x_sign = 1
260
+ y_sign = 1
261
+ actor.set_scale(-2 + rand(5), -2 + rand(5))
262
+ end
263
+ GLib::Timeout.add(1000 / 50) do
264
+ actor.raise_top
265
+ actor.x -= delta
266
+
267
+ x_angle, x_x, x_y, x_z = actor.get_rotation(Clutter::X_AXIS)
268
+ y_angle, y_x, y_y, y_z = actor.get_rotation(Clutter::Y_AXIS)
269
+ z_angle, z_x, z_y, z_z = actor.get_rotation(Clutter::Z_AXIS)
270
+ x_angle = (x_angle + rand(5)) % 360
271
+ y_angle = (y_angle + rand(5)) % 360
272
+ z_angle = (z_angle + rand(5)) % 360
273
+ x_axis = actor.x
274
+ if do_rotate_x
275
+ actor.set_rotation(Clutter::X_AXIS, x_angle, 0, y_axis, 0)
276
+ end
277
+ if do_rotate_y
278
+ actor.set_rotation(Clutter::Y_AXIS, y_angle, x_axis, 0, 0)
279
+ end
280
+ if do_rotate_z
281
+ actor.set_rotation(Clutter::Z_AXIS, z_angle, x_axis, y_axis, 0)
282
+ end
283
+ if do_scale
284
+ x_scale, y_scale = actor.scale
285
+ x_sign *= -1 if x_scale.abs > 2
286
+ y_sign *= -1 if y_scale.abs > 2
287
+ actor.set_scale(x_scale + (0.1 * x_sign),
288
+ y_scale + (0.1 * y_sign))
289
+ end
290
+ n -= 1
291
+ @stage.remove(actor) if n.zero?
292
+ not n.zero?
293
+ end
294
+ end
295
+
296
+ private
297
+ def add_widget_to_window(window)
298
+ window.add(@embed)
299
+ end
300
+
301
+ def remove_widget_from_window(window)
302
+ window.remove(@embed)
303
+ end
304
+
305
+ def init_dpi
306
+ @x_dpi = ScreenInfo.screen_x_resolution
307
+ @y_dpi = ScreenInfo.screen_y_resolution
308
+ end
309
+
310
+ def init_clutter_embed
311
+ @embed = Clutter::GtkEmbed.new
312
+ @embed.can_focus = true
313
+ @stage = @embed.stage
314
+ reset_stage_color
315
+ set_map
316
+ set_expose_event
317
+ set_configure_event_after
318
+
319
+ event_mask = Gdk::Event::BUTTON_PRESS_MASK
320
+ event_mask |= Gdk::Event::BUTTON_RELEASE_MASK
321
+ event_mask |= Gdk::Event::BUTTON1_MOTION_MASK
322
+ event_mask |= Gdk::Event::BUTTON2_MOTION_MASK
323
+ event_mask |= Gdk::Event::BUTTON3_MOTION_MASK
324
+ @embed.add_events(event_mask)
325
+ set_key_press_event(@embed)
326
+ set_button_event(@embed)
327
+ set_motion_notify_event
328
+ set_scroll_event
329
+ end
330
+
331
+ def reset_stage_color
332
+ @stage.color = Clutter::Color.parse("black")
333
+ end
334
+
335
+ def depth
336
+ @embed.window.depth
337
+ end
338
+
339
+ def draw_nth_slide(index=nil, index_in_slide=nil)
340
+ index ||= @canvas.current_index
341
+ slide = @canvas.slides[index]
342
+ if slide
343
+ old_index_in_slide = slide.drawing_index
344
+ slide.drawing_index = index_in_slide if index_in_slide
345
+ begin
346
+ slide.draw(@canvas, true)
347
+ slide.draw(@canvas, false)
348
+ ensure
349
+ slide.drawing_index = old_index_in_slide
350
+ end
351
+ end
352
+ end
353
+
354
+ def set_map
355
+ @embed.signal_connect("map") do |widget, event|
356
+ @drawable = widget.window
357
+ false
358
+ end
359
+ end
360
+
361
+ def set_expose_event
362
+ @embed.signal_connect("expose-event") do |widget, event|
363
+ reload_source
364
+ false
365
+ end
366
+ end
367
+
368
+ def configured(x, y, w, h)
369
+ super
370
+ recreate_actors
371
+ end
372
+
373
+ def set_configure_event_after
374
+ @embed.signal_connect_after("configure_event") do |widget, event|
375
+ configured_after(widget, event)
376
+ end
377
+ end
378
+
379
+ def configured_after(widget, event)
380
+ reload_theme if @drawable
381
+ false
382
+ end
383
+
384
+ def set_motion_notify_event
385
+ @embed.signal_connect("motion_notify_event") do |widget, event|
386
+ call_hook_procs(@motion_notify_hook_procs, event)
387
+ end
388
+
389
+ begin_x = nil
390
+ begin_y = nil
391
+ prev_x = nil
392
+ prev_y = nil
393
+ start_time = nil
394
+ handled = false
395
+ scale = 1.0
396
+ axis_x = 0.5
397
+ axis_y = 0.5
398
+
399
+ add_button_press_hook do |event|
400
+ handled = false
401
+ start_time = event.time
402
+ begin_x = prev_x = event.x
403
+ begin_y = prev_y = event.y
404
+ false
405
+ end
406
+
407
+ add_motion_notify_hook do |event|
408
+ state = event.state
409
+ if state.button2_mask?
410
+ handled = true
411
+ processed = true
412
+ x = event.x.to_f
413
+ y = event.y.to_f
414
+ w = width.to_f
415
+ h = height.to_f
416
+
417
+ actor = current_actor
418
+ if state.control_mask?
419
+ scale += (y - prev_y) / (h / 4)
420
+ actor.x = (actor.width / 2) * (1 - scale)
421
+ actor.y = (actor.height / 2) * (1 - scale)
422
+ actor.set_scale(scale, scale)
423
+ elsif state.shift_mask?
424
+ angle_x, = actor.get_rotation(Clutter::X_AXIS)
425
+ angle_y, = actor.get_rotation(Clutter::Y_AXIS)
426
+ angle_z, = actor.get_rotation(Clutter::Z_AXIS)
427
+
428
+ delta_x = prev_x - x
429
+ delta_y = y - prev_y
430
+ if delta_x.abs < 3 or delta_y.abs < 3
431
+ if delta_y.abs > delta_x.abs
432
+ angle_x += delta_y
433
+ else
434
+ angle_y += delta_x
435
+ end
436
+ else
437
+ delta_z = Math.sqrt(delta_x ** 2 + delta_y ** 2)
438
+ delta_z *= (delta_x / delta_x) * (delta_y / delta_y)
439
+ angle_z += delta_z
440
+ end
441
+
442
+ actor.set_rotation(Clutter::X_AXIS, angle_x,
443
+ 0,
444
+ actor.height * axis_y,
445
+ 0)
446
+ actor.set_rotation(Clutter::Y_AXIS, angle_y,
447
+ actor.width * axis_x,
448
+ 0,
449
+ 0)
450
+ actor.set_rotation(Clutter::Z_AXIS, angle_z,
451
+ actor.width * axis_x,
452
+ actor.height * axis_y,
453
+ 0)
454
+ else
455
+ processed = false
456
+ end
457
+
458
+ if processed and event.time > start_time + 100
459
+ start_time = event.time
460
+ end
461
+ end
462
+
463
+ prev_x = x
464
+ prev_y = y
465
+
466
+ false
467
+ end
468
+
469
+ add_button_release_hook do |event, last_button_press_event|
470
+ handled
471
+ end
472
+ end
473
+
474
+ def set_scroll_event
475
+ @embed.signal_connect("scroll_event") do |widget, event|
476
+ handled = call_hook_procs(@scroll_hook_procs, event)
477
+ unless handled
478
+ handled = true
479
+ case event.direction
480
+ when Gdk::EventScroll::Direction::UP
481
+ @canvas.activate("PreviousSlide")
482
+ when Gdk::EventScroll::Direction::DOWN
483
+ @canvas.activate("NextSlide")
484
+ else
485
+ handled = false
486
+ end
487
+ end
488
+ handled
489
+ end
490
+ end
491
+
492
+ def retrieve_actor(index=nil, index_in_slide=nil)
493
+ index ||= index || @canvas.current_index
494
+ slide_actors = @actors[index]
495
+ return nil if slide_actors.nil?
496
+ slide = @canvas.slides[index]
497
+ slide_actors[index_in_slide || slide.drawing_index]
498
+ end
499
+
500
+ def current_actor
501
+ retrieve_actor
502
+ end
503
+
504
+ def recreate_actors
505
+ if @recreate_id
506
+ GLib::Source.remove(@recreate_id)
507
+ @recreate_id = nil
508
+ end
509
+
510
+ index = nil
511
+ index_in_slide = 0
512
+ @actors = []
513
+ @stage.remove_all
514
+ @recreate_id = GLib::Idle.add do
515
+ i = index || @canvas.current_index
516
+ slide_actors = @actors[i] || []
517
+ actor = slide_actors[index_in_slide]
518
+ slide = @canvas.slides[i]
519
+ if actor.nil?
520
+ actor = Clutter::Cairo.new(width, height)
521
+ context = actor.create
522
+ init_context(context)
523
+ draw_nth_slide(i, index_in_slide)
524
+ finish_context
525
+ @actors[i] ||= []
526
+ @actors[i][index_in_slide] = actor
527
+ @stage.add(actor)
528
+ current_index_in_slide = index_in_slide == slide.drawing_index
529
+ if index.nil? and current_index_in_slide and !hiding?
530
+ actor.show
531
+ actor.raise_top
532
+ Utils.process_pending_events_proc.call
533
+ else
534
+ actor.hide
535
+ end
536
+ end
537
+
538
+ slide = @canvas.slides[i]
539
+ if slide and slide.last?(index_in_slide)
540
+ index = -1 if index.nil?
541
+ index += 1
542
+ index_in_slide = 0
543
+ have_next = index < @canvas.slide_size
544
+ else
545
+ index_in_slide += 1
546
+ have_next = true
547
+ end
548
+
549
+ unless have_next
550
+ @recreate_id = nil
551
+ end
552
+ have_next
553
+ end
554
+ end
555
+
556
+ def grab
557
+ Gtk.grab_add(@embed)
558
+ Gdk.pointer_grab(@embed.window, false,
559
+ Gdk::Event::BUTTON_PRESS_MASK |
560
+ Gdk::Event::BUTTON_RELEASE_MASK |
561
+ Gdk::Event::SCROLL_MASK |
562
+ Gdk::Event::POINTER_MOTION_MASK,
563
+ nil, nil,
564
+ Gdk::Event::CURRENT_TIME)
565
+ end
566
+
567
+ def ungrab
568
+ Gtk.grab_remove(@embed)
569
+ Gdk.pointer_ungrab(Gdk::Event::CURRENT_TIME)
570
+ end
571
+
572
+ def pointer
573
+ window, x, y, mask = @embed.window.pointer
574
+ [x, y, mask]
575
+ end
576
+
577
+ def transition_turn_over(old_actor, actor, old_index, index)
578
+ old_actor.show
579
+ old_actor.raise_top
580
+
581
+ n = 90
582
+ if old_index > index
583
+ angle_sign = -1
584
+ x = old_actor.width
585
+ else
586
+ angle_sign = 1
587
+ x = 0
588
+ end
589
+ GLib::Timeout.add(1000 / n) do
590
+ angle = (n - 90) * angle_sign
591
+ old_actor.set_rotation(Clutter::Y_AXIS, angle, x, 0, 0)
592
+ n -= 1
593
+ if n.zero?
594
+ old_actor.hide
595
+ old_actor.set_rotation(Clutter::Y_AXIS, 0, 0, 0, 0)
596
+ actor.show
597
+ end
598
+ not n.zero?
599
+ end
600
+ end
601
+
602
+ def transition_small_and_slide_out(old_actor, actor, old_index, index)
603
+ old_actor.show
604
+ old_actor.raise_top
605
+
606
+ n = 180
607
+ half = 90
608
+ scale = 1
609
+ GLib::Timeout.add(1000 / n) do
610
+ if n > half
611
+ old_actor.x = (old_actor.width / 2) * (1 - scale)
612
+ old_actor.y = (old_actor.height / 2) * (1 - scale)
613
+ old_actor.set_scale(scale, scale)
614
+ scale -= 0.5 / half
615
+ else
616
+ delta = old_actor.width / half
617
+ delta *= -1 if old_index < index
618
+ old_actor.x += delta
619
+ end
620
+ n -= 1
621
+ if n.zero?
622
+ old_actor.hide
623
+ old_actor.x = 0
624
+ old_actor.y = 0
625
+ old_actor.set_scale(1, 1)
626
+ actor.show
627
+ end
628
+ not n.zero?
629
+ end
630
+ end
631
+ end
632
+ end
633
+ end
634
+ end