rabbit 3.0.5 → 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 (241) hide show
  1. checksums.yaml +4 -4
  2. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  3. data/doc/_config.yml +2 -2
  4. data/doc/en/news.rd +54 -0
  5. data/doc/ja/news.rd +54 -0
  6. data/lib/rabbit/actions.rb +446 -0
  7. data/lib/rabbit/author-configuration.rb +7 -10
  8. data/lib/rabbit/canvas.rb +74 -42
  9. data/lib/rabbit/command/rabbit-slide.rb +11 -13
  10. data/lib/rabbit/command/rabbit-theme.rb +10 -12
  11. data/lib/rabbit/command/rabbit.rb +31 -43
  12. data/lib/rabbit/console.rb +20 -22
  13. data/lib/rabbit/dependency-canvas.rb +2 -2
  14. data/lib/rabbit/element/base.rb +93 -6
  15. data/lib/rabbit/element/block-element.rb +17 -1
  16. data/lib/rabbit/element/block.rb +17 -1
  17. data/lib/rabbit/element/container-element.rb +59 -3
  18. data/lib/rabbit/element/description-list.rb +18 -2
  19. data/lib/rabbit/element/enum-list.rb +18 -2
  20. data/lib/rabbit/element/footnote.rb +18 -2
  21. data/lib/rabbit/element/image-title-slide.rb +17 -1
  22. data/lib/rabbit/element/image.rb +32 -2
  23. data/lib/rabbit/element/index-slide.rb +29 -13
  24. data/lib/rabbit/element/item-list.rb +18 -2
  25. data/lib/rabbit/element/method-list.rb +18 -2
  26. data/lib/rabbit/element/poppler-page.rb +17 -1
  27. data/lib/rabbit/element/poppler-slide.rb +18 -2
  28. data/lib/rabbit/element/poppler-title-slide.rb +18 -2
  29. data/lib/rabbit/element/preformatted.rb +18 -2
  30. data/lib/rabbit/element/slide-element.rb +29 -2
  31. data/lib/rabbit/element/slide.rb +18 -2
  32. data/lib/rabbit/element/syntax-highlighting.rb +17 -1
  33. data/lib/rabbit/element/table.rb +19 -3
  34. data/lib/rabbit/element/tag.rb +18 -2
  35. data/lib/rabbit/element/text-block-element.rb +18 -2
  36. data/lib/rabbit/element/text-container-element.rb +41 -2
  37. data/lib/rabbit/element/text-element.rb +17 -1
  38. data/lib/rabbit/element/text-renderer.rb +17 -1
  39. data/lib/rabbit/element/text.rb +4 -4
  40. data/lib/rabbit/element/title-slide.rb +19 -3
  41. data/lib/rabbit/element/video.rb +157 -56
  42. data/lib/rabbit/element.rb +20 -20
  43. data/lib/rabbit/formatter.rb +18 -1
  44. data/lib/rabbit/frame.rb +102 -90
  45. data/lib/rabbit/front.rb +11 -4
  46. data/lib/rabbit/gem-finder.rb +4 -8
  47. data/lib/rabbit/gem-pusher.rb +4 -4
  48. data/lib/rabbit/gesture/handler.rb +26 -21
  49. data/lib/rabbit/graffiti/config-dialog.rb +18 -2
  50. data/lib/rabbit/graffiti/processor.rb +20 -4
  51. data/lib/rabbit/gtk.rb +48 -14
  52. data/lib/rabbit/html/generator.rb +18 -18
  53. data/{test/helper/fixture.rb → lib/rabbit/icon.rb} +16 -6
  54. data/lib/rabbit/image/base.rb +7 -6
  55. data/lib/rabbit/image/default.rb +17 -1
  56. data/lib/rabbit/image/dia.rb +2 -2
  57. data/lib/rabbit/image/eps.rb +16 -2
  58. data/lib/rabbit/image/gimp.rb +28 -11
  59. data/lib/rabbit/image/mermaid.rb +3 -3
  60. data/lib/rabbit/image/pdf.rb +3 -3
  61. data/lib/rabbit/image/svg.rb +2 -2
  62. data/lib/rabbit/image.rb +8 -8
  63. data/lib/rabbit/info-window.rb +55 -18
  64. data/lib/rabbit/key-handler.rb +381 -0
  65. data/lib/rabbit/keys.rb +31 -2
  66. data/lib/rabbit/logger/base.rb +17 -1
  67. data/lib/rabbit/logger/gui.rb +20 -4
  68. data/lib/rabbit/logger/stderr.rb +16 -2
  69. data/lib/rabbit/logger.rb +4 -4
  70. data/lib/rabbit/menu.rb +200 -220
  71. data/lib/rabbit/parser/base.rb +17 -1
  72. data/lib/rabbit/parser/ext/aafigure.rb +17 -1
  73. data/lib/rabbit/parser/ext/blockdiag.rb +17 -1
  74. data/lib/rabbit/parser/ext/charty.rb +2 -2
  75. data/lib/rabbit/parser/ext/coderay.rb +20 -4
  76. data/lib/rabbit/parser/ext/enscript.rb +31 -15
  77. data/lib/rabbit/parser/ext/entity.rb +17 -1
  78. data/lib/rabbit/parser/ext/image.rb +6 -6
  79. data/lib/rabbit/parser/ext/inline.rb +17 -1
  80. data/lib/rabbit/parser/ext/rouge.rb +7 -4
  81. data/lib/rabbit/parser/ext/tex.rb +18 -2
  82. data/lib/rabbit/parser/ext/video.rb +4 -4
  83. data/lib/rabbit/parser/image.rb +20 -4
  84. data/lib/rabbit/parser/markdown/converter.rb +12 -13
  85. data/lib/rabbit/parser/markdown.rb +18 -2
  86. data/lib/rabbit/parser/pause-support.rb +1 -0
  87. data/lib/rabbit/parser/pdf.rb +3 -3
  88. data/lib/rabbit/parser/rd/ext/base.rb +20 -4
  89. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +24 -28
  90. data/lib/rabbit/parser/rd/ext/character-reference.rb +18 -2
  91. data/lib/rabbit/parser/rd/ext/image.rb +3 -3
  92. data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +6 -6
  93. data/lib/rabbit/parser/rd/ext/refer.rb +18 -2
  94. data/lib/rabbit/parser/rd/ext/video.rb +19 -2
  95. data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +24 -8
  96. data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +18 -2
  97. data/lib/rabbit/parser/rd/visitor.rb +18 -2
  98. data/lib/rabbit/parser/rd.rb +18 -2
  99. data/lib/rabbit/parser/wiki/output.rb +25 -28
  100. data/lib/rabbit/parser/wiki.rb +18 -2
  101. data/lib/rabbit/parser.rb +6 -6
  102. data/lib/rabbit/path-manipulatable.rb +4 -4
  103. data/lib/rabbit/progress.rb +17 -1
  104. data/lib/rabbit/properties.rb +3 -3
  105. data/lib/rabbit/rabbit.rb +15 -7
  106. data/lib/rabbit/readme-parser.rb +4 -6
  107. data/lib/rabbit/renderer/base.rb +44 -36
  108. data/lib/rabbit/renderer/color.rb +18 -2
  109. data/lib/rabbit/renderer/display/base.rb +10 -12
  110. data/lib/rabbit/renderer/display/button-handler.rb +141 -60
  111. data/lib/rabbit/renderer/display/cursor.rb +4 -5
  112. data/lib/rabbit/renderer/display/drawing-area-base.rb +32 -48
  113. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +10 -61
  114. data/lib/rabbit/renderer/display/drawing-area-view-only.rb +19 -8
  115. data/lib/rabbit/renderer/display/drawing-area.rb +19 -15
  116. data/lib/rabbit/renderer/display/gesture.rb +9 -9
  117. data/lib/rabbit/renderer/display/graffiti.rb +22 -13
  118. data/lib/rabbit/renderer/display/info.rb +22 -2
  119. data/lib/rabbit/renderer/display/magnifier.rb +30 -17
  120. data/lib/rabbit/renderer/display/mask.rb +17 -1
  121. data/lib/rabbit/renderer/display/menu.rb +27 -3
  122. data/lib/rabbit/renderer/display/motion-handler.rb +45 -0
  123. data/lib/rabbit/renderer/display/progress.rb +17 -2
  124. data/lib/rabbit/renderer/display/scroll-handler.rb +60 -13
  125. data/lib/rabbit/renderer/display/search.rb +19 -2
  126. data/lib/rabbit/renderer/display/spotlight.rb +39 -25
  127. data/lib/rabbit/renderer/display.rb +16 -36
  128. data/lib/rabbit/renderer/engine/cairo.rb +4 -11
  129. data/lib/rabbit/renderer/engine.rb +17 -1
  130. data/lib/rabbit/renderer/kernel.rb +2 -20
  131. data/lib/rabbit/renderer/offscreen.rb +8 -14
  132. data/lib/rabbit/renderer/print-layout.rb +2 -2
  133. data/lib/rabbit/renderer/printer.rb +9 -16
  134. data/lib/rabbit/renderer/scene-background-widget.rb +95 -0
  135. data/lib/rabbit/renderer/scene-node-widget.rb +63 -0
  136. data/lib/rabbit/renderer/scene.rb +508 -0
  137. data/lib/rabbit/renderer.rb +6 -6
  138. data/lib/rabbit/search-window.rb +18 -2
  139. data/lib/rabbit/searcher.rb +15 -1
  140. data/lib/rabbit/size.rb +9 -1
  141. data/lib/rabbit/slide-configuration.rb +11 -14
  142. data/lib/rabbit/soap/driver.rb +20 -4
  143. data/lib/rabbit/soap/server.rb +17 -1
  144. data/lib/rabbit/source/argf.rb +5 -5
  145. data/lib/rabbit/source/base.rb +5 -6
  146. data/lib/rabbit/source/file.rb +5 -5
  147. data/lib/rabbit/source/memory.rb +20 -4
  148. data/lib/rabbit/source/uri.rb +9 -11
  149. data/lib/rabbit/source-generator/hiki.rb +2 -7
  150. data/lib/rabbit/source-generator/markdown.rb +2 -7
  151. data/lib/rabbit/source-generator/rd.rb +2 -7
  152. data/lib/rabbit/source-generator.rb +4 -4
  153. data/lib/rabbit/source.rb +5 -5
  154. data/lib/rabbit/task/slide.rb +13 -11
  155. data/lib/rabbit/task/theme.rb +8 -11
  156. data/lib/rabbit/task.rb +3 -3
  157. data/lib/rabbit/theme/applier.rb +27 -11
  158. data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
  159. data/lib/rabbit/theme/color-circle/color-circle.rb +18 -1
  160. data/lib/rabbit/theme/cozmixng/cozmixng.rb +1 -1
  161. data/lib/rabbit/theme/default/default.rb +1 -0
  162. data/lib/rabbit/theme/default-icon/default-icon.rb +1 -1
  163. data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +17 -1
  164. data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +9 -1
  165. data/lib/rabbit/theme/enishi-green/enishi-green.rb +1 -1
  166. data/lib/rabbit/theme/entry.rb +10 -12
  167. data/lib/rabbit/theme/icon/icon.rb +3 -8
  168. data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +5 -5
  169. data/lib/rabbit/theme/image-timer/image-timer.rb +3 -3
  170. data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +1 -0
  171. data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +1 -0
  172. data/lib/rabbit/theme/manager.rb +19 -9
  173. data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +1 -1
  174. data/lib/rabbit/theme/ranguba/ranguba.rb +1 -1
  175. data/lib/rabbit/theme/red-frame/red-frame.rb +6 -2
  176. data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +1 -0
  177. data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +1 -1
  178. data/lib/rabbit/theme/searcher.rb +23 -7
  179. data/lib/rabbit/theme/slide-number/slide-number.rb +1 -1
  180. data/lib/rabbit/theme/slide-show/slide-show.rb +1 -1
  181. data/lib/rabbit/theme/table/table.rb +2 -2
  182. data/lib/rabbit/theme/video/property.rb +3 -0
  183. data/lib/rabbit/theme/video/video.rb +5 -0
  184. data/lib/rabbit/theme-configuration.rb +9 -11
  185. data/lib/rabbit/utils.rb +12 -94
  186. data/lib/rabbit/version.rb +1 -1
  187. data/lib/rabbit/xmlrpc/client.rb +17 -1
  188. data/lib/rabbit/xmlrpc/server.rb +17 -1
  189. data/po/en/rabbit.edit.po +324 -316
  190. data/po/en/rabbit.po +61 -55
  191. data/po/fr/rabbit.edit.po +324 -316
  192. data/po/fr/rabbit.po +61 -55
  193. data/po/ja/rabbit.edit.po +345 -370
  194. data/po/ja/rabbit.po +83 -80
  195. data/rabbit.gemspec +4 -2
  196. data/sample/block-quote.rab +13 -0
  197. data/sample/description-list.rab +17 -0
  198. data/sample/mermaid.rab +16 -0
  199. data/sample/rabbit-en.hiki +0 -1
  200. data/sample/rabbit-en.md +0 -1
  201. data/sample/rabbit-en.rd +0 -1
  202. data/sample/rabbit.hiki +0 -1
  203. data/sample/rabbit.md +0 -1
  204. data/sample/rabbit.rd +0 -1
  205. data/sample/video.rab +17 -0
  206. metadata +33 -65
  207. data/lib/rabbit/action/basic.rb +0 -304
  208. data/lib/rabbit/action/radio.rb +0 -78
  209. data/lib/rabbit/action/toggle.rb +0 -82
  210. data/lib/rabbit/action.rb +0 -140
  211. data/lib/rabbit/renderer/display/gl.rb +0 -98
  212. data/lib/rabbit/renderer/display/key-handler.rb +0 -321
  213. data/lib/rabbit/renderer/gl.rb +0 -95
  214. data/lib/rabbit/renderer/screen.rb +0 -286
  215. data/lib/rabbit/renderer/widget/drawing-area.rb +0 -93
  216. data/lib/rabbit/stock.rb +0 -31
  217. data/lib/rabbit/trackball.rb +0 -228
  218. data/lib/rabbit/video-window.rb +0 -123
  219. data/test/command/test-rabbit.rb +0 -101
  220. data/test/helper/parser.rb +0 -48
  221. data/test/helper.rb +0 -24
  222. data/test/image/test-dia.rb +0 -54
  223. data/test/image/test-eps.rb +0 -41
  224. data/test/parser/test-markdown.rb +0 -360
  225. data/test/parser/test-rd.rb +0 -43
  226. data/test/parser/test-wiki.rb +0 -71
  227. data/test/run-test.rb +0 -27
  228. data/test/source-generator/test-hiki.rb +0 -68
  229. data/test/source-generator/test-markdown.rb +0 -67
  230. data/test/source-generator/test-rd.rb +0 -69
  231. data/test/test-applier.rb +0 -73
  232. data/test/test-author-configuration.rb +0 -37
  233. data/test/test-canvas.rb +0 -70
  234. data/test/test-color.rb +0 -51
  235. data/test/test-element.rb +0 -103
  236. data/test/test-readme-parser.rb +0 -160
  237. data/test/test-size.rb +0 -155
  238. data/test/test-slide-configuration.rb +0 -74
  239. data/test/test-source.rb +0 -122
  240. data/test/test-theme-configuration.rb +0 -47
  241. data/test/test-utils.rb +0 -64
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2005-2017 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
@@ -24,10 +24,9 @@ require "ostruct"
24
24
  require "uri"
25
25
  require "pathname"
26
26
 
27
- require "rabbit/rabbit"
28
- require "rabbit/logger"
27
+ require_relative "rabbit"
29
28
 
30
- require "rabbit/console/roff"
29
+ require_relative "console/roff"
31
30
 
32
31
  Thread.abort_on_exception = true
33
32
 
@@ -38,8 +37,8 @@ module Rabbit
38
37
  @@locale_dir_option_name = "--locale-dir"
39
38
 
40
39
  class << self
41
- def parse!(args, logger=nil, &block)
42
- new(logger).parse!(args, &block)
40
+ def parse!(args, &block)
41
+ new.parse!(args, &block)
43
42
  end
44
43
 
45
44
  def get_last_name(klass)
@@ -47,14 +46,12 @@ module Rabbit
47
46
  end
48
47
  end
49
48
 
50
- def initialize(logger=nil)
51
- @logger = logger || Logger.default
49
+ def initialize
50
+ @have_custom_logger = false
52
51
  end
53
52
 
54
53
  def parse!(args)
55
54
  options = OpenStruct.new
56
- options.logger = @logger
57
- options.default_logger = @logger
58
55
  options.druby_uri = "druby://127.0.0.1:10101"
59
56
  options.version = VERSION
60
57
  options.options_file = nil
@@ -82,14 +79,14 @@ module Rabbit
82
79
  hook.call(self, parser, options)
83
80
  end
84
81
  rescue => error
85
- @logger.error("#{error.class}: #{error.message}")
82
+ Rabbit.logger.error("#{error.class}: #{error.message}")
86
83
  error.backtrace.each do |line|
87
- @logger.error(line)
84
+ Rabbit.logger.error(line)
88
85
  end
89
86
  raise
90
87
  end
91
88
 
92
- [options, options.logger]
89
+ options
93
90
  end
94
91
 
95
92
  def read_options_file(parser, options, options_file)
@@ -165,28 +162,30 @@ module Rabbit
165
162
  get_last_name(x).downcase
166
163
  end
167
164
 
165
+ default_logger_class = ::Rabbit.logger.class
168
166
  parser.on("--logger-type=TYPE",
169
167
  logger_type_names,
170
168
  _("Specify logger type as [TYPE]."),
171
169
  _("Select from [%s].") % logger_type_names.join(', '),
172
- "(#{get_last_name(options.logger.class)})") do |logger_type|
170
+ "(#{get_last_name(default_logger_class)})") do |logger_type|
173
171
  logger_class = Rabbit::Logger.types.find do |t|
174
172
  get_last_name(t).downcase == logger_type.downcase
175
173
  end
176
174
  if logger_class.nil?
177
- options.logger = options.default_logger
178
- # logger.error("Unknown logger type: #{t}")
175
+ ::Rabbit.logger.error("Unknown logger type: #{t}")
179
176
  else
180
- options.logger = logger_class.new
177
+ ::Rabbit.logger = logger_class.new
178
+ @have_custom_logger = true
181
179
  end
182
180
  end
183
181
 
184
182
  level_names = Logger::Severity.names
183
+ default_logger_level = ::Rabbit.logger.level
185
184
  parser.on("--log-level=LEVEL",
186
185
  level_names,
187
186
  _("Specify log level as [LEVEL]."),
188
187
  _("Select from [%s].") % level_names.join(', '),
189
- "(#{Logger::Severity.name(options.logger.level)})") do |name|
188
+ "(#{Logger::Severity.name(default_logger_level)})") do |name|
190
189
  options.logger.level = Logger::Severity.level(name)
191
190
  end
192
191
 
@@ -204,11 +203,10 @@ module Rabbit
204
203
  end
205
204
 
206
205
  def output_info_and_exit(options, message)
207
- if options.logger.is_a?(Logger::STDERR) and
208
- options.default_logger == options.logger
209
- print(message)
206
+ if !@have_custom_logger and ::Rabbit.logger.is_a?(Logger::STDERR)
207
+ ::Rabbit.logger.info(message)
210
208
  else
211
- options.logger.info(message)
209
+ puts(message)
212
210
  end
213
211
  exit
214
212
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006-2019 Sutou Kouhei <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,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/canvas"
17
+ require_relative "canvas"
18
18
 
19
19
  module Rabbit
20
20
  class DependencyCanvas < Canvas
@@ -1,7 +1,23 @@
1
- require 'rabbit/utils'
2
- require 'rabbit/formatter'
3
-
4
- require 'rabbit/element/base/draw-hook'
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 "../formatter"
18
+ require_relative "../renderer/scene-node-widget"
19
+ require_relative "../utils"
20
+ require_relative "base/draw-hook"
5
21
 
6
22
  module Rabbit
7
23
  module Element
@@ -57,6 +73,15 @@ module Rabbit
57
73
  @visible
58
74
  end
59
75
 
76
+ def scene_visible?
77
+ if @parent
78
+ return false unless @parent.scene_visible?
79
+ end
80
+ return true if @visible
81
+ return true if slide&.visible_waited_target?(self)
82
+ false
83
+ end
84
+
60
85
  def slide
61
86
  @slide ||= _slide
62
87
  end
@@ -66,7 +91,7 @@ module Rabbit
66
91
  x, y, w, h = _draw(@canvas, x, y, w, h, simulation)
67
92
  x, w = restore_x_padding(x, w)
68
93
  x, w = restore_x_margin(x, w)
69
- x, w = adjust_x_centering(x, w)
94
+ x, w = restore_x_centering(x, w)
70
95
  y, h = adjust_y_padding(y, h)
71
96
  y, h = adjust_y_margin(y, h)
72
97
  [x, y, w, h]
@@ -118,6 +143,62 @@ module Rabbit
118
143
  end
119
144
  end
120
145
 
146
+ def setup_scene(canvas, scene_widget, x, y, w, h)
147
+ compile(canvas, x, y, w, h)
148
+
149
+ x, y, w, h = setup_margin(x, y, w, h)
150
+ x, w = setup_x_centering(x, w)
151
+ x, y, w, h = setup_padding(x, y, w, h)
152
+
153
+ @pre_draw_procs.each do |proc, _name|
154
+ x, y, w, h = proc.call(canvas, x, y, w, h, true)
155
+ end
156
+
157
+ x, y, w, h = setup_scene_element(canvas, scene_widget, x, y, w, h)
158
+
159
+ @post_draw_procs.each do |proc, _name|
160
+ x, y, w, h = proc.call(canvas, x, y, w, h, true)
161
+ end
162
+
163
+ x, w = restore_x_padding(x, w)
164
+ x, w = restore_x_margin(x, w)
165
+ x, w = restore_x_centering(x, w)
166
+ y, h = adjust_y_padding(y, h)
167
+ y, h = adjust_y_margin(y, h)
168
+
169
+ [x, y, w, h]
170
+ end
171
+
172
+ def setup_scene_element(canvas, scene_widget, x, y, w, h)
173
+ widget = Renderer::SceneNodeWidget.new(canvas, self, x, y, w, h)
174
+ scene_widget.put(widget, x, y, w, h)
175
+ [x, y, w, h]
176
+ end
177
+
178
+ def scene_snapshot(widget, snapshot, canvas, width, height)
179
+ return unless scene_visible?
180
+
181
+ x, y, w, h = widget.x, widget.y, width, height
182
+ # Dirty... We need to reconsider when we compute horizontal
183
+ # centering after we remove DrawingArea based rendering
184
+ # engine.
185
+ original_x = @x
186
+ @x = widget.x - @padding_left
187
+ # pre_draw_proc may be deleted while calling. For example, the
188
+ # image-timer theme's init proc is deleted when it's called.
189
+ @pre_draw_procs.dup.each do |proc, _name|
190
+ x, y, w, h = proc.call(canvas, x, y, w, h, false)
191
+ end
192
+ # DrawingArea based renderer set padding after pre_draw_procs.
193
+ x, y, w, h = setup_padding(x, y, w, h)
194
+ x, y, w, h = scene_snapshot_element(widget, snapshot, canvas, x, y, w, h)
195
+ # post_draw_proc may be deleted while calling.
196
+ @post_draw_procs.dup.each do |proc, _name|
197
+ x, y, w, h = proc.call(canvas, x, y, w, h, false)
198
+ end
199
+ @x = original_x
200
+ end
201
+
121
202
  def prop_set(name, *values)
122
203
  name = normalize_property_name(name)
123
204
  @prop[name] = make_prop_value(name, *values)
@@ -214,7 +295,13 @@ module Rabbit
214
295
  [x, w]
215
296
  end
216
297
 
217
- def adjust_x_centering(x, w)
298
+ def setup_x_centering(x, w)
299
+ x += centering_adjusted_width
300
+ w -= centering_adjusted_width
301
+ [x, w]
302
+ end
303
+
304
+ def restore_x_centering(x, w)
218
305
  x -= centering_adjusted_width
219
306
  w += centering_adjusted_width
220
307
  [x, w]
@@ -1,4 +1,20 @@
1
- require 'rabbit/element/base'
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 "base"
2
18
 
3
19
  module Rabbit
4
20
  module Element
@@ -1,4 +1,20 @@
1
- require 'rabbit/element/text-block-element'
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 "text-block-element"
2
18
 
3
19
  module Rabbit
4
20
  module Element
@@ -1,5 +1,22 @@
1
- require 'forwardable'
2
- require 'rabbit/element/block-element'
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 "forwardable"
18
+
19
+ require_relative "block-element"
3
20
 
4
21
  module Rabbit
5
22
  module Element
@@ -112,7 +129,7 @@ module Rabbit
112
129
  x, y, w, h = setup_padding(@x, @y, @w, @h)
113
130
  compile_elements(canvas, x, y, w, h)
114
131
  x, w = restore_x_padding(x, w)
115
- x, w = adjust_x_centering(x, w)
132
+ x, w = restore_x_centering(x, w)
116
133
  y, h = adjust_y_padding(y, h)
117
134
  end
118
135
  end
@@ -140,6 +157,45 @@ module Rabbit
140
157
  end
141
158
  end
142
159
 
160
+ def setup_scene_element(canvas, scene_widget, x, y, w, h)
161
+ x, y, w, h = super
162
+
163
+ @centering_adjusted_height = 0
164
+ if do_vertical_centering?
165
+ adjust_height = ((h - height - @padding_bottom) / 2.0).ceil
166
+ if y + adjust_height > 0
167
+ y += adjust_height
168
+ h -= adjust_height
169
+ else
170
+ adjust_height = 0
171
+ end
172
+ @centering_adjusted_height = adjust_height
173
+ compile_elements(canvas, x, y, w, h)
174
+ end
175
+
176
+ base_x, base_w = x, w
177
+ @elements.each do |element|
178
+ x, y, w, h = element.setup_scene(canvas, scene_widget, x, y, w, h)
179
+ end
180
+ # For table
181
+ last_element = @elements.last
182
+ if last_element and last_element.inline_element?
183
+ container_height = height
184
+ y += container_height
185
+ h -= container_height
186
+ end
187
+ x = base_x
188
+ w = base_w
189
+
190
+ [x, y, w, h]
191
+ end
192
+
193
+ def scene_snapshot_element(widget, snapshot, canvas, x, y, w, h)
194
+ # TODO: height may be wrong here. We need to check
195
+ # post_draw_hook usage.
196
+ [x, y + height, w, h - height]
197
+ end
198
+
143
199
  def to_html(generator)
144
200
  collect do |element|
145
201
  element.to_html(generator)
@@ -1,5 +1,21 @@
1
- require 'rabbit/element/container-element'
2
- require 'rabbit/element/text-block-element'
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 "container-element"
18
+ require_relative "text-block-element"
3
19
 
4
20
  module Rabbit
5
21
  module Element
@@ -1,5 +1,21 @@
1
- require 'rabbit/element/container-element'
2
- require 'rabbit/element/block-element'
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 "container-element"
18
+ require_relative "block-element"
3
19
 
4
20
  module Rabbit
5
21
  module Element
@@ -1,5 +1,21 @@
1
- require 'rabbit/element/text-element'
2
- require 'rabbit/element/text-container-element'
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 "text-element"
18
+ require_relative "text-container-element"
3
19
 
4
20
  module Rabbit
5
21
  module Element
@@ -1,4 +1,20 @@
1
- require 'rabbit/element/title-slide'
1
+ # Copyright (C) 2007-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 "title-slide"
2
18
 
3
19
  module Rabbit
4
20
  module Element
@@ -14,8 +14,8 @@
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"
18
- require "rabbit/element/block-element"
17
+ require_relative "../image"
18
+ require_relative "block-element"
19
19
 
20
20
  module Rabbit
21
21
  module Element
@@ -133,6 +133,36 @@ module Rabbit
133
133
  properties.get_boolean("as_large_as_possible")
134
134
  end
135
135
 
136
+ def setup_scene_element(canvas, scene_widget, x, y, w, h)
137
+ x, y, w, h = super
138
+ case @loader
139
+ when ImageManipulable::PDF, ImageManipulable::Mermaid
140
+ # Render by ourselves
141
+ else
142
+ if @loader.animation and not @loader.animation.static_image?
143
+ texture = Gdk::PixbufAnimationPaintable.new(@loader.animation)
144
+ else
145
+ texture = Gdk::Texture.new(@loader.pixbuf)
146
+ end
147
+ picture_widget = Gtk::Picture.new(texture)
148
+ scene_widget.put(picture_widget, x, y, @loader.width, @loader.height)
149
+ y += @loader.height
150
+ h -= @loader.height
151
+ end
152
+
153
+ [x, y, w, h]
154
+ end
155
+
156
+ def scene_snapshot_element(widget, snapshot, canvas, x, y, w, h)
157
+ case @loader
158
+ when ImageManipulable::PDF, ImageManipulable::Mermaid
159
+ image_draw(canvas, x, y, @draw_parameters)
160
+ end
161
+ y += @loader.height
162
+ h -= @loader.height
163
+ [x, y, w, h]
164
+ end
165
+
136
166
  private
137
167
  def setup_draw_parameters
138
168
  @draw_parameters = {}
@@ -1,7 +1,23 @@
1
- require 'rabbit/canvas'
2
- require 'rabbit/renderer/offscreen'
3
- require 'rabbit/element/container-element'
4
- require 'rabbit/element/slide-element'
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 "../canvas"
18
+ require_relative "../renderer/offscreen"
19
+ require_relative "container-element"
20
+ require_relative "slide-element"
5
21
 
6
22
  module Rabbit
7
23
  module Element
@@ -21,15 +37,15 @@ module Rabbit
21
37
  end
22
38
 
23
39
  thumbnails = []
24
- number_of_slide = maker.slide_size - 1
25
- canvas.renderer.pre_to_pixbuf(number_of_slide)
40
+ n_slides = maker.n_slides - 1
41
+ canvas.renderer.pre_to_pixbuf(n_slides)
26
42
  canceled = false
27
43
  maker.each_slide_pixbuf do |slide, pixbuf, slide_number|
28
44
  if canvas.renderer.to_pixbufing(slide_number)
29
45
  thumbnails << IndexThumbnail.new(pixbuf,
30
46
  maker.slide_title(slide_number),
31
47
  slide_number,
32
- number_of_slide)
48
+ n_slides)
33
49
  else
34
50
  canceled = true
35
51
  end
@@ -87,7 +103,7 @@ module Rabbit
87
103
 
88
104
  private
89
105
  def make_thumbnail_maker(canvas, width, height)
90
- new_canvas = Canvas.new(canvas.logger, Renderer::Offscreen)
106
+ new_canvas = Canvas.new(Renderer::Offscreen)
91
107
  new_canvas.width = width
92
108
  new_canvas.height = height
93
109
  new_canvas.pango_context = canvas.create_pango_context
@@ -126,12 +142,12 @@ module Rabbit
126
142
  class IndexThumbnail
127
143
  include Base
128
144
 
129
- attr_reader :pixbuf, :title, :number, :number_of_slides
130
- def initialize(pixbuf, title, number, number_of_slides)
145
+ attr_reader :pixbuf, :title, :number, :n_slides
146
+ def initialize(pixbuf, title, number, n_slides)
131
147
  @pixbuf = pixbuf
132
148
  @title = title
133
149
  @number = number
134
- @number_of_slides = number_of_slides
150
+ @n_slides = n_slides
135
151
  @layout = nil
136
152
  super()
137
153
  end
@@ -150,7 +166,7 @@ module Rabbit
150
166
  if @layout.nil?
151
167
  margin_bottom = parent.margin_bottom
152
168
  text_size = (margin_bottom * Pango::SCALE).ceil
153
- text = "#{@number}/#{@number_of_slides}"
169
+ text = "#{@number}/#{@n_slides}"
154
170
  text = %Q[<span size="#{text_size}">#{text}</span>]
155
171
  @layout, _, _ = canvas.make_layout(text)
156
172
  @layout.set_width(width * Pango::SCALE)
@@ -172,7 +188,7 @@ module Rabbit
172
188
  end
173
189
 
174
190
  def to_html(generator)
175
- number_of_places = generator.number_of_places(@number_of_slides)
191
+ number_of_places = generator.number_of_places(@n_slides)
176
192
  format = "thumbnail%0#{number_of_places}d"
177
193
  src = generator.save_pixbuf(@pixbuf, format % @number)
178
194
  title = generator.slide_image_title(@number)
@@ -1,5 +1,21 @@
1
- require 'rabbit/element/container-element'
2
- require 'rabbit/element/block-element'
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 "container-element"
18
+ require_relative "block-element"
3
19
 
4
20
  module Rabbit
5
21
  module Element
@@ -1,5 +1,21 @@
1
- require 'rabbit/element/container-element'
2
- require 'rabbit/element/text-block-element'
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 "container-element"
18
+ require_relative "text-block-element"
3
19
 
4
20
  module Rabbit
5
21
  module Element