rabbit 3.0.3 → 3.0.4
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 +4 -4
- data/Gemfile +31 -0
- data/Rakefile +51 -73
- data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/en/how-to-make/markdown.md +28 -2
- data/doc/en/how-to-make/rd.rd +28 -2
- data/doc/en/install/homebrew.rd +0 -15
- data/doc/en/news.rd +67 -0
- data/doc/en/sample/hiki/rabbit.hiki +1 -1
- 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 +1 -1
- data/doc/en/usage/rabbit.rd +1 -1
- data/doc/ja/how-to-make/markdown.md +25 -5
- data/doc/ja/how-to-make/rd.rd +25 -5
- data/doc/ja/install/homebrew.rd +0 -15
- data/doc/ja/news.rd +67 -0
- data/doc/ja/usage/rabbit.rd +1 -1
- data/lib/rabbit/action.rb +1 -23
- data/lib/rabbit/canvas.rb +2 -10
- data/lib/rabbit/command/rabbit-slide.rb +1 -1
- data/lib/rabbit/command/rabbit.rb +6 -4
- data/lib/rabbit/cursor-manager.rb +5 -5
- data/lib/rabbit/element/text.rb +66 -0
- data/lib/rabbit/error.rb +9 -1
- data/lib/rabbit/frame.rb +22 -2
- data/lib/rabbit/front.rb +1 -1
- data/lib/rabbit/gesture/handler.rb +5 -8
- data/lib/rabbit/gtk.rb +44 -2
- data/lib/rabbit/info-window.rb +16 -2
- data/lib/rabbit/menu.rb +1 -3
- data/lib/rabbit/parser/ext/charty.rb +9 -0
- data/lib/rabbit/parser/markdown/converter.rb +3 -3
- data/lib/rabbit/parser/rd/ext/block-verbatim.rb +0 -12
- data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +23 -0
- data/lib/rabbit/parser/wiki/output.rb +0 -6
- data/lib/rabbit/renderer/base.rb +1 -9
- data/lib/rabbit/renderer/display/base.rb +7 -5
- data/lib/rabbit/renderer/display/button-handler.rb +25 -10
- data/lib/rabbit/renderer/display/cursor.rb +18 -2
- data/lib/rabbit/renderer/display/drawing-area-base.rb +23 -7
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +35 -20
- data/lib/rabbit/renderer/display/gesture.rb +17 -1
- data/lib/rabbit/renderer/engine/cairo.rb +27 -13
- data/lib/rabbit/renderer/gl.rb +0 -81
- data/lib/rabbit/renderer/kernel.rb +0 -50
- data/lib/rabbit/renderer/offscreen.rb +1 -6
- data/lib/rabbit/renderer/printer.rb +2 -8
- data/lib/rabbit/renderer/screen.rb +6 -7
- data/lib/rabbit/source/argf.rb +17 -1
- data/lib/rabbit/source/base.rb +35 -10
- data/lib/rabbit/source/file.rb +17 -1
- data/lib/rabbit/source/uri.rb +17 -1
- data/lib/rabbit/theme/dark-gradation/dark-gradation.rb +2 -2
- data/lib/rabbit/theme/default-comment/default-comment.rb +1 -5
- data/lib/rabbit/theme/image-slide-number/property.rb +1 -1
- data/lib/rabbit/theme/title-background-image/title-background-image.rb +2 -2
- data/lib/rabbit/trackball.rb +21 -21
- data/lib/rabbit/utils.rb +5 -45
- data/lib/rabbit/version.rb +1 -1
- data/lib/rabbit/video-window.rb +6 -2
- data/po/en/rabbit.edit.po +24 -38
- data/po/en/rabbit.po +9 -21
- data/po/fr/rabbit.edit.po +24 -38
- data/po/fr/rabbit.po +9 -21
- data/po/ja/rabbit.edit.po +56 -58
- data/po/ja/rabbit.po +12 -21
- data/rabbit.gemspec +11 -14
- data/sample/gl-sample.rd +2 -4
- data/sample/rabbit/theme/gl-sample/gl-sample.rb +1 -1
- data/sample/rabbit-en.hiki +1 -1
- data/sample/rabbit-en.md +1 -1
- data/sample/rabbit-en.rd +1 -13
- data/sample/rabbit.rd +1 -13
- data/test/helper.rb +1 -2
- data/test/parser/test-markdown.rb +4 -3
- data/test/parser/test-rd.rb +3 -3
- data/test/parser/test-wiki.rb +2 -2
- data/test/test-readme-parser.rb +15 -12
- data/test/test-source.rb +2 -2
- metadata +35 -122
- 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/lib/rabbit/parser/ext/emacs.rb +0 -121
- data/lib/rabbit/renderer/display/clutter-embed.rb +0 -606
- data/lib/rabbit/theme/clutter-comment/clutter-comment.rb +0 -76
- data/lib/rabbit/theme/clutter-comment/property.rb +0 -3
@@ -1,606 +0,0 @@
|
|
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"
|
18
|
-
|
19
|
-
require "rabbit/utils"
|
20
|
-
require "rabbit/renderer/engine"
|
21
|
-
require "rabbit/renderer/display/base"
|
22
|
-
require 'rabbit/renderer/display/cursor'
|
23
|
-
require "rabbit/renderer/display/progress"
|
24
|
-
require "rabbit/renderer/display/mask"
|
25
|
-
require "rabbit/renderer/display/search"
|
26
|
-
require "rabbit/renderer/display/gesture"
|
27
|
-
require "rabbit/renderer/display/graffiti"
|
28
|
-
require "rabbit/renderer/display/menu"
|
29
|
-
require "rabbit/renderer/display/button-handler"
|
30
|
-
require "rabbit/renderer/display/key-handler"
|
31
|
-
require "rabbit/renderer/display/info"
|
32
|
-
require "rabbit/renderer/display/spotlight"
|
33
|
-
require "rabbit/renderer/display/magnifier"
|
34
|
-
|
35
|
-
module Rabbit
|
36
|
-
module Renderer
|
37
|
-
module Display
|
38
|
-
class ClutterEmbed
|
39
|
-
class << self
|
40
|
-
def priority
|
41
|
-
0
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
include Renderer::Engine::Cairo
|
46
|
-
|
47
|
-
include Base
|
48
|
-
|
49
|
-
include Cursor
|
50
|
-
include Menu
|
51
|
-
include Graffiti
|
52
|
-
include Mask
|
53
|
-
include Progress
|
54
|
-
include Search
|
55
|
-
include Gesture
|
56
|
-
include KeyHandler
|
57
|
-
include ButtonHandler
|
58
|
-
include Info
|
59
|
-
include Spotlight
|
60
|
-
include Magnifier
|
61
|
-
|
62
|
-
attr_accessor :filename
|
63
|
-
def initialize(canvas)
|
64
|
-
@recreate_id = nil
|
65
|
-
@need_reload_theme = false
|
66
|
-
super
|
67
|
-
@filename = nil
|
68
|
-
init_clutter_embed
|
69
|
-
end
|
70
|
-
|
71
|
-
def widget
|
72
|
-
@embed
|
73
|
-
end
|
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
|
-
|
82
|
-
def clear_slide
|
83
|
-
super
|
84
|
-
redraw
|
85
|
-
end
|
86
|
-
|
87
|
-
def post_fullscreen
|
88
|
-
update_cursor(:blank, true)
|
89
|
-
end
|
90
|
-
|
91
|
-
def post_unfullscreen
|
92
|
-
update_cursor(nil, true)
|
93
|
-
update_menu
|
94
|
-
end
|
95
|
-
|
96
|
-
def post_iconify
|
97
|
-
end
|
98
|
-
|
99
|
-
def post_apply_theme
|
100
|
-
recreate_actors
|
101
|
-
end
|
102
|
-
|
103
|
-
def post_move(old_index, index)
|
104
|
-
update_title
|
105
|
-
update_menu
|
106
|
-
|
107
|
-
old_actor = retrieve_actor(old_index)
|
108
|
-
old_actor.hide if old_actor
|
109
|
-
actor = retrieve_actor(index)
|
110
|
-
if actor and !hiding?
|
111
|
-
actor.content.set_size(actor.width, actor.height)
|
112
|
-
actor.show
|
113
|
-
actor.raise_top
|
114
|
-
if old_actor
|
115
|
-
transition = @canvas.slides[index].transition
|
116
|
-
transition_method = "transition_#{transition}"
|
117
|
-
if transition and respond_to?(transition_method, true)
|
118
|
-
send(transition_method, old_actor, actor, old_index, index)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def post_move_in_slide(old_index, index)
|
125
|
-
actor = retrieve_actor(nil, old_index)
|
126
|
-
actor.hide if actor
|
127
|
-
actor = retrieve_actor(nil, index)
|
128
|
-
if actor and !hiding?
|
129
|
-
actor.content.set_size(actor.width, actor.height)
|
130
|
-
actor.show
|
131
|
-
actor.raise_top
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def pre_parse
|
136
|
-
end
|
137
|
-
|
138
|
-
def post_parse
|
139
|
-
clear_button_handler
|
140
|
-
update_title
|
141
|
-
update_menu
|
142
|
-
if @need_reload_theme
|
143
|
-
@need_reload_theme = false
|
144
|
-
reload_theme
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def pre_toggle_index_mode
|
149
|
-
end
|
150
|
-
|
151
|
-
def post_toggle_index_mode
|
152
|
-
recreate_actors
|
153
|
-
end
|
154
|
-
|
155
|
-
def pre_to_pixbuf(slide_size)
|
156
|
-
end
|
157
|
-
|
158
|
-
def to_pixbufing(i)
|
159
|
-
true
|
160
|
-
end
|
161
|
-
|
162
|
-
def post_to_pixbuf(canceled)
|
163
|
-
end
|
164
|
-
|
165
|
-
def index_mode_on
|
166
|
-
keep_cursor(:index)
|
167
|
-
update_cursor(nil, true)
|
168
|
-
end
|
169
|
-
|
170
|
-
def index_mode_off
|
171
|
-
restore_cursor(:index)
|
172
|
-
end
|
173
|
-
|
174
|
-
def toggle_whiteout
|
175
|
-
super
|
176
|
-
if whiteouting?
|
177
|
-
@stage.color = Clutter::Color.parse("white")
|
178
|
-
current_actor.hide
|
179
|
-
else
|
180
|
-
reset_stage_color
|
181
|
-
current_actor.show
|
182
|
-
end
|
183
|
-
redraw
|
184
|
-
end
|
185
|
-
|
186
|
-
def toggle_blackout
|
187
|
-
super
|
188
|
-
if blackouting?
|
189
|
-
@stage.color = Clutter::Color.parse("black")
|
190
|
-
current_actor.hide
|
191
|
-
else
|
192
|
-
reset_stage_color
|
193
|
-
current_actor.show
|
194
|
-
end
|
195
|
-
redraw
|
196
|
-
end
|
197
|
-
|
198
|
-
def display?
|
199
|
-
true
|
200
|
-
end
|
201
|
-
|
202
|
-
def reload_theme(&callback)
|
203
|
-
if @canvas.applying?
|
204
|
-
@need_reload_theme = true
|
205
|
-
else
|
206
|
-
callback ||= Utils.process_pending_events_proc
|
207
|
-
@canvas.activate("ReloadTheme", &callback)
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
def attach_to(window, container=nil)
|
212
|
-
super
|
213
|
-
|
214
|
-
init_menu
|
215
|
-
add_widgets_to_container(@container)
|
216
|
-
widget.show
|
217
|
-
attach_menu(@window)
|
218
|
-
attach_key(@window)
|
219
|
-
end
|
220
|
-
|
221
|
-
def detach
|
222
|
-
detach_key(@window)
|
223
|
-
detach_menu(@window)
|
224
|
-
widget.hide
|
225
|
-
unless @window.destroyed?
|
226
|
-
remove_widgets_from_container(@container)
|
227
|
-
end
|
228
|
-
|
229
|
-
super
|
230
|
-
end
|
231
|
-
|
232
|
-
def reset_adjustment
|
233
|
-
super
|
234
|
-
@actors.each do |slide_actors|
|
235
|
-
slide_actors.each do |actor|
|
236
|
-
actor.x = 0
|
237
|
-
actor.y = 0
|
238
|
-
actor.set_scale(1, 1)
|
239
|
-
actor.set_rotation(Clutter::X_AXIS, 0, 0, 0, 0)
|
240
|
-
actor.set_rotation(Clutter::Y_AXIS, 0, 0, 0, 0)
|
241
|
-
actor.set_rotation(Clutter::Z_AXIS, 0, 0, 0, 0)
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
def cache_all_slides
|
247
|
-
end
|
248
|
-
|
249
|
-
private
|
250
|
-
def add_widgets_to_container(container)
|
251
|
-
container.add(@embed)
|
252
|
-
end
|
253
|
-
|
254
|
-
def remove_widgets_from_container(container)
|
255
|
-
container.remove(@embed)
|
256
|
-
end
|
257
|
-
|
258
|
-
def init_color
|
259
|
-
super
|
260
|
-
init_engine_color
|
261
|
-
end
|
262
|
-
|
263
|
-
def init_dpi
|
264
|
-
@x_dpi = ScreenInfo.screen_x_resolution
|
265
|
-
@y_dpi = ScreenInfo.screen_y_resolution
|
266
|
-
end
|
267
|
-
|
268
|
-
def init_clutter_embed
|
269
|
-
@embed = ClutterGtk::Embed.new
|
270
|
-
@embed.can_focus = true
|
271
|
-
@stage = @embed.stage
|
272
|
-
reset_stage_color
|
273
|
-
set_map
|
274
|
-
set_draw
|
275
|
-
set_configure_event_after
|
276
|
-
|
277
|
-
event_mask = Gdk::EventMask::BUTTON_PRESS_MASK
|
278
|
-
event_mask |= Gdk::EventMask::BUTTON_RELEASE_MASK
|
279
|
-
event_mask |= Gdk::EventMask::BUTTON1_MOTION_MASK
|
280
|
-
event_mask |= Gdk::EventMask::BUTTON2_MOTION_MASK
|
281
|
-
event_mask |= Gdk::EventMask::BUTTON3_MOTION_MASK
|
282
|
-
@embed.add_events(event_mask)
|
283
|
-
set_key_press_event(@embed)
|
284
|
-
set_button_event(@embed)
|
285
|
-
set_motion_notify_event
|
286
|
-
set_scroll_event
|
287
|
-
end
|
288
|
-
|
289
|
-
def reset_stage_color
|
290
|
-
@stage.color = Clutter::Color.parse("black")
|
291
|
-
end
|
292
|
-
|
293
|
-
def depth
|
294
|
-
@embed.window.depth
|
295
|
-
end
|
296
|
-
|
297
|
-
def draw_nth_slide(index=nil, index_in_slide=nil)
|
298
|
-
index ||= @canvas.current_index
|
299
|
-
slide = @canvas.slides[index]
|
300
|
-
if slide
|
301
|
-
old_index_in_slide = slide.drawing_index
|
302
|
-
slide.drawing_index = index_in_slide if index_in_slide
|
303
|
-
begin
|
304
|
-
slide.draw(@canvas, true)
|
305
|
-
slide.draw(@canvas, false)
|
306
|
-
ensure
|
307
|
-
slide.drawing_index = old_index_in_slide
|
308
|
-
end
|
309
|
-
end
|
310
|
-
end
|
311
|
-
|
312
|
-
def set_map
|
313
|
-
@embed.signal_connect("map") do |widget, event|
|
314
|
-
set_drawable(widget.window)
|
315
|
-
false
|
316
|
-
end
|
317
|
-
end
|
318
|
-
|
319
|
-
def set_draw
|
320
|
-
@embed.signal_connect("draw") do |widget, context|
|
321
|
-
reload_source
|
322
|
-
false
|
323
|
-
end
|
324
|
-
end
|
325
|
-
|
326
|
-
def configured(x, y, w, h)
|
327
|
-
super
|
328
|
-
recreate_actors
|
329
|
-
end
|
330
|
-
|
331
|
-
def set_configure_event_after
|
332
|
-
@embed.signal_connect_after("configure_event") do |widget, event|
|
333
|
-
configured_after(widget, event)
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
|
-
def configured_after(widget, event)
|
338
|
-
@real_width = event.width
|
339
|
-
@real_height = event.height
|
340
|
-
@size_dirty = true
|
341
|
-
reload_theme if @drawable
|
342
|
-
false
|
343
|
-
end
|
344
|
-
|
345
|
-
def set_motion_notify_event
|
346
|
-
@embed.signal_connect("motion_notify_event") do |widget, event|
|
347
|
-
call_hook_procs(@motion_notify_hook_procs, event)
|
348
|
-
end
|
349
|
-
|
350
|
-
begin_x = nil
|
351
|
-
begin_y = nil
|
352
|
-
prev_x = nil
|
353
|
-
prev_y = nil
|
354
|
-
start_time = nil
|
355
|
-
handled = false
|
356
|
-
scale = 1.0
|
357
|
-
axis_x = 0.5
|
358
|
-
axis_y = 0.5
|
359
|
-
|
360
|
-
add_button_press_hook do |event|
|
361
|
-
handled = false
|
362
|
-
start_time = event.time
|
363
|
-
begin_x = prev_x = event.x
|
364
|
-
begin_y = prev_y = event.y
|
365
|
-
false
|
366
|
-
end
|
367
|
-
|
368
|
-
add_motion_notify_hook do |event|
|
369
|
-
state = event.state
|
370
|
-
if state.button2_mask?
|
371
|
-
handled = true
|
372
|
-
processed = true
|
373
|
-
x = event.x.to_f
|
374
|
-
y = event.y.to_f
|
375
|
-
w = width.to_f
|
376
|
-
h = height.to_f
|
377
|
-
|
378
|
-
actor = current_actor
|
379
|
-
if state.control_mask?
|
380
|
-
scale += (y - prev_y) / (h / 4)
|
381
|
-
actor.x = (actor.width / 2) * (1 - scale)
|
382
|
-
actor.y = (actor.height / 2) * (1 - scale)
|
383
|
-
actor.set_scale(scale, scale)
|
384
|
-
elsif state.shift_mask?
|
385
|
-
angle_x, = actor.get_rotation(Clutter::X_AXIS)
|
386
|
-
angle_y, = actor.get_rotation(Clutter::Y_AXIS)
|
387
|
-
angle_z, = actor.get_rotation(Clutter::Z_AXIS)
|
388
|
-
|
389
|
-
delta_x = prev_x - x
|
390
|
-
delta_y = y - prev_y
|
391
|
-
if delta_x.abs < 3 or delta_y.abs < 3
|
392
|
-
if delta_y.abs > delta_x.abs
|
393
|
-
angle_x += delta_y
|
394
|
-
else
|
395
|
-
angle_y += delta_x
|
396
|
-
end
|
397
|
-
else
|
398
|
-
delta_z = Math.sqrt(delta_x ** 2 + delta_y ** 2)
|
399
|
-
delta_z *= (delta_x / delta_x) * (delta_y / delta_y)
|
400
|
-
angle_z += delta_z
|
401
|
-
end
|
402
|
-
|
403
|
-
actor.set_rotation(Clutter::X_AXIS, angle_x,
|
404
|
-
0,
|
405
|
-
actor.height * axis_y,
|
406
|
-
0)
|
407
|
-
actor.set_rotation(Clutter::Y_AXIS, angle_y,
|
408
|
-
actor.width * axis_x,
|
409
|
-
0,
|
410
|
-
0)
|
411
|
-
actor.set_rotation(Clutter::Z_AXIS, angle_z,
|
412
|
-
actor.width * axis_x,
|
413
|
-
actor.height * axis_y,
|
414
|
-
0)
|
415
|
-
else
|
416
|
-
processed = false
|
417
|
-
end
|
418
|
-
|
419
|
-
if processed and event.time > start_time + 100
|
420
|
-
start_time = event.time
|
421
|
-
end
|
422
|
-
end
|
423
|
-
|
424
|
-
prev_x = x
|
425
|
-
prev_y = y
|
426
|
-
|
427
|
-
false
|
428
|
-
end
|
429
|
-
|
430
|
-
add_button_release_hook do |event, last_button_press_event|
|
431
|
-
handled
|
432
|
-
end
|
433
|
-
end
|
434
|
-
|
435
|
-
def set_scroll_event
|
436
|
-
@embed.signal_connect("scroll_event") do |widget, event|
|
437
|
-
handled = call_hook_procs(@scroll_hook_procs, event)
|
438
|
-
unless handled
|
439
|
-
handled = true
|
440
|
-
case event.direction
|
441
|
-
when Gdk::ScrollDirection::UP
|
442
|
-
@canvas.activate("PreviousSlide")
|
443
|
-
when Gdk::ScrollDirection::DOWN
|
444
|
-
@canvas.activate("NextSlide")
|
445
|
-
else
|
446
|
-
handled = false
|
447
|
-
end
|
448
|
-
end
|
449
|
-
handled
|
450
|
-
end
|
451
|
-
end
|
452
|
-
|
453
|
-
def retrieve_actor(index=nil, index_in_slide=nil)
|
454
|
-
index ||= index || @canvas.current_index
|
455
|
-
slide_actors = @actors[index]
|
456
|
-
return nil if slide_actors.nil?
|
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]
|
464
|
-
end
|
465
|
-
|
466
|
-
def current_actor
|
467
|
-
retrieve_actor
|
468
|
-
end
|
469
|
-
|
470
|
-
def recreate_actors
|
471
|
-
if @recreate_id
|
472
|
-
GLib::Source.remove(@recreate_id)
|
473
|
-
@recreate_id = nil
|
474
|
-
end
|
475
|
-
|
476
|
-
index = nil
|
477
|
-
index_in_slide = 0
|
478
|
-
@actors = []
|
479
|
-
@stage.remove_all
|
480
|
-
@recreate_id = GLib::Idle.add do
|
481
|
-
i = index || @canvas.current_index
|
482
|
-
slide_actors = @actors[i] || []
|
483
|
-
actor = slide_actors[index_in_slide]
|
484
|
-
slide = @canvas.slides[i]
|
485
|
-
if actor.nil?
|
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)
|
496
|
-
@actors[i] ||= []
|
497
|
-
@actors[i][index_in_slide] = actor
|
498
|
-
@stage.add_child(actor)
|
499
|
-
current_index_in_slide = index_in_slide == slide.drawing_index
|
500
|
-
if index.nil? and current_index_in_slide and !hiding?
|
501
|
-
canvas.set_size(@real_width, @real_height)
|
502
|
-
actor.show
|
503
|
-
actor.raise_top
|
504
|
-
Utils.process_pending_events_proc.call
|
505
|
-
else
|
506
|
-
actor.hide
|
507
|
-
end
|
508
|
-
end
|
509
|
-
|
510
|
-
slide = @canvas.slides[i]
|
511
|
-
if slide and slide.last?(index_in_slide)
|
512
|
-
index = -1 if index.nil?
|
513
|
-
index += 1
|
514
|
-
index_in_slide = 0
|
515
|
-
have_next = index < @canvas.slide_size
|
516
|
-
else
|
517
|
-
index_in_slide += 1
|
518
|
-
have_next = true
|
519
|
-
end
|
520
|
-
|
521
|
-
unless have_next
|
522
|
-
@recreate_id = nil
|
523
|
-
end
|
524
|
-
have_next
|
525
|
-
end
|
526
|
-
end
|
527
|
-
|
528
|
-
def grab
|
529
|
-
@embed.grab_add
|
530
|
-
Gdk.pointer_grab(@embed.window, false,
|
531
|
-
Gdk::EventMask::BUTTON_PRESS_MASK |
|
532
|
-
Gdk::EventMask::BUTTON_RELEASE_MASK |
|
533
|
-
Gdk::EventMask::SCROLL_MASK |
|
534
|
-
Gdk::EventMask::POINTER_MOTION_MASK,
|
535
|
-
nil, nil,
|
536
|
-
Gdk::CURRENT_TIME)
|
537
|
-
end
|
538
|
-
|
539
|
-
def ungrab
|
540
|
-
@embed.grab_remove
|
541
|
-
Gdk.pointer_ungrab(Gdk::CURRENT_TIME)
|
542
|
-
end
|
543
|
-
|
544
|
-
def pointer
|
545
|
-
window, x, y, mask = @embed.window.pointer
|
546
|
-
[x, y, mask]
|
547
|
-
end
|
548
|
-
|
549
|
-
def transition_turn_over(old_actor, actor, old_index, index)
|
550
|
-
old_actor.show
|
551
|
-
old_actor.raise_top
|
552
|
-
|
553
|
-
n = 90
|
554
|
-
if old_index > index
|
555
|
-
angle_sign = -1
|
556
|
-
x = old_actor.width
|
557
|
-
else
|
558
|
-
angle_sign = 1
|
559
|
-
x = 0
|
560
|
-
end
|
561
|
-
GLib::Timeout.add(1000 / n) do
|
562
|
-
angle = (n - 90) * angle_sign
|
563
|
-
old_actor.set_rotation(Clutter::Y_AXIS, angle, x, 0, 0)
|
564
|
-
n -= 1
|
565
|
-
if n.zero?
|
566
|
-
old_actor.hide
|
567
|
-
old_actor.set_rotation(Clutter::Y_AXIS, 0, 0, 0, 0)
|
568
|
-
actor.show
|
569
|
-
end
|
570
|
-
not n.zero?
|
571
|
-
end
|
572
|
-
end
|
573
|
-
|
574
|
-
def transition_small_and_slide_out(old_actor, actor, old_index, index)
|
575
|
-
old_actor.show
|
576
|
-
old_actor.raise_top
|
577
|
-
|
578
|
-
n = 180
|
579
|
-
half = 90
|
580
|
-
scale = 1
|
581
|
-
GLib::Timeout.add(1000 / n) do
|
582
|
-
if n > half
|
583
|
-
old_actor.x = (old_actor.width / 2) * (1 - scale)
|
584
|
-
old_actor.y = (old_actor.height / 2) * (1 - scale)
|
585
|
-
old_actor.set_scale(scale, scale)
|
586
|
-
scale -= 0.5 / half
|
587
|
-
else
|
588
|
-
delta = old_actor.width / half
|
589
|
-
delta *= -1 if old_index < index
|
590
|
-
old_actor.x += delta
|
591
|
-
end
|
592
|
-
n -= 1
|
593
|
-
if n.zero?
|
594
|
-
old_actor.hide
|
595
|
-
old_actor.x = 0
|
596
|
-
old_actor.y = 0
|
597
|
-
old_actor.set_scale(1, 1)
|
598
|
-
actor.show
|
599
|
-
end
|
600
|
-
not n.zero?
|
601
|
-
end
|
602
|
-
end
|
603
|
-
end
|
604
|
-
end
|
605
|
-
end
|
606
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
theme_exit unless display?
|
2
|
-
|
3
|
-
proc_name = "clutter-comment"
|
4
|
-
|
5
|
-
canvas.delete_on_comment_proc_by_name(proc_name)
|
6
|
-
|
7
|
-
theme_exit if @clutter_comment_uninstall
|
8
|
-
|
9
|
-
canvas.on_comment(proc_name) do |comment|
|
10
|
-
stage = canvas.renderer.widget.stage
|
11
|
-
|
12
|
-
color = Clutter::Color.new(rand(256), rand(256), rand(256),
|
13
|
-
128 + rand(128))
|
14
|
-
size = 36 + rand(72)
|
15
|
-
actor = Clutter::Label.new("Sans #{size}", comment, color)
|
16
|
-
actor.x = canvas.width
|
17
|
-
actor.y = (canvas.height / 2.0) * rand
|
18
|
-
actor.show
|
19
|
-
stage.add(actor)
|
20
|
-
|
21
|
-
n = 150 + rand(150)
|
22
|
-
delta = (canvas.width + actor.width) / n.to_f
|
23
|
-
|
24
|
-
do_rotate_x = rand(5).zero?
|
25
|
-
do_rotate_y = rand(5).zero?
|
26
|
-
do_rotate_z = rand(5).zero?
|
27
|
-
do_scale = rand(5).zero?
|
28
|
-
|
29
|
-
x_axis = actor.x
|
30
|
-
y_axis = actor.y - (actor.height * 0.5)
|
31
|
-
if do_rotate_x
|
32
|
-
actor.set_rotation(Clutter::X_AXIS, rand(360), 0, y_axis, 0)
|
33
|
-
end
|
34
|
-
if do_rotate_y
|
35
|
-
actor.set_rotation(Clutter::Y_AXIS, rand(360), x_axis, 0, 0)
|
36
|
-
end
|
37
|
-
if do_rotate_z
|
38
|
-
actor.set_rotation(Clutter::Z_AXIS, rand(360), x_axis, y_axis, 0)
|
39
|
-
end
|
40
|
-
if do_scale
|
41
|
-
x_sign = 1
|
42
|
-
y_sign = 1
|
43
|
-
actor.set_scale(-2 + rand(5), -2 + rand(5))
|
44
|
-
end
|
45
|
-
GLib::Timeout.add(1000 / 50) do
|
46
|
-
actor.raise_top
|
47
|
-
actor.x -= delta
|
48
|
-
|
49
|
-
x_angle, x_x, x_y, x_z = actor.get_rotation(Clutter::X_AXIS)
|
50
|
-
y_angle, y_x, y_y, y_z = actor.get_rotation(Clutter::Y_AXIS)
|
51
|
-
z_angle, z_x, z_y, z_z = actor.get_rotation(Clutter::Z_AXIS)
|
52
|
-
x_angle = (x_angle + rand(5)) % 360
|
53
|
-
y_angle = (y_angle + rand(5)) % 360
|
54
|
-
z_angle = (z_angle + rand(5)) % 360
|
55
|
-
x_axis = actor.x
|
56
|
-
if do_rotate_x
|
57
|
-
actor.set_rotation(Clutter::X_AXIS, x_angle, 0, y_axis, 0)
|
58
|
-
end
|
59
|
-
if do_rotate_y
|
60
|
-
actor.set_rotation(Clutter::Y_AXIS, y_angle, x_axis, 0, 0)
|
61
|
-
end
|
62
|
-
if do_rotate_z
|
63
|
-
actor.set_rotation(Clutter::Z_AXIS, z_angle, x_axis, y_axis, 0)
|
64
|
-
end
|
65
|
-
if do_scale
|
66
|
-
x_scale, y_scale = actor.scale
|
67
|
-
x_sign *= -1 if x_scale.abs > 2
|
68
|
-
y_sign *= -1 if y_scale.abs > 2
|
69
|
-
actor.set_scale(x_scale + (0.1 * x_sign),
|
70
|
-
y_scale + (0.1 * y_sign))
|
71
|
-
end
|
72
|
-
n -= 1
|
73
|
-
stage.remove(actor) if n.zero?
|
74
|
-
not n.zero?
|
75
|
-
end
|
76
|
-
end
|