rabbit 2.2.1 → 3.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.
- checksums.yaml +5 -5
- data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/_layouts/en.html +1 -1
- data/doc/_layouts/ja.html +1 -1
- data/doc/en/news.rd +140 -0
- data/doc/en/sample/hiki/rabbit.hiki +2 -2
- data/doc/en/sample/markdown/rabbit.md +1 -1
- data/doc/en/sample/rd/rabbit.rd +1 -1
- data/doc/en/usage/rabbit-slide.rd +3 -3
- data/doc/images/screenshots/en/blue-circle-raw.png +0 -0
- data/doc/images/screenshots/en/blue-circle.png +0 -0
- data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
- data/doc/images/screenshots/en/clear-blue.png +0 -0
- data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
- data/doc/images/screenshots/en/cozmixng.png +0 -0
- data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
- data/doc/images/screenshots/en/dark-gradation.png +0 -0
- data/doc/images/screenshots/en/day-white-raw.png +0 -0
- data/doc/images/screenshots/en/day-white.png +0 -0
- data/doc/images/screenshots/en/debian-raw.png +0 -0
- data/doc/images/screenshots/en/debian.png +0 -0
- data/doc/images/screenshots/en/green-circle-raw.png +0 -0
- data/doc/images/screenshots/en/green-circle.png +0 -0
- data/doc/images/screenshots/en/night-black-raw.png +0 -0
- data/doc/images/screenshots/en/night-black.png +0 -0
- data/doc/images/screenshots/en/rabbit-raw.png +0 -0
- data/doc/images/screenshots/en/rabbit.png +0 -0
- data/doc/images/screenshots/en/ranguba-raw.png +0 -0
- data/doc/images/screenshots/en/ranguba.png +0 -0
- data/doc/images/screenshots/en/red-frame-raw.png +0 -0
- data/doc/images/screenshots/en/red-frame.png +0 -0
- data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
- data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
- data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
- data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
- data/doc/images/screenshots/ja/blue-circle-raw.png +0 -0
- data/doc/images/screenshots/ja/blue-circle.png +0 -0
- data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
- data/doc/images/screenshots/ja/clear-blue.png +0 -0
- data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
- data/doc/images/screenshots/ja/cozmixng.png +0 -0
- data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
- data/doc/images/screenshots/ja/dark-gradation.png +0 -0
- data/doc/images/screenshots/ja/day-white-raw.png +0 -0
- data/doc/images/screenshots/ja/day-white.png +0 -0
- data/doc/images/screenshots/ja/debian-raw.png +0 -0
- data/doc/images/screenshots/ja/debian.png +0 -0
- data/doc/images/screenshots/ja/green-circle-raw.png +0 -0
- data/doc/images/screenshots/ja/green-circle.png +0 -0
- data/doc/images/screenshots/ja/night-black-raw.png +0 -0
- data/doc/images/screenshots/ja/night-black.png +0 -0
- data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
- data/doc/images/screenshots/ja/rabbit.png +0 -0
- data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
- data/doc/images/screenshots/ja/ranguba.png +0 -0
- data/doc/images/screenshots/ja/red-frame-raw.png +0 -0
- data/doc/images/screenshots/ja/red-frame.png +0 -0
- data/doc/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
- data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
- data/doc/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
- data/doc/images/screenshots/ja/rubykaigi2011.png +0 -0
- data/doc/ja/how-to-make/index.rd +1 -1
- data/doc/ja/news.rd +143 -0
- data/doc/ja/sample/hiki/rabbit.hiki +2 -2
- data/doc/ja/sample/markdown/rabbit.md +1 -1
- data/doc/ja/sample/rd/rabbit.rd +1 -1
- data/doc/ja/slides.rd +1 -1
- data/doc/ja/usage/rabbit-slide.rd +3 -3
- data/doc/ja/users.rd +1 -1
- data/lib/rabbit/action.rb +23 -4
- data/lib/rabbit/canvas.rb +70 -14
- data/lib/rabbit/command/rabbit-slide.rb +252 -67
- data/lib/rabbit/command/rabbit-slide.ui +180 -0
- data/lib/rabbit/command/rabbit.rb +14 -20
- data/lib/rabbit/console.rb +9 -3
- data/lib/rabbit/dependency-canvas.rb +19 -1
- data/lib/rabbit/element.rb +34 -7
- data/lib/rabbit/element/poppler-page.rb +1 -2
- data/lib/rabbit/element/text-container-element.rb +2 -2
- data/lib/rabbit/element/text-renderer.rb +5 -4
- data/lib/rabbit/element/title-slide.rb +8 -0
- data/lib/rabbit/element/video.rb +1 -2
- data/lib/rabbit/filename.rb +39 -0
- data/lib/rabbit/formatter.rb +61 -30
- data/lib/rabbit/frame.rb +1 -19
- data/lib/rabbit/front.rb +23 -2
- data/lib/rabbit/gesture/handler.rb +21 -2
- data/lib/rabbit/graffiti/config-dialog.rb +15 -18
- data/lib/rabbit/gtk.rb +2 -191
- data/lib/rabbit/html/generator.rb +38 -30
- data/lib/rabbit/image-data-loader.rb +6 -1
- data/lib/rabbit/image.rb +22 -4
- data/lib/rabbit/image/base.rb +34 -2
- data/lib/rabbit/image/default.rb +1 -1
- data/lib/rabbit/image/eps.rb +1 -1
- data/lib/rabbit/image/gimp.rb +1 -1
- data/lib/rabbit/info-window.rb +27 -15
- data/lib/rabbit/logger/gui.rb +21 -23
- data/lib/rabbit/logger/stderr.rb +1 -1
- data/lib/rabbit/pango-markup.rb +44 -0
- data/lib/rabbit/parser.rb +20 -3
- data/lib/rabbit/parser/ext/image.rb +25 -8
- data/lib/rabbit/parser/ext/video.rb +21 -2
- data/lib/rabbit/parser/markdown.rb +1 -2
- data/lib/rabbit/parser/pdf.rb +23 -7
- data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +20 -0
- data/lib/rabbit/progress.rb +34 -23
- data/lib/rabbit/renderer.rb +17 -23
- data/lib/rabbit/renderer/base.rb +31 -57
- data/lib/rabbit/renderer/color.rb +46 -53
- data/lib/rabbit/renderer/display/base.rb +71 -62
- data/lib/rabbit/renderer/display/button-handler.rb +2 -1
- data/lib/rabbit/renderer/display/clutter-embed.rb +60 -26
- data/lib/rabbit/renderer/display/drawing-area-base.rb +1 -1
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +34 -21
- data/lib/rabbit/renderer/display/graffiti.rb +1 -3
- data/lib/rabbit/renderer/display/hook-handler.rb +8 -4
- data/lib/rabbit/renderer/display/key-handler.rb +7 -2
- data/lib/rabbit/renderer/display/magnifier.rb +2 -2
- data/lib/rabbit/renderer/display/progress.rb +10 -2
- data/lib/rabbit/renderer/display/spotlight.rb +2 -2
- data/lib/rabbit/renderer/engine/cairo.rb +0 -3
- data/lib/rabbit/renderer/kernel.rb +54 -0
- data/lib/rabbit/renderer/offscreen.rb +14 -6
- data/lib/rabbit/renderer/print-layout.rb +150 -0
- data/lib/rabbit/renderer/printer.rb +236 -0
- data/lib/rabbit/renderer/screen.rb +288 -0
- data/lib/rabbit/renderer/widget/drawing-area.rb +93 -0
- data/lib/rabbit/size.rb +52 -25
- data/lib/rabbit/slide-configuration.rb +56 -12
- data/lib/rabbit/source.rb +24 -8
- data/lib/rabbit/task/slide.rb +1 -1
- data/lib/rabbit/theme/applier.rb +26 -9
- data/lib/rabbit/theme/base/base.rb +7 -7
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
- data/lib/rabbit/theme/image-timer/image-timer.rb +3 -1
- data/lib/rabbit/theme/image-viewer/image-viewer.rb +13 -1
- data/lib/rabbit/theme/image/image.rb +4 -4
- data/lib/rabbit/theme/lightning-talk-toolkit/lightning-talk-toolkit.rb +3 -1
- data/lib/rabbit/theme/tag/tag.rb +12 -4
- data/lib/rabbit/version.rb +2 -2
- data/lib/rabbit/video-window.rb +75 -89
- data/misc/emacs/rabbit-mode.el +11 -7
- data/po/en/rabbit.edit.po +189 -185
- data/po/en/rabbit.po +15 -12
- data/po/fr/rabbit.edit.po +189 -185
- data/po/fr/rabbit.po +15 -12
- data/po/ja/rabbit.edit.po +190 -186
- data/po/ja/rabbit.po +16 -13
- data/rabbit.gemspec +34 -16
- data/test/command/test-rabbit.rb +100 -0
- data/test/{rabbit-test-utils.rb → helper.rb} +7 -4
- data/test/{rabbit-test-utils → helper}/fixture.rb +2 -2
- data/test/{rabbit-test-utils → helper}/parser.rb +2 -2
- data/test/image/test-dia.rb +2 -2
- data/test/image/test-eps.rb +2 -2
- data/test/parser/test-markdown.rb +3 -5
- data/test/parser/test-rd.rb +1 -3
- data/test/parser/test-wiki.rb +3 -5
- data/test/run-test.rb +3 -3
- data/test/test-applier.rb +60 -29
- data/test/test-canvas.rb +70 -0
- data/test/test-color.rb +18 -9
- data/test/test-element.rb +15 -3
- data/test/test-size.rb +25 -22
- data/test/test-slide-configuration.rb +16 -6
- data/test/test-source.rb +15 -5
- data/test/test-utils.rb +15 -1
- metadata +55 -84
- data/lib/rabbit/renderer/print.rb +0 -31
- data/lib/rabbit/renderer/print/base.rb +0 -78
- data/lib/rabbit/renderer/print/cairo.rb +0 -122
- data/lib/rabbit/renderer/print/layout.rb +0 -123
- data/lib/rabbit/renderer/print/multiple.rb +0 -202
- data/lib/rabbit/source/hiki.rb +0 -36
- data/lib/rabbit/source/slide-share.rb +0 -53
|
@@ -24,12 +24,21 @@ module Rabbit
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def attach_to(window, container=nil)
|
|
27
|
-
init_gl(@area)
|
|
28
27
|
super
|
|
28
|
+
|
|
29
|
+
set_configure_event
|
|
30
|
+
|
|
31
|
+
init_gl(@area)
|
|
29
32
|
end
|
|
30
33
|
|
|
31
34
|
def detach
|
|
32
35
|
finalize_gl
|
|
36
|
+
|
|
37
|
+
if !@window.destroyed? and @configure_signal_id
|
|
38
|
+
@window.signal_handler_disconnect(@configure_signal_id)
|
|
39
|
+
@configure_signal_id = nil
|
|
40
|
+
end
|
|
41
|
+
|
|
33
42
|
super
|
|
34
43
|
end
|
|
35
44
|
|
|
@@ -132,25 +141,14 @@ module Rabbit
|
|
|
132
141
|
|
|
133
142
|
def mapped(widget)
|
|
134
143
|
set_drawable(widget.window)
|
|
135
|
-
prepare_renderer(@drawable)
|
|
136
144
|
end
|
|
137
145
|
|
|
138
146
|
def set_draw
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
finish_renderer
|
|
145
|
-
stop_events
|
|
146
|
-
end
|
|
147
|
-
else
|
|
148
|
-
@area.signal_connect("expose_event") do |widget, event|
|
|
149
|
-
init_renderer(@drawable)
|
|
150
|
-
draw(widget)
|
|
151
|
-
finish_renderer
|
|
152
|
-
stop_events
|
|
153
|
-
end
|
|
147
|
+
@area.signal_connect("draw") do |widget, context|
|
|
148
|
+
init_context(context)
|
|
149
|
+
draw(widget)
|
|
150
|
+
finish_renderer
|
|
151
|
+
Gdk::Event::PROPAGATE
|
|
154
152
|
end
|
|
155
153
|
end
|
|
156
154
|
|
|
@@ -170,6 +168,20 @@ module Rabbit
|
|
|
170
168
|
end
|
|
171
169
|
end
|
|
172
170
|
|
|
171
|
+
def set_configure_event
|
|
172
|
+
id = @window.signal_connect("configure_event") do |widget, event|
|
|
173
|
+
configured(event.x, event.y, event.width, event.height)
|
|
174
|
+
false
|
|
175
|
+
end
|
|
176
|
+
@configure_signal_id = id
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def configured(x, y, w, h)
|
|
180
|
+
@real_width = @drawable.width
|
|
181
|
+
@real_height = @drawable.height
|
|
182
|
+
@size_dirty = true
|
|
183
|
+
end
|
|
184
|
+
|
|
173
185
|
def set_configure_event_after
|
|
174
186
|
prev_x = prev_y = prev_width = prev_height = nil
|
|
175
187
|
@area.signal_connect_after("configure_event") do |widget, event|
|
|
@@ -190,6 +202,7 @@ module Rabbit
|
|
|
190
202
|
end
|
|
191
203
|
|
|
192
204
|
def configured_after(widget, event)
|
|
205
|
+
update_size(event.width, event.height)
|
|
193
206
|
reload_theme if @drawable
|
|
194
207
|
end
|
|
195
208
|
|
|
@@ -216,19 +229,19 @@ module Rabbit
|
|
|
216
229
|
end
|
|
217
230
|
|
|
218
231
|
def grab
|
|
219
|
-
|
|
232
|
+
@area.grab_add
|
|
220
233
|
Gdk.pointer_grab(@area.window, false,
|
|
221
234
|
Gdk::EventMask::BUTTON_PRESS_MASK |
|
|
222
235
|
Gdk::EventMask::BUTTON_RELEASE_MASK |
|
|
223
236
|
Gdk::EventMask::SCROLL_MASK |
|
|
224
237
|
Gdk::EventMask::POINTER_MOTION_MASK,
|
|
225
238
|
nil, nil,
|
|
226
|
-
Gdk::
|
|
239
|
+
Gdk::CURRENT_TIME)
|
|
227
240
|
end
|
|
228
241
|
|
|
229
242
|
def ungrab
|
|
230
|
-
|
|
231
|
-
Gdk.pointer_ungrab(Gdk::
|
|
243
|
+
@area.grab_remove
|
|
244
|
+
Gdk.pointer_ungrab(Gdk::CURRENT_TIME)
|
|
232
245
|
end
|
|
233
246
|
|
|
234
247
|
def pointer
|
|
@@ -97,9 +97,7 @@ module Rabbit
|
|
|
97
97
|
@graffiti.dragging? and
|
|
98
98
|
pressed_button == target_button
|
|
99
99
|
@graffiti.button_motion(event.x, event.y, width, height)
|
|
100
|
-
|
|
101
|
-
@graffiti.draw_last_segment(self)
|
|
102
|
-
finish_renderer
|
|
100
|
+
redraw
|
|
103
101
|
true
|
|
104
102
|
else
|
|
105
103
|
false
|
|
@@ -11,7 +11,8 @@ module Rabbit
|
|
|
11
11
|
procs.any? {|proc| proc.call(*args)}
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def add_motion_notify_hook(hook=
|
|
14
|
+
def add_motion_notify_hook(hook=nil, &block)
|
|
15
|
+
hook ||= Proc.new(&block)
|
|
15
16
|
@motion_notify_hook_procs << hook
|
|
16
17
|
end
|
|
17
18
|
|
|
@@ -19,7 +20,8 @@ module Rabbit
|
|
|
19
20
|
@motion_notify_hook_procs.clear
|
|
20
21
|
end
|
|
21
22
|
|
|
22
|
-
def add_scroll_hook(hook=
|
|
23
|
+
def add_scroll_hook(hook=nil, &block)
|
|
24
|
+
hook ||= Proc.new(&block)
|
|
23
25
|
@scroll_hook_procs << hook
|
|
24
26
|
end
|
|
25
27
|
|
|
@@ -27,7 +29,8 @@ module Rabbit
|
|
|
27
29
|
@scroll_hook_procs.clear
|
|
28
30
|
end
|
|
29
31
|
|
|
30
|
-
def add_button_press_hook(hook=
|
|
32
|
+
def add_button_press_hook(hook=nil, &block)
|
|
33
|
+
hook ||= Proc.new(&block)
|
|
31
34
|
@button_press_hook_procs << hook
|
|
32
35
|
end
|
|
33
36
|
|
|
@@ -35,7 +38,8 @@ module Rabbit
|
|
|
35
38
|
@button_press_hook_procs.clear
|
|
36
39
|
end
|
|
37
40
|
|
|
38
|
-
def add_button_release_hook(hook=
|
|
41
|
+
def add_button_release_hook(hook=nil, &block)
|
|
42
|
+
hook ||= Proc.new(&block)
|
|
39
43
|
@button_release_hook_procs << hook
|
|
40
44
|
end
|
|
41
45
|
|
|
@@ -60,6 +60,11 @@ module Rabbit
|
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
+
def have_slide_number_related_mask?(modifier)
|
|
64
|
+
modifier.control_mask? or
|
|
65
|
+
modifier.mod1_mask?
|
|
66
|
+
end
|
|
67
|
+
|
|
63
68
|
def calc_slide_number(val, modifier)
|
|
64
69
|
val += 10 if modifier.control_mask?
|
|
65
70
|
val += 20 if modifier.mod1_mask?
|
|
@@ -266,14 +271,14 @@ module Rabbit
|
|
|
266
271
|
modifier = event.state
|
|
267
272
|
case event.keyval
|
|
268
273
|
when *prev_keys
|
|
269
|
-
if modifier
|
|
274
|
+
if have_slide_number_related_mask?(modifier)
|
|
270
275
|
index = calc_slide_number(0, modifier)
|
|
271
276
|
@canvas.activate("JumpTo") {@canvas.current_index - index}
|
|
272
277
|
else
|
|
273
278
|
@canvas.activate("PreviousSlide")
|
|
274
279
|
end
|
|
275
280
|
when *next_keys
|
|
276
|
-
if modifier
|
|
281
|
+
if have_slide_number_related_mask?(modifier)
|
|
277
282
|
index = calc_slide_number(0, modifier)
|
|
278
283
|
@canvas.activate("JumpTo") {@canvas.current_index + index}
|
|
279
284
|
else
|
|
@@ -75,9 +75,9 @@ module Rabbit
|
|
|
75
75
|
add_scroll_hook do |event|
|
|
76
76
|
if magnifying?
|
|
77
77
|
case event.direction
|
|
78
|
-
when Gdk::
|
|
78
|
+
when Gdk::ScrollDirection::UP
|
|
79
79
|
@magnifier_ratio = [0.5, @magnifier_ratio - 0.1].max
|
|
80
|
-
when Gdk::
|
|
80
|
+
when Gdk::ScrollDirection::DOWN
|
|
81
81
|
@magnifier_ratio = [3, @magnifier_ratio + 0.1].min
|
|
82
82
|
end
|
|
83
83
|
queue_draw
|
|
@@ -23,27 +23,35 @@ module Rabbit
|
|
|
23
23
|
private
|
|
24
24
|
def init_progress
|
|
25
25
|
@progress = Rabbit::Progress.new
|
|
26
|
+
@progress_end_id = nil
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def start_progress(max)
|
|
29
30
|
return if max.zero?
|
|
30
31
|
|
|
32
|
+
if @progress_end_id
|
|
33
|
+
GLib::Source.remove(@progress_end_id)
|
|
34
|
+
@progress_end_id = nil
|
|
35
|
+
@progress.hide
|
|
36
|
+
end
|
|
31
37
|
update_menu
|
|
32
38
|
@progress.start_progress(max, @canvas.window)
|
|
33
39
|
adjust_progress_window
|
|
34
40
|
end
|
|
35
41
|
|
|
36
42
|
def update_progress(i)
|
|
43
|
+
return if @progress_end_id
|
|
37
44
|
@progress.update_progress(i)
|
|
38
45
|
Utils.process_pending_events
|
|
39
46
|
end
|
|
40
47
|
|
|
41
48
|
def end_progress
|
|
42
49
|
@progress.end_progress
|
|
43
|
-
GLib::Timeout.add(100) do
|
|
50
|
+
@progress_end_id = GLib::Timeout.add(100) do
|
|
44
51
|
@progress.hide
|
|
45
52
|
update_menu
|
|
46
|
-
|
|
53
|
+
@progress_end_id = nil
|
|
54
|
+
GLib::Source::REMOVE
|
|
47
55
|
end
|
|
48
56
|
end
|
|
49
57
|
|
|
@@ -63,10 +63,10 @@ module Rabbit
|
|
|
63
63
|
add_scroll_hook do |event|
|
|
64
64
|
if spotlighting?
|
|
65
65
|
case event.direction
|
|
66
|
-
when Gdk::
|
|
66
|
+
when Gdk::ScrollDirection::UP
|
|
67
67
|
@spotlight_radius_ratio =
|
|
68
68
|
[0.1, @spotlight_radius_ratio - 0.1].max
|
|
69
|
-
when Gdk::
|
|
69
|
+
when Gdk::ScrollDirection::DOWN
|
|
70
70
|
@spotlight_radius_ratio =
|
|
71
71
|
[1, @spotlight_radius_ratio + 0.1].min
|
|
72
72
|
end
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
# Copyright (C) 2006-2018 Kouhei Sutou <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 "rabbit/pango-markup"
|
|
18
|
+
|
|
1
19
|
require "rabbit/renderer/color"
|
|
2
20
|
|
|
3
21
|
module Rabbit
|
|
@@ -242,6 +260,42 @@ module Rabbit
|
|
|
242
260
|
|
|
243
261
|
def set_font_resolution(context)
|
|
244
262
|
end
|
|
263
|
+
|
|
264
|
+
def setup_flag_params(pole_height, default_flag_width_ratio, params)
|
|
265
|
+
params = params.dup
|
|
266
|
+
|
|
267
|
+
text = params["text"]
|
|
268
|
+
text_attrs = params["text_attributes"] || {}
|
|
269
|
+
if text
|
|
270
|
+
markupped_text = PangoMarkup.new("span", text_attrs, text)
|
|
271
|
+
layout = make_layout(markupped_text.to_s)
|
|
272
|
+
text_width, text_height = layout.pixel_size
|
|
273
|
+
params["layout"] = layout
|
|
274
|
+
params["text_width"] = text_width
|
|
275
|
+
params["text_height"] = text_height
|
|
276
|
+
flag_width_default = [
|
|
277
|
+
text_width * default_flag_width_ratio,
|
|
278
|
+
pole_height / 2
|
|
279
|
+
].max
|
|
280
|
+
flag_height_default = [text_height, flag_width_default].max
|
|
281
|
+
else
|
|
282
|
+
params["layout"] = nil
|
|
283
|
+
flag_width_default = flag_height_default = nil
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
params["pole_width"] = params["pole_width"] || 2
|
|
287
|
+
params["pole_color"] ||= "black"
|
|
288
|
+
flag_height = params["flag_height"] ||
|
|
289
|
+
flag_height_default || pole_height / 2
|
|
290
|
+
flag_height = [flag_height, pole_height].min
|
|
291
|
+
params["flag_height"] = flag_height
|
|
292
|
+
params["flag_width"] ||= flag_width_default || flag_height
|
|
293
|
+
params["flag_color"] ||= "red"
|
|
294
|
+
params["flag_frame_width"] ||= params["pole_width"]
|
|
295
|
+
params["flag_frame_color"] ||= params["pole_color"]
|
|
296
|
+
|
|
297
|
+
params
|
|
298
|
+
end
|
|
245
299
|
end
|
|
246
300
|
end
|
|
247
301
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2016 Kouhei
|
|
1
|
+
# Copyright (C) 2016-2019 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
|
|
@@ -25,15 +25,23 @@ module Rabbit
|
|
|
25
25
|
include Renderer::Base
|
|
26
26
|
include Engine::Cairo
|
|
27
27
|
|
|
28
|
-
attr_accessor :
|
|
28
|
+
attr_accessor :filename
|
|
29
|
+
attr_accessor :pango_context
|
|
29
30
|
|
|
30
|
-
def initialize(canvas
|
|
31
|
+
def initialize(canvas)
|
|
31
32
|
super(canvas)
|
|
32
|
-
@
|
|
33
|
-
@height = height
|
|
33
|
+
@filename = nil
|
|
34
34
|
@pango_context = nil
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
def width
|
|
38
|
+
@base_width
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def height
|
|
42
|
+
@base_height
|
|
43
|
+
end
|
|
44
|
+
|
|
37
45
|
def post_apply_theme
|
|
38
46
|
end
|
|
39
47
|
|
|
@@ -71,7 +79,7 @@ module Rabbit
|
|
|
71
79
|
|
|
72
80
|
def to_pixbuf(slide)
|
|
73
81
|
pixbuf = nil
|
|
74
|
-
::Cairo::ImageSurface.new(@
|
|
82
|
+
::Cairo::ImageSurface.new(@base_width, @base_height) do |surface|
|
|
75
83
|
context = ::Cairo::Context.new(surface)
|
|
76
84
|
init_context(context)
|
|
77
85
|
slide.draw(@canvas)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Copyright (C) 2005-2018 Kouhei Sutou <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 "rabbit/rabbit"
|
|
18
|
+
|
|
19
|
+
module Rabbit
|
|
20
|
+
module Renderer
|
|
21
|
+
class PrintLayout
|
|
22
|
+
class << self
|
|
23
|
+
def create(renderer, canvas)
|
|
24
|
+
map = MAPPING.find do |key, value|
|
|
25
|
+
key === renderer.slides_per_page
|
|
26
|
+
end
|
|
27
|
+
if map.nil?
|
|
28
|
+
raise InvalidPages.new(renderer.slides_per_page)
|
|
29
|
+
else
|
|
30
|
+
map[1].new(renderer, canvas)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def initialize(renderer, canvas)
|
|
36
|
+
@renderer = renderer
|
|
37
|
+
@canvas = canvas
|
|
38
|
+
@margin_left = renderer.margin_left
|
|
39
|
+
@margin_right = renderer.margin_right
|
|
40
|
+
@margin_top = renderer.margin_top
|
|
41
|
+
@margin_bottom = renderer.margin_bottom
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class PrintLayout1 < PrintLayout
|
|
46
|
+
def slide_width
|
|
47
|
+
@renderer.page_width
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def slide_height
|
|
51
|
+
@renderer.page_height
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def normalize_x(x)
|
|
55
|
+
x
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def normalize_y(y)
|
|
59
|
+
y
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
class PrintLayout2 < PrintLayout
|
|
64
|
+
def initialize(renderer, canvas)
|
|
65
|
+
super
|
|
66
|
+
@margin_left ||= 50
|
|
67
|
+
@margin_right ||= 50
|
|
68
|
+
@margin_top ||= 30
|
|
69
|
+
@margin_bottom ||= 30
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def slide_width
|
|
73
|
+
@renderer.page_width - @margin_left - @margin_right
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def slide_height
|
|
77
|
+
(@renderer.page_height / 2) - @margin_top - @margin_bottom
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def normalize_x(x)
|
|
81
|
+
x + @margin_left
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def normalize_y(y)
|
|
85
|
+
base = @margin_bottom
|
|
86
|
+
if below?
|
|
87
|
+
base += @margin_top + @margin_bottom + slide_height
|
|
88
|
+
end
|
|
89
|
+
y + base
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
private
|
|
93
|
+
def below?
|
|
94
|
+
(@canvas.current_index % 2) == 1
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
class PrintLayoutMore < PrintLayout
|
|
99
|
+
def initialize(renderer, canvas)
|
|
100
|
+
super
|
|
101
|
+
@margin_left ||= 10
|
|
102
|
+
@margin_right ||= 10
|
|
103
|
+
@margin_top ||= 10
|
|
104
|
+
@margin_bottom ||= 10
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def slide_width
|
|
108
|
+
(@renderer.page_width / 2) - @margin_left - @margin_right
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def slide_height
|
|
112
|
+
base = @renderer.page_height / (@renderer.slides_per_page / 2.0).ceil
|
|
113
|
+
base - @margin_top - @margin_bottom
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def normalize_x(x)
|
|
117
|
+
base = @margin_left
|
|
118
|
+
unless left?
|
|
119
|
+
base += @margin_left + @margin_right + slide_width
|
|
120
|
+
end
|
|
121
|
+
x + base
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def normalize_y(y)
|
|
125
|
+
nth_col = (normalized_current_index / 2.0).truncate
|
|
126
|
+
base = @margin_top * (nth_col + 1)
|
|
127
|
+
base += @margin_bottom * nth_col
|
|
128
|
+
base += slide_height * nth_col
|
|
129
|
+
y + base
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
private
|
|
133
|
+
def left?
|
|
134
|
+
(normalized_current_index % 2).zero?
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def normalized_current_index
|
|
138
|
+
@canvas.current_index % @renderer.slides_per_page
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
class PrintLayout
|
|
143
|
+
MAPPING = [
|
|
144
|
+
[1, PrintLayout1],
|
|
145
|
+
[2, PrintLayout2],
|
|
146
|
+
[3..(1.0/0), PrintLayoutMore],
|
|
147
|
+
]
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|