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
|
@@ -4,75 +4,41 @@ require "rabbit/rabbit"
|
|
|
4
4
|
|
|
5
5
|
module Rabbit
|
|
6
6
|
module Renderer
|
|
7
|
-
Color
|
|
8
|
-
class Color
|
|
9
|
-
GDK_COLOR_NORMALIZE = 65535.0
|
|
10
|
-
|
|
7
|
+
class Color < Struct.new(:red, :green, :blue, :alpha)
|
|
11
8
|
class << self
|
|
12
|
-
def
|
|
13
|
-
|
|
14
|
-
green = color.green / GDK_COLOR_NORMALIZE
|
|
15
|
-
blue = color.blue / GDK_COLOR_NORMALIZE
|
|
16
|
-
alpha = 1.0
|
|
17
|
-
new(red, green, blue, alpha, have_alpha)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
HEX = "(?i:[a-z0-9])"
|
|
21
|
-
def parse(spec)
|
|
22
|
-
case spec
|
|
23
|
-
when Array
|
|
24
|
-
new(*spec)
|
|
25
|
-
when /\A\#(#{HEX})(#{HEX})(#{HEX})(#{HEX})?\z/
|
|
26
|
-
new(*normalize($1, $2, $3, $4, 16 ** 1 - 1))
|
|
27
|
-
when /\A\#(#{HEX}{2})(#{HEX}{2})(#{HEX}{2})(#{HEX}{2})?\z/
|
|
28
|
-
new(*normalize($1, $2, $3, $4, 16 ** 2 - 1))
|
|
29
|
-
when /\A\#(#{HEX}{4})(#{HEX}{4})(#{HEX}{4})(#{HEX}{4})?\z/
|
|
30
|
-
new(*normalize($1, $2, $3, $4, 16 ** 4 - 1))
|
|
31
|
-
else
|
|
32
|
-
new_from_gdk_color(Gdk::Color.parse(spec))
|
|
33
|
-
end
|
|
9
|
+
def parse(*args)
|
|
10
|
+
new(*args)
|
|
34
11
|
end
|
|
12
|
+
end
|
|
35
13
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
14
|
+
def initialize(*args)
|
|
15
|
+
case args.collect(&:class)
|
|
16
|
+
when [Gdk::RGBA]
|
|
17
|
+
rgba = args[0]
|
|
18
|
+
super(*rgba.to_a)
|
|
19
|
+
when [String]
|
|
20
|
+
rgba = parse(args[0])
|
|
21
|
+
super(*rgba)
|
|
22
|
+
else
|
|
23
|
+
super(*args)
|
|
43
24
|
end
|
|
44
25
|
end
|
|
45
26
|
|
|
46
|
-
alias have_alpha? have_alpha
|
|
47
|
-
|
|
48
27
|
def to_s
|
|
49
|
-
|
|
28
|
+
values = to_a.collect {|x| (x * 65535).ceil}
|
|
29
|
+
"#%04X%04X%04X%04X" % values
|
|
50
30
|
end
|
|
51
31
|
|
|
52
32
|
def to_a
|
|
53
|
-
|
|
54
|
-
[red, green, blue, alpha]
|
|
55
|
-
else
|
|
56
|
-
[red, green, blue]
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def to_gdk_rgb
|
|
61
|
-
to_gdk_rgba[0..-2]
|
|
33
|
+
[red, green, blue, alpha]
|
|
62
34
|
end
|
|
63
35
|
|
|
64
36
|
def to_gdk_rgba
|
|
65
|
-
|
|
66
|
-
(color * GDK_COLOR_NORMALIZE).truncate
|
|
67
|
-
end
|
|
37
|
+
Gdk::RGBA.new(*to_a)
|
|
68
38
|
end
|
|
69
39
|
|
|
70
40
|
def to_gdk_format
|
|
71
|
-
to_s
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def to_gdk_color
|
|
75
|
-
Gdk::Color.new(*to_gdk_rgb)
|
|
41
|
+
to_s
|
|
76
42
|
end
|
|
77
43
|
|
|
78
44
|
def to_css_rgba
|
|
@@ -82,6 +48,33 @@ module Rabbit
|
|
|
82
48
|
a = alpha || 1.0
|
|
83
49
|
"rgba(#{red_percent}%, #{green_percent}%, #{blue_percent}%, #{a})"
|
|
84
50
|
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
HEX = "(?i:[a-z0-9])"
|
|
54
|
+
def parse(text)
|
|
55
|
+
case text
|
|
56
|
+
when /\A\#(#{HEX})(#{HEX})(#{HEX})(#{HEX})?\z/
|
|
57
|
+
normalize_rgba($1, $2, $3, $4, 16 ** 1 - 1)
|
|
58
|
+
when /\A\#(#{HEX}{2})(#{HEX}{2})(#{HEX}{2})(#{HEX}{2})?\z/
|
|
59
|
+
normalize_rgba($1, $2, $3, $4, 16 ** 2 - 1)
|
|
60
|
+
when /\A\#(#{HEX}{4})(#{HEX}{4})(#{HEX}{4})(#{HEX}{4})?\z/
|
|
61
|
+
normalize_rgba($1, $2, $3, $4, 16 ** 4 - 1)
|
|
62
|
+
else
|
|
63
|
+
Gdk::RGBA.parse(text).to_a
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def normalize_rgba(r, g, b, a, max)
|
|
68
|
+
red = r.hex / max.to_f
|
|
69
|
+
green = g.hex / max.to_f
|
|
70
|
+
blue = b.hex / max.to_f
|
|
71
|
+
if a
|
|
72
|
+
alpha = a.hex / max.to_f
|
|
73
|
+
else
|
|
74
|
+
alpha = 1.0
|
|
75
|
+
end
|
|
76
|
+
[red, green, blue, alpha]
|
|
77
|
+
end
|
|
85
78
|
end
|
|
86
79
|
end
|
|
87
80
|
end
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# Copyright (C) 2006-2019 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
|
+
|
|
1
17
|
require "rabbit/renderer/base"
|
|
2
18
|
require "rabbit/renderer/display/hook-handler"
|
|
3
19
|
|
|
@@ -12,8 +28,6 @@ module Rabbit
|
|
|
12
28
|
@drawable = nil
|
|
13
29
|
@size = nil
|
|
14
30
|
@size_dirty = true
|
|
15
|
-
@default_size_ratio = nil
|
|
16
|
-
@size_ratio = nil
|
|
17
31
|
super
|
|
18
32
|
end
|
|
19
33
|
|
|
@@ -47,16 +61,9 @@ module Rabbit
|
|
|
47
61
|
def attach_to(window, container=nil)
|
|
48
62
|
@window = window
|
|
49
63
|
@container = container || @window
|
|
50
|
-
|
|
51
|
-
set_configure_event
|
|
52
64
|
end
|
|
53
65
|
|
|
54
66
|
def detach
|
|
55
|
-
if !@window.destroyed? and @configure_signal_id
|
|
56
|
-
@window.signal_handler_disconnect(@configure_signal_id)
|
|
57
|
-
@configure_signal_id = nil
|
|
58
|
-
end
|
|
59
|
-
|
|
60
67
|
@window = nil
|
|
61
68
|
@container = nil
|
|
62
69
|
end
|
|
@@ -95,12 +102,13 @@ module Rabbit
|
|
|
95
102
|
end
|
|
96
103
|
|
|
97
104
|
def draw_slide(slide, simulation)
|
|
98
|
-
set_size_ratio(slide.size_ratio
|
|
105
|
+
set_size_ratio(slide.size_ratio)
|
|
99
106
|
|
|
100
107
|
if simulation
|
|
101
108
|
super
|
|
102
109
|
else
|
|
103
110
|
save_context do
|
|
111
|
+
scale_context(*@size.logical_scale)
|
|
104
112
|
translate_context(@size.logical_margin_left,
|
|
105
113
|
@size.logical_margin_top)
|
|
106
114
|
super
|
|
@@ -111,33 +119,36 @@ module Rabbit
|
|
|
111
119
|
end
|
|
112
120
|
|
|
113
121
|
margin_background = make_color("black")
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
122
|
+
save_context do
|
|
123
|
+
scale_context(*@size.logical_scale)
|
|
124
|
+
if @size.have_logical_margin_x?
|
|
125
|
+
draw_rectangle(true,
|
|
126
|
+
0,
|
|
127
|
+
0,
|
|
128
|
+
@size.logical_margin_left,
|
|
129
|
+
@size.logical_height,
|
|
130
|
+
margin_background)
|
|
131
|
+
draw_rectangle(true,
|
|
132
|
+
@size.logical_margin_left + @size.logical_width,
|
|
133
|
+
0,
|
|
134
|
+
@size.logical_margin_right,
|
|
135
|
+
@size.logical_height,
|
|
136
|
+
margin_background)
|
|
137
|
+
end
|
|
138
|
+
if @size.have_logical_margin_y?
|
|
139
|
+
draw_rectangle(true,
|
|
140
|
+
0,
|
|
141
|
+
0,
|
|
142
|
+
@size.logical_width,
|
|
143
|
+
@size.logical_margin_top,
|
|
144
|
+
margin_background)
|
|
145
|
+
draw_rectangle(true,
|
|
146
|
+
0,
|
|
147
|
+
@size.logical_margin_top + @size.logical_height,
|
|
148
|
+
@size.logical_width,
|
|
149
|
+
@size.logical_margin_bottom,
|
|
150
|
+
margin_background)
|
|
151
|
+
end
|
|
141
152
|
end
|
|
142
153
|
end
|
|
143
154
|
end
|
|
@@ -145,47 +156,45 @@ module Rabbit
|
|
|
145
156
|
private
|
|
146
157
|
def set_drawable(drawable)
|
|
147
158
|
@drawable = drawable
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
159
|
+
set_default_size(@drawable.width, @drawable.height)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def set_default_size(w, h)
|
|
163
|
+
@real_width = w
|
|
164
|
+
@real_height = h
|
|
165
|
+
ratio = @base_width.to_f / @base_height.to_f
|
|
166
|
+
set_size(w, h, ratio)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def set_size(w, h, ratio)
|
|
170
|
+
@size = Size.new(@base_width,
|
|
171
|
+
@base_height,
|
|
172
|
+
w,
|
|
173
|
+
h,
|
|
174
|
+
ratio)
|
|
153
175
|
end
|
|
154
176
|
|
|
155
|
-
def
|
|
156
|
-
@
|
|
177
|
+
def update_size(w, h)
|
|
178
|
+
@real_width = w
|
|
179
|
+
@real_height = h
|
|
180
|
+
@size_dirty = true
|
|
157
181
|
end
|
|
158
182
|
|
|
159
183
|
def set_size_ratio(ratio)
|
|
184
|
+
ratio ||= @base_width.to_f / @base_height.to_f
|
|
160
185
|
return if @size.ratio == ratio
|
|
161
186
|
|
|
162
187
|
w = @size.real_width
|
|
163
188
|
h = @size.real_height
|
|
164
|
-
|
|
165
|
-
@size = Size.new(w, h, @size_ratio)
|
|
189
|
+
set_size(w, h, ratio)
|
|
166
190
|
end
|
|
167
191
|
|
|
168
192
|
def refresh_size
|
|
169
193
|
return unless @size_dirty
|
|
170
|
-
|
|
171
|
-
@size = Size.new(@drawable.width,
|
|
172
|
-
@drawable.height,
|
|
173
|
-
@size.ratio)
|
|
194
|
+
set_size(@real_width, @real_height, @size.ratio)
|
|
174
195
|
@size_dirty = false
|
|
175
196
|
end
|
|
176
197
|
|
|
177
|
-
def set_configure_event
|
|
178
|
-
id = @window.signal_connect("configure_event") do |widget, event|
|
|
179
|
-
configured(event.x, event.y, event.width, event.height)
|
|
180
|
-
false
|
|
181
|
-
end
|
|
182
|
-
@configure_signal_id = id
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
def configured(x, y, w, h)
|
|
186
|
-
@size_dirty = true
|
|
187
|
-
end
|
|
188
|
-
|
|
189
198
|
def queue_draw
|
|
190
199
|
widget.queue_draw
|
|
191
200
|
end
|
|
@@ -1,5 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# Copyright (C) 2008-2019 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 "clutter-gtk"
|
|
3
18
|
|
|
4
19
|
require "rabbit/utils"
|
|
5
20
|
require "rabbit/renderer/engine"
|
|
@@ -18,10 +33,6 @@ require "rabbit/renderer/display/spotlight"
|
|
|
18
33
|
require "rabbit/renderer/display/magnifier"
|
|
19
34
|
|
|
20
35
|
module Rabbit
|
|
21
|
-
add_gui_init_proc do
|
|
22
|
-
Clutter::Gtk.init
|
|
23
|
-
end
|
|
24
|
-
|
|
25
36
|
module Renderer
|
|
26
37
|
module Display
|
|
27
38
|
class ClutterEmbed
|
|
@@ -31,6 +42,8 @@ module Rabbit
|
|
|
31
42
|
end
|
|
32
43
|
end
|
|
33
44
|
|
|
45
|
+
include Renderer::Engine::Cairo
|
|
46
|
+
|
|
34
47
|
include Base
|
|
35
48
|
|
|
36
49
|
include Cursor
|
|
@@ -46,8 +59,6 @@ module Rabbit
|
|
|
46
59
|
include Spotlight
|
|
47
60
|
include Magnifier
|
|
48
61
|
|
|
49
|
-
include Renderer::Engine::Cairo
|
|
50
|
-
|
|
51
62
|
attr_accessor :filename
|
|
52
63
|
def initialize(canvas)
|
|
53
64
|
@recreate_id = nil
|
|
@@ -61,6 +72,13 @@ module Rabbit
|
|
|
61
72
|
@embed
|
|
62
73
|
end
|
|
63
74
|
|
|
75
|
+
def redraw
|
|
76
|
+
actor = current_actor
|
|
77
|
+
# TODO: We need more work for periodical redraw
|
|
78
|
+
actor.content.invalidate if actor
|
|
79
|
+
widget.queue_draw
|
|
80
|
+
end
|
|
81
|
+
|
|
64
82
|
def clear_slide
|
|
65
83
|
super
|
|
66
84
|
redraw
|
|
@@ -90,6 +108,7 @@ module Rabbit
|
|
|
90
108
|
old_actor.hide if old_actor
|
|
91
109
|
actor = retrieve_actor(index)
|
|
92
110
|
if actor and !hiding?
|
|
111
|
+
actor.content.set_size(actor.width, actor.height)
|
|
93
112
|
actor.show
|
|
94
113
|
actor.raise_top
|
|
95
114
|
if old_actor
|
|
@@ -107,6 +126,7 @@ module Rabbit
|
|
|
107
126
|
actor.hide if actor
|
|
108
127
|
actor = retrieve_actor(nil, index)
|
|
109
128
|
if actor and !hiding?
|
|
129
|
+
actor.content.set_size(actor.width, actor.height)
|
|
110
130
|
actor.show
|
|
111
131
|
actor.raise_top
|
|
112
132
|
end
|
|
@@ -246,12 +266,12 @@ module Rabbit
|
|
|
246
266
|
end
|
|
247
267
|
|
|
248
268
|
def init_clutter_embed
|
|
249
|
-
@embed =
|
|
269
|
+
@embed = ClutterGtk::Embed.new
|
|
250
270
|
@embed.can_focus = true
|
|
251
271
|
@stage = @embed.stage
|
|
252
272
|
reset_stage_color
|
|
253
273
|
set_map
|
|
254
|
-
|
|
274
|
+
set_draw
|
|
255
275
|
set_configure_event_after
|
|
256
276
|
|
|
257
277
|
event_mask = Gdk::EventMask::BUTTON_PRESS_MASK
|
|
@@ -296,8 +316,8 @@ module Rabbit
|
|
|
296
316
|
end
|
|
297
317
|
end
|
|
298
318
|
|
|
299
|
-
def
|
|
300
|
-
@embed.signal_connect("
|
|
319
|
+
def set_draw
|
|
320
|
+
@embed.signal_connect("draw") do |widget, context|
|
|
301
321
|
reload_source
|
|
302
322
|
false
|
|
303
323
|
end
|
|
@@ -315,6 +335,9 @@ module Rabbit
|
|
|
315
335
|
end
|
|
316
336
|
|
|
317
337
|
def configured_after(widget, event)
|
|
338
|
+
@real_width = event.width
|
|
339
|
+
@real_height = event.height
|
|
340
|
+
@size_dirty = true
|
|
318
341
|
reload_theme if @drawable
|
|
319
342
|
false
|
|
320
343
|
end
|
|
@@ -415,9 +438,9 @@ module Rabbit
|
|
|
415
438
|
unless handled
|
|
416
439
|
handled = true
|
|
417
440
|
case event.direction
|
|
418
|
-
when Gdk::
|
|
441
|
+
when Gdk::ScrollDirection::UP
|
|
419
442
|
@canvas.activate("PreviousSlide")
|
|
420
|
-
when Gdk::
|
|
443
|
+
when Gdk::ScrollDirection::DOWN
|
|
421
444
|
@canvas.activate("NextSlide")
|
|
422
445
|
else
|
|
423
446
|
handled = false
|
|
@@ -431,8 +454,13 @@ module Rabbit
|
|
|
431
454
|
index ||= index || @canvas.current_index
|
|
432
455
|
slide_actors = @actors[index]
|
|
433
456
|
return nil if slide_actors.nil?
|
|
434
|
-
|
|
435
|
-
|
|
457
|
+
|
|
458
|
+
if index_in_slide.nil?
|
|
459
|
+
slide = @canvas.slides[index]
|
|
460
|
+
return nil if slide.nil?
|
|
461
|
+
index_in_slide = slide.drawing_index
|
|
462
|
+
end
|
|
463
|
+
slide_actors[index_in_slide]
|
|
436
464
|
end
|
|
437
465
|
|
|
438
466
|
def current_actor
|
|
@@ -455,16 +483,22 @@ module Rabbit
|
|
|
455
483
|
actor = slide_actors[index_in_slide]
|
|
456
484
|
slide = @canvas.slides[i]
|
|
457
485
|
if actor.nil?
|
|
458
|
-
|
|
459
|
-
context
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
486
|
+
canvas = Clutter::Canvas.new
|
|
487
|
+
canvas.signal_connect(:draw, i, index_in_slide) do |_, context, _width, _height, _i, _index_in_slide|
|
|
488
|
+
init_context(context)
|
|
489
|
+
draw_nth_slide(_i, _index_in_slide)
|
|
490
|
+
finish_context
|
|
491
|
+
end
|
|
492
|
+
actor = Clutter::Actor.new
|
|
493
|
+
actor.instance_variable_set(:@c, canvas)
|
|
494
|
+
actor.content = canvas
|
|
495
|
+
actor.set_size(@real_width, @real_height)
|
|
463
496
|
@actors[i] ||= []
|
|
464
497
|
@actors[i][index_in_slide] = actor
|
|
465
|
-
@stage.
|
|
498
|
+
@stage.add_child(actor)
|
|
466
499
|
current_index_in_slide = index_in_slide == slide.drawing_index
|
|
467
500
|
if index.nil? and current_index_in_slide and !hiding?
|
|
501
|
+
canvas.set_size(@real_width, @real_height)
|
|
468
502
|
actor.show
|
|
469
503
|
actor.raise_top
|
|
470
504
|
Utils.process_pending_events_proc.call
|
|
@@ -492,19 +526,19 @@ module Rabbit
|
|
|
492
526
|
end
|
|
493
527
|
|
|
494
528
|
def grab
|
|
495
|
-
|
|
529
|
+
@embed.grab_add
|
|
496
530
|
Gdk.pointer_grab(@embed.window, false,
|
|
497
531
|
Gdk::EventMask::BUTTON_PRESS_MASK |
|
|
498
532
|
Gdk::EventMask::BUTTON_RELEASE_MASK |
|
|
499
533
|
Gdk::EventMask::SCROLL_MASK |
|
|
500
534
|
Gdk::EventMask::POINTER_MOTION_MASK,
|
|
501
535
|
nil, nil,
|
|
502
|
-
Gdk::
|
|
536
|
+
Gdk::CURRENT_TIME)
|
|
503
537
|
end
|
|
504
538
|
|
|
505
539
|
def ungrab
|
|
506
|
-
|
|
507
|
-
Gdk.pointer_ungrab(Gdk::
|
|
540
|
+
@embed.grab_remove
|
|
541
|
+
Gdk.pointer_ungrab(Gdk::CURRENT_TIME)
|
|
508
542
|
end
|
|
509
543
|
|
|
510
544
|
def pointer
|