rabbit 3.0.4 → 4.0.0

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 (243) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Rakefile +53 -7
  4. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  5. data/doc/_config.yml +2 -2
  6. data/doc/en/news.rd +69 -1
  7. data/doc/ja/news.rd +68 -0
  8. data/lib/rabbit/actions.rb +446 -0
  9. data/lib/rabbit/author-configuration.rb +7 -10
  10. data/lib/rabbit/canvas.rb +74 -42
  11. data/lib/rabbit/command/rabbit-slide.rb +11 -13
  12. data/lib/rabbit/command/rabbit-theme.rb +10 -12
  13. data/lib/rabbit/command/rabbit.rb +31 -43
  14. data/lib/rabbit/console.rb +20 -22
  15. data/lib/rabbit/dependency-canvas.rb +2 -2
  16. data/lib/rabbit/element/base.rb +93 -6
  17. data/lib/rabbit/element/block-element.rb +17 -1
  18. data/lib/rabbit/element/block.rb +17 -1
  19. data/lib/rabbit/element/container-element.rb +59 -3
  20. data/lib/rabbit/element/description-list.rb +18 -2
  21. data/lib/rabbit/element/enum-list.rb +18 -2
  22. data/lib/rabbit/element/footnote.rb +18 -2
  23. data/lib/rabbit/element/image-title-slide.rb +17 -1
  24. data/lib/rabbit/element/image.rb +32 -2
  25. data/lib/rabbit/element/index-slide.rb +29 -13
  26. data/lib/rabbit/element/item-list.rb +18 -2
  27. data/lib/rabbit/element/method-list.rb +18 -2
  28. data/lib/rabbit/element/poppler-page.rb +17 -1
  29. data/lib/rabbit/element/poppler-slide.rb +18 -2
  30. data/lib/rabbit/element/poppler-title-slide.rb +18 -2
  31. data/lib/rabbit/element/preformatted.rb +18 -2
  32. data/lib/rabbit/element/slide-element.rb +29 -2
  33. data/lib/rabbit/element/slide.rb +18 -2
  34. data/lib/rabbit/element/syntax-highlighting.rb +17 -1
  35. data/lib/rabbit/element/table.rb +19 -3
  36. data/lib/rabbit/element/tag.rb +18 -2
  37. data/lib/rabbit/element/text-block-element.rb +18 -2
  38. data/lib/rabbit/element/text-container-element.rb +41 -2
  39. data/lib/rabbit/element/text-element.rb +17 -1
  40. data/lib/rabbit/element/text-renderer.rb +17 -1
  41. data/lib/rabbit/element/text.rb +4 -4
  42. data/lib/rabbit/element/title-slide.rb +19 -3
  43. data/lib/rabbit/element/video.rb +157 -56
  44. data/lib/rabbit/element.rb +20 -20
  45. data/lib/rabbit/formatter.rb +18 -1
  46. data/lib/rabbit/frame.rb +102 -90
  47. data/lib/rabbit/front.rb +11 -4
  48. data/lib/rabbit/gem-finder.rb +4 -8
  49. data/lib/rabbit/gem-pusher.rb +4 -4
  50. data/lib/rabbit/gesture/handler.rb +26 -21
  51. data/lib/rabbit/graffiti/config-dialog.rb +18 -2
  52. data/lib/rabbit/graffiti/processor.rb +20 -4
  53. data/lib/rabbit/gtk.rb +48 -14
  54. data/lib/rabbit/html/generator.rb +18 -18
  55. data/{test/helper/fixture.rb → lib/rabbit/icon.rb} +16 -6
  56. data/lib/rabbit/image/base.rb +7 -6
  57. data/lib/rabbit/image/default.rb +17 -1
  58. data/lib/rabbit/image/dia.rb +2 -2
  59. data/lib/rabbit/image/eps.rb +16 -2
  60. data/lib/rabbit/image/gimp.rb +28 -11
  61. data/lib/rabbit/image/mermaid.rb +3 -3
  62. data/lib/rabbit/image/pdf.rb +3 -3
  63. data/lib/rabbit/image/svg.rb +2 -2
  64. data/lib/rabbit/image.rb +8 -8
  65. data/lib/rabbit/info-window.rb +55 -18
  66. data/lib/rabbit/key-handler.rb +381 -0
  67. data/lib/rabbit/keys.rb +31 -2
  68. data/lib/rabbit/logger/base.rb +17 -1
  69. data/lib/rabbit/logger/gui.rb +20 -4
  70. data/lib/rabbit/logger/stderr.rb +16 -2
  71. data/lib/rabbit/logger.rb +4 -4
  72. data/lib/rabbit/menu.rb +200 -220
  73. data/lib/rabbit/parser/base.rb +17 -1
  74. data/lib/rabbit/parser/ext/aafigure.rb +17 -1
  75. data/lib/rabbit/parser/ext/blockdiag.rb +17 -1
  76. data/lib/rabbit/parser/ext/charty.rb +2 -2
  77. data/lib/rabbit/parser/ext/coderay.rb +20 -4
  78. data/lib/rabbit/parser/ext/enscript.rb +31 -15
  79. data/lib/rabbit/parser/ext/entity.rb +17 -1
  80. data/lib/rabbit/parser/ext/image.rb +6 -6
  81. data/lib/rabbit/parser/ext/inline.rb +17 -1
  82. data/lib/rabbit/parser/ext/rouge.rb +7 -4
  83. data/lib/rabbit/parser/ext/tex.rb +18 -2
  84. data/lib/rabbit/parser/ext/video.rb +4 -4
  85. data/lib/rabbit/parser/image.rb +20 -4
  86. data/lib/rabbit/parser/markdown/converter.rb +12 -13
  87. data/lib/rabbit/parser/markdown.rb +18 -2
  88. data/lib/rabbit/parser/pause-support.rb +1 -0
  89. data/lib/rabbit/parser/pdf.rb +3 -3
  90. data/lib/rabbit/parser/rd/ext/base.rb +20 -4
  91. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +24 -28
  92. data/lib/rabbit/parser/rd/ext/character-reference.rb +18 -2
  93. data/lib/rabbit/parser/rd/ext/image.rb +3 -3
  94. data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +6 -6
  95. data/lib/rabbit/parser/rd/ext/refer.rb +18 -2
  96. data/lib/rabbit/parser/rd/ext/video.rb +19 -2
  97. data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +24 -8
  98. data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +18 -2
  99. data/lib/rabbit/parser/rd/visitor.rb +18 -2
  100. data/lib/rabbit/parser/rd.rb +18 -2
  101. data/lib/rabbit/parser/wiki/output.rb +25 -28
  102. data/lib/rabbit/parser/wiki.rb +18 -2
  103. data/lib/rabbit/parser.rb +8 -6
  104. data/lib/rabbit/path-manipulatable.rb +4 -4
  105. data/lib/rabbit/progress.rb +17 -1
  106. data/lib/rabbit/properties.rb +3 -3
  107. data/lib/rabbit/rabbit.rb +15 -7
  108. data/lib/rabbit/readme-parser.rb +4 -6
  109. data/lib/rabbit/renderer/base.rb +44 -36
  110. data/lib/rabbit/renderer/color.rb +18 -2
  111. data/lib/rabbit/renderer/display/base.rb +10 -12
  112. data/lib/rabbit/renderer/display/button-handler.rb +141 -60
  113. data/lib/rabbit/renderer/display/cursor.rb +4 -5
  114. data/lib/rabbit/renderer/display/drawing-area-base.rb +32 -48
  115. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +10 -61
  116. data/lib/rabbit/renderer/display/drawing-area-view-only.rb +19 -8
  117. data/lib/rabbit/renderer/display/drawing-area.rb +19 -15
  118. data/lib/rabbit/renderer/display/gesture.rb +9 -9
  119. data/lib/rabbit/renderer/display/graffiti.rb +22 -13
  120. data/lib/rabbit/renderer/display/info.rb +22 -2
  121. data/lib/rabbit/renderer/display/magnifier.rb +30 -17
  122. data/lib/rabbit/renderer/display/mask.rb +17 -1
  123. data/lib/rabbit/renderer/display/menu.rb +27 -3
  124. data/lib/rabbit/renderer/display/motion-handler.rb +45 -0
  125. data/lib/rabbit/renderer/display/progress.rb +17 -2
  126. data/lib/rabbit/renderer/display/scroll-handler.rb +60 -13
  127. data/lib/rabbit/renderer/display/search.rb +19 -2
  128. data/lib/rabbit/renderer/display/spotlight.rb +39 -25
  129. data/lib/rabbit/renderer/display.rb +16 -36
  130. data/lib/rabbit/renderer/engine/cairo.rb +4 -11
  131. data/lib/rabbit/renderer/engine.rb +17 -1
  132. data/lib/rabbit/renderer/kernel.rb +2 -20
  133. data/lib/rabbit/renderer/offscreen.rb +8 -14
  134. data/lib/rabbit/renderer/print-layout.rb +2 -2
  135. data/lib/rabbit/renderer/printer.rb +9 -16
  136. data/lib/rabbit/renderer/scene-background-widget.rb +95 -0
  137. data/lib/rabbit/renderer/scene-node-widget.rb +63 -0
  138. data/lib/rabbit/renderer/scene.rb +508 -0
  139. data/lib/rabbit/renderer.rb +6 -6
  140. data/lib/rabbit/search-window.rb +18 -2
  141. data/lib/rabbit/searcher.rb +15 -1
  142. data/lib/rabbit/size.rb +9 -1
  143. data/lib/rabbit/slide-configuration.rb +11 -14
  144. data/lib/rabbit/soap/driver.rb +20 -4
  145. data/lib/rabbit/soap/server.rb +17 -1
  146. data/lib/rabbit/source/argf.rb +5 -5
  147. data/lib/rabbit/source/base.rb +5 -6
  148. data/lib/rabbit/source/file.rb +5 -5
  149. data/lib/rabbit/source/memory.rb +20 -4
  150. data/lib/rabbit/source/uri.rb +9 -11
  151. data/lib/rabbit/source-generator/hiki.rb +2 -7
  152. data/lib/rabbit/source-generator/markdown.rb +2 -7
  153. data/lib/rabbit/source-generator/rd.rb +2 -7
  154. data/lib/rabbit/source-generator.rb +4 -4
  155. data/lib/rabbit/source.rb +5 -5
  156. data/lib/rabbit/task/slide.rb +13 -11
  157. data/lib/rabbit/task/theme.rb +8 -11
  158. data/lib/rabbit/task.rb +3 -3
  159. data/lib/rabbit/theme/applier.rb +27 -11
  160. data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
  161. data/lib/rabbit/theme/color-circle/color-circle.rb +18 -1
  162. data/lib/rabbit/theme/cozmixng/cozmixng.rb +1 -1
  163. data/lib/rabbit/theme/default/default.rb +1 -0
  164. data/lib/rabbit/theme/default-icon/default-icon.rb +1 -1
  165. data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +17 -1
  166. data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +9 -1
  167. data/lib/rabbit/theme/enishi-green/enishi-green.rb +1 -1
  168. data/lib/rabbit/theme/entry.rb +10 -12
  169. data/lib/rabbit/theme/icon/icon.rb +3 -8
  170. data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +5 -5
  171. data/lib/rabbit/theme/image-timer/image-timer.rb +3 -3
  172. data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +1 -0
  173. data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +1 -0
  174. data/lib/rabbit/theme/manager.rb +19 -9
  175. data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +1 -1
  176. data/lib/rabbit/theme/ranguba/ranguba.rb +1 -1
  177. data/lib/rabbit/theme/red-frame/red-frame.rb +6 -2
  178. data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +1 -0
  179. data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +1 -1
  180. data/lib/rabbit/theme/searcher.rb +23 -7
  181. data/lib/rabbit/theme/slide-number/slide-number.rb +1 -1
  182. data/lib/rabbit/theme/slide-show/slide-show.rb +1 -1
  183. data/lib/rabbit/theme/table/table.rb +2 -2
  184. data/lib/rabbit/theme/video/property.rb +3 -0
  185. data/lib/rabbit/theme/video/video.rb +5 -0
  186. data/lib/rabbit/theme-configuration.rb +9 -11
  187. data/lib/rabbit/utils.rb +12 -94
  188. data/lib/rabbit/version.rb +2 -2
  189. data/lib/rabbit/xmlrpc/client.rb +17 -1
  190. data/lib/rabbit/xmlrpc/server.rb +17 -1
  191. data/po/en/rabbit.edit.po +325 -317
  192. data/po/en/rabbit.po +61 -55
  193. data/po/fr/rabbit.edit.po +325 -317
  194. data/po/fr/rabbit.po +61 -55
  195. data/po/ja/rabbit.edit.po +346 -371
  196. data/po/ja/rabbit.po +83 -80
  197. data/rabbit.gemspec +4 -2
  198. data/sample/block-quote.rab +13 -0
  199. data/sample/description-list.rab +17 -0
  200. data/sample/mermaid.rab +16 -0
  201. data/sample/rabbit-en.hiki +0 -1
  202. data/sample/rabbit-en.md +0 -1
  203. data/sample/rabbit-en.rd +0 -1
  204. data/sample/rabbit.hiki +0 -1
  205. data/sample/rabbit.md +0 -1
  206. data/sample/rabbit.rd +0 -1
  207. data/sample/video.rab +17 -0
  208. metadata +33 -65
  209. data/lib/rabbit/action/basic.rb +0 -304
  210. data/lib/rabbit/action/radio.rb +0 -78
  211. data/lib/rabbit/action/toggle.rb +0 -82
  212. data/lib/rabbit/action.rb +0 -140
  213. data/lib/rabbit/renderer/display/gl.rb +0 -98
  214. data/lib/rabbit/renderer/display/key-handler.rb +0 -321
  215. data/lib/rabbit/renderer/gl.rb +0 -95
  216. data/lib/rabbit/renderer/screen.rb +0 -286
  217. data/lib/rabbit/renderer/widget/drawing-area.rb +0 -93
  218. data/lib/rabbit/stock.rb +0 -31
  219. data/lib/rabbit/trackball.rb +0 -228
  220. data/lib/rabbit/video-window.rb +0 -123
  221. data/test/command/test-rabbit.rb +0 -101
  222. data/test/helper/parser.rb +0 -48
  223. data/test/helper.rb +0 -24
  224. data/test/image/test-dia.rb +0 -54
  225. data/test/image/test-eps.rb +0 -41
  226. data/test/parser/test-markdown.rb +0 -360
  227. data/test/parser/test-rd.rb +0 -43
  228. data/test/parser/test-wiki.rb +0 -71
  229. data/test/run-test.rb +0 -27
  230. data/test/source-generator/test-hiki.rb +0 -68
  231. data/test/source-generator/test-markdown.rb +0 -67
  232. data/test/source-generator/test-rd.rb +0 -69
  233. data/test/test-applier.rb +0 -73
  234. data/test/test-author-configuration.rb +0 -37
  235. data/test/test-canvas.rb +0 -70
  236. data/test/test-color.rb +0 -51
  237. data/test/test-element.rb +0 -103
  238. data/test/test-readme-parser.rb +0 -160
  239. data/test/test-size.rb +0 -155
  240. data/test/test-slide-configuration.rb +0 -74
  241. data/test/test-source.rb +0 -122
  242. data/test/test-theme-configuration.rb +0 -47
  243. data/test/test-utils.rb +0 -64
@@ -1,4 +1,20 @@
1
- require "rabbit/menu"
1
+ # Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+
17
+ require_relative "../../menu"
2
18
 
3
19
  module Rabbit
4
20
  module Renderer
@@ -13,8 +29,16 @@ module Rabbit
13
29
  @menu.update_menu(@canvas)
14
30
  end
15
31
 
16
- def popup_menu
17
- @menu.popup(0, Gtk.current_event_time)
32
+ def toggle_menu(x=nil, y=nil)
33
+ @menu.toggle(x, y)
34
+ end
35
+
36
+ def popup_menu(x=nil, y=nil)
37
+ @menu.popup(x, y)
38
+ end
39
+
40
+ def popdown_menu
41
+ @menu.popdown
18
42
  end
19
43
 
20
44
  def attach_menu(window)
@@ -0,0 +1,45 @@
1
+ # Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+
17
+ require_relative "../../gtk"
18
+
19
+ module Rabbit
20
+ module Renderer
21
+ module Display
22
+ module MotionHandler
23
+ private
24
+ if Gtk::Widget.method_defined?(:add_controller)
25
+ def set_motion_event(widget)
26
+ motion = Gtk::EventControllerMotion.new
27
+ motion.signal_connect(:motion) do |_, x, y|
28
+ call_hook_procs(@motion_notify_hook_procs, x, y)
29
+ end
30
+ widget.add_controller(motion)
31
+ end
32
+ else
33
+ def set_motion_event(widget)
34
+ widget.add_events(Gdk::EventMask::BUTTON1_MOTION_MASK |
35
+ Gdk::EventMask::BUTTON2_MOTION_MASK |
36
+ Gdk::EventMask::BUTTON3_MOTION_MASK)
37
+ widget.signal_connect("motion_notify_event") do |widget, event|
38
+ call_hook_procs(@motion_notify_hook_procs, event.x, event.y)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,7 +1,22 @@
1
+ # Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+
1
17
  require "forwardable"
2
18
 
3
- require "rabbit/action"
4
- require "rabbit/progress"
19
+ require_relative "../../progress"
5
20
 
6
21
  module Rabbit
7
22
  module Renderer
@@ -1,4 +1,20 @@
1
- require 'rabbit/gtk'
1
+ # Copyright (C) 2010-2025 Sutou Kouhei <kou@cozmixng.org>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+
17
+ require_relative "../../gtk"
2
18
 
3
19
  module Rabbit
4
20
  module Renderer
@@ -13,21 +29,52 @@ module Rabbit
13
29
  def init_scroll_handler
14
30
  end
15
31
 
16
- def set_scroll_event(widget)
17
- widget.signal_connect("scroll_event") do |widget, event|
18
- handled = call_hook_procs(@scroll_hook_procs, event)
19
- unless handled
20
- handled = true
21
- case event.direction
22
- when Gdk::ScrollDirection::UP
23
- @canvas.activate("PreviousSlide")
24
- when Gdk::ScrollDirection::DOWN
25
- @canvas.activate("NextSlide")
32
+ if Gtk::Widget.method_defined?(:add_controller)
33
+ ScrollEvent = Struct.new(:direction)
34
+
35
+ def set_scroll_event(widget)
36
+ scroll = Gtk::EventControllerScroll.new([:both_axes])
37
+ scroll.signal_connect(:scroll) do |_, dx, dy|
38
+ if dy.zero?
39
+ false
26
40
  else
27
- handled = false
41
+ if dy.positive?
42
+ direction = Gdk::ScrollDirection::UP
43
+ else
44
+ direction = Gdk::ScrollDirection::DOWN
45
+ end
46
+ event = ScrollEvent.new(direction)
47
+ handled = call_hook_procs(@scroll_hook_procs, event)
48
+ unless handled
49
+ if direction == Gdk::ScrollDirection::UP
50
+ @canvas.activate("NextSlide")
51
+ else
52
+ @canvas.activate("PreviousSlide")
53
+ end
54
+ end
55
+ true
56
+ end
57
+ end
58
+ widget.add_controller(scroll)
59
+ end
60
+ else
61
+ def set_scroll_event(widget)
62
+ widget.add_events(Gdk::EventMask::SCROLL_MASK)
63
+ widget.signal_connect("scroll_event") do |widget, event|
64
+ handled = call_hook_procs(@scroll_hook_procs, event)
65
+ unless handled
66
+ handled = true
67
+ case event.direction
68
+ when Gdk::ScrollDirection::UP
69
+ @canvas.activate("PreviousSlide")
70
+ when Gdk::ScrollDirection::DOWN
71
+ @canvas.activate("NextSlide")
72
+ else
73
+ handled = false
74
+ end
28
75
  end
76
+ handled
29
77
  end
30
- handled
31
78
  end
32
79
  end
33
80
  end
@@ -1,4 +1,20 @@
1
- require "rabbit/search-window"
1
+ # Copyright (C) 2006-2025 Sutou Kouhei <kou@cozmixng.org>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+
17
+ require_relative "../../search-window"
2
18
 
3
19
  module Rabbit
4
20
  module Renderer
@@ -103,7 +119,8 @@ module Rabbit
103
119
  if target_index and target_index >= 0 and
104
120
  target_index < indexes.size and
105
121
  indexes[target_index] != current_index
106
- @canvas.activate("JumpTo") {indexes[target_index]}
122
+ @canvas.activate("JumpToSlide",
123
+ GLib::Variant.new(indexes[target_index], "i"))
107
124
  end
108
125
  end
109
126
  end
@@ -1,3 +1,19 @@
1
+ # Copyright (C) 2006-2025 Sutou Kouhei <kou@cozmixng.org>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+
1
17
  module Rabbit
2
18
  module Renderer
3
19
  module Display
@@ -7,17 +23,12 @@ module Rabbit
7
23
  init_spotlight
8
24
  end
9
25
 
10
- def attach_to(window, container=nil)
11
- super
12
- spotlight_action.active = false
13
- end
14
-
15
26
  def toggle_spotlight
27
+ @spotlighting = !@spotlighting
16
28
  if spotlighting?
17
29
  grab
18
- x, y, mask = pointer
19
- @spotlight_center_x ||= x
20
- @spotlight_center_y ||= y
30
+ @spotlight_center_x ||= 0
31
+ @spotlight_center_y ||= 0
21
32
  else
22
33
  ungrab
23
34
  @spotlight_center_x = nil
@@ -26,22 +37,33 @@ module Rabbit
26
37
  queue_draw
27
38
  end
28
39
 
40
+ def spotlighting?
41
+ @spotlighting
42
+ end
43
+
29
44
  private
30
45
  def init_spotlight
46
+ @spotlighting = false
47
+
31
48
  @spotlight_radius_ratio = 0.1
32
49
  @spotlight_center_x = nil
33
50
  @spotlight_center_y = nil
34
51
 
35
- target_button = 3
36
- target_event_type = Gdk::EventType::BUTTON2_PRESS
37
- target_info = [target_button, target_event_type]
38
-
39
52
  add_button_press_hook do |event|
40
- if [event.button, event.event_type] == target_info
53
+ is_target = lambda do
54
+ return false unless event.button == 3
55
+ if Gdk::EventType.const_defined?(:BUTTON2_PRESS)
56
+ event.event_type == Gdk::EventType::BUTTON2_PRESS
57
+ else
58
+ event.event_type == Gdk::EventType::BUTTON_PRESS and
59
+ event.n_presses == 2
60
+ end
61
+ end
62
+ if is_target.call
41
63
  add_button_handler do
42
64
  @spotlight_center_x = event.x
43
65
  @spotlight_center_y = event.y
44
- spotlight_action.active = !spotlight_action.active?
66
+ @canvas.activate("ToggleSpotlight")
45
67
  clear_button_handler
46
68
  true
47
69
  end
@@ -49,10 +71,10 @@ module Rabbit
49
71
  false
50
72
  end
51
73
 
52
- add_motion_notify_hook do |event|
74
+ add_motion_notify_hook do |x, y|
53
75
  if spotlighting?
54
- @spotlight_center_x = event.x
55
- @spotlight_center_y = event.y
76
+ @spotlight_center_x = x
77
+ @spotlight_center_y = y
56
78
  queue_draw
57
79
  true
58
80
  else
@@ -103,14 +125,6 @@ module Rabbit
103
125
  }
104
126
  draw_rectangle(true, 0, 0, size.real_width, size.real_height, nil, params)
105
127
  end
106
-
107
- def spotlighting?
108
- spotlight_action.active?
109
- end
110
-
111
- def spotlight_action
112
- @canvas.action("ToggleSpotlight")
113
- end
114
128
  end
115
129
  end
116
130
  end
@@ -1,37 +1,17 @@
1
- require "rabbit/utils"
1
+ # Copyright (C) 2006-2025 Sutou Kouhei <kou@cozmixng.org>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2
16
 
3
- module Rabbit
4
- module Renderer
5
- module Display
6
- extend Utils
7
-
8
- class << self
9
- @initialized = false
10
- @preferred_class_name = nil
11
- def init(options={})
12
- if options.has_key?(:preferred_class_name)
13
- @preferred_class_name = options[:preferred_class_name]
14
- end
15
- unless @initialized
16
- @initialized = true
17
- dir = ::File.join("rabbit", "renderer", "display")
18
- require_files_under_directory_in_load_path(dir)
19
- end
20
- end
21
-
22
- def new(*args, &block)
23
- init
24
- target_class = nil
25
- if @preferred_class_name
26
- if const_defined?(@preferred_class_name)
27
- target_class = const_get(@preferred_class_name)
28
- target_class = nil unless target_class.is_a?(Class)
29
- end
30
- end
31
- target_class ||= corresponding_class_under_module(self)
32
- target_class.new(*args, &block)
33
- end
34
- end
35
- end
36
- end
37
- end
17
+ require_relative "display/drawing-area"
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2005-2024 Sutou Kouhei <kou@cozmixng.org>
1
+ # Copyright (C) 2005-2025 Sutou Kouhei <kou@cozmixng.org>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -17,8 +17,8 @@
17
17
  require "cairo"
18
18
  require "stringio"
19
19
 
20
- require "rabbit/image-data-loader"
21
- require "rabbit/renderer/kernel"
20
+ require_relative "../../image-data-loader"
21
+ require_relative "../kernel"
22
22
 
23
23
  module Rabbit
24
24
  module Renderer
@@ -26,8 +26,6 @@ module Rabbit
26
26
  module Cairo
27
27
  include Kernel
28
28
 
29
- attr_writer :foreground, :background
30
-
31
29
  def background_image=(pixbuf)
32
30
  surface = ::Cairo::ImageSurface.new(::Cairo::FORMAT_A1, 1, 1)
33
31
  context = ::Cairo::Context.new(surface)
@@ -316,11 +314,6 @@ module Rabbit
316
314
  end
317
315
 
318
316
  private
319
- def init_engine_color
320
- @foreground = make_color("black")
321
- @background = make_color(@background_color)
322
- end
323
-
324
317
  def set_source(color, params={})
325
318
  pattern = params[:pattern]
326
319
  set = false
@@ -474,7 +467,7 @@ module Rabbit
474
467
  end
475
468
 
476
469
  def set_stroke_options(params)
477
- set_line_width(get_line_width(params))
470
+ set_line_width(params[:line_width] || 1)
478
471
  [:line_cap, :line_join].each do |key|
479
472
  value = params[key]
480
473
  @context.send("#{key}=", value) if value
@@ -1 +1,17 @@
1
- require "rabbit/renderer/engine/cairo"
1
+ # Copyright (C) 2006-2025 Sutou Kouhei <kou@cozmixng.org>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+
17
+ require_relative "engine/cairo"
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006-2018 Kouhei Sutou <kou@cozmixng.org>
1
+ # Copyright (C) 2006-2025 Sutou Kouhei <kou@cozmixng.org>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -14,22 +14,11 @@
14
14
  # with this program; if not, write to the Free Software Foundation, Inc.,
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
 
17
- require "rabbit/pango-markup"
18
-
19
- require "rabbit/renderer/color"
17
+ require_relative "../pango-markup"
20
18
 
21
19
  module Rabbit
22
20
  module Renderer
23
21
  module Kernel
24
- def make_color(color)
25
- return color if color.is_a?(Color)
26
- if color.nil?
27
- @foreground
28
- else
29
- Color.parse(color)
30
- end
31
- end
32
-
33
22
  def translate_context(x, y, params={})
34
23
  end
35
24
 
@@ -204,13 +193,6 @@ module Rabbit
204
193
  end
205
194
 
206
195
  private
207
- def get_line_width(params, default=nil)
208
- params[:line_width] || default
209
- end
210
-
211
- def set_font_resolution(context)
212
- end
213
-
214
196
  def setup_flag_params(pole_height, default_flag_width_ratio, params)
215
197
  params = params.dup
216
198
 
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2016-2024 Sutou Kouhei <kou@cozmixng.org>
1
+ # Copyright (C) 2016-2025 Sutou Kouhei <kou@cozmixng.org>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -14,15 +14,14 @@
14
14
  # with this program; if not, write to the Free Software Foundation, Inc.,
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
 
17
- require "rabbit/image-data-loader"
18
- require "rabbit/renderer/base"
19
- require "rabbit/renderer/engine/cairo"
20
- require "rabbit/utils"
17
+ require_relative "../image-data-loader"
18
+ require_relative "base"
19
+ require_relative "engine/cairo"
20
+ require_relative "../utils"
21
21
 
22
22
  module Rabbit
23
23
  module Renderer
24
- class Offscreen
25
- include Renderer::Base
24
+ class Offscreen < Base
26
25
  include Engine::Cairo
27
26
 
28
27
  attr_accessor :filename
@@ -93,12 +92,12 @@ module Rabbit
93
92
  end
94
93
 
95
94
  def create_pango_context
96
- context = Gtk::Invisible.new.create_pango_context
95
+ context = Gtk::Label.new.create_pango_context
97
96
  set_font_resolution(context)
98
97
  context
99
98
  end
100
99
 
101
- def pre_to_pixbuf(slide_size)
100
+ def pre_to_pixbuf(n_slides)
102
101
  end
103
102
 
104
103
  def to_pixbufing(i)
@@ -110,11 +109,6 @@ module Rabbit
110
109
  end
111
110
 
112
111
  private
113
- def init_color
114
- super
115
- init_engine_color
116
- end
117
-
118
112
  def offscreen_renderer?
119
113
  true
120
114
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2005-2018 Kouhei Sutou <kou@cozmixng.org>
1
+ # Copyright (C) 2005-2025 Sutou Kouhei <kou@cozmixng.org>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -14,7 +14,7 @@
14
14
  # with this program; if not, write to the Free Software Foundation, Inc.,
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
 
17
- require "rabbit/rabbit"
17
+ require_relative "../rabbit"
18
18
 
19
19
  module Rabbit
20
20
  module Renderer
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2005-2024 Sutou Kouhei <kou@cozmixng.org>
1
+ # Copyright (C) 2005-2025 Sutou Kouhei <kou@cozmixng.org>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -14,21 +14,20 @@
14
14
  # with this program; if not, write to the Free Software Foundation, Inc.,
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
 
17
- require "rabbit/rabbit"
17
+ require_relative "../rabbit"
18
18
 
19
- require "rabbit/filename"
19
+ require_relative "../filename"
20
20
 
21
- require "rabbit/renderer/base"
22
- require "rabbit/renderer/engine/cairo"
23
- require "rabbit/renderer/print-layout"
21
+ require_relative "base"
22
+ require_relative "engine/cairo"
23
+ require_relative "print-layout"
24
24
 
25
25
  module Rabbit
26
26
  module Renderer
27
- class Printer
27
+ class Printer < Base
28
28
  A4_WIDTH = 596
29
29
  A4_HEIGHT = 842
30
30
 
31
- include Renderer::Base
32
31
  include Engine::Cairo
33
32
 
34
33
  attr_writer :filename
@@ -81,7 +80,7 @@ module Rabbit
81
80
  @filename || default_filename
82
81
  end
83
82
 
84
- def pre_print(slide_size)
83
+ def pre_print(n_slides)
85
84
  init_context(create_context)
86
85
  end
87
86
 
@@ -177,12 +176,6 @@ module Rabbit
177
176
  end
178
177
  end
179
178
 
180
- def init_color
181
- super
182
- @foreground = make_color("black")
183
- @background = make_color(@background_color)
184
- end
185
-
186
179
  def update_layout
187
180
  @layout = PrintLayout.create(self, @canvas)
188
181
  end
@@ -214,7 +207,7 @@ module Rabbit
214
207
  args[0] = ::Cairo::ScriptDevice.new(args[0])
215
208
  ::Cairo::ScriptSurface.new(*args)
216
209
  else
217
- @canvas.logger.warn(_("can't find printer for %s") % filename)
210
+ Rabbit.logger.warn(_("can't find printer for %s") % filename)
218
211
  args[0] = "default.ps"
219
212
  ::Cairo::PSSurface.new(*args)
220
213
  end