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.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +31 -0
  3. data/Rakefile +51 -73
  4. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  5. data/doc/en/how-to-make/markdown.md +28 -2
  6. data/doc/en/how-to-make/rd.rd +28 -2
  7. data/doc/en/install/homebrew.rd +0 -15
  8. data/doc/en/news.rd +67 -0
  9. data/doc/en/sample/hiki/rabbit.hiki +1 -1
  10. data/doc/en/sample/markdown/rabbit.md +1 -1
  11. data/doc/en/sample/rd/rabbit.rd +1 -1
  12. data/doc/en/usage/rabbit-slide.rd +1 -1
  13. data/doc/en/usage/rabbit.rd +1 -1
  14. data/doc/ja/how-to-make/markdown.md +25 -5
  15. data/doc/ja/how-to-make/rd.rd +25 -5
  16. data/doc/ja/install/homebrew.rd +0 -15
  17. data/doc/ja/news.rd +67 -0
  18. data/doc/ja/usage/rabbit.rd +1 -1
  19. data/lib/rabbit/action.rb +1 -23
  20. data/lib/rabbit/canvas.rb +2 -10
  21. data/lib/rabbit/command/rabbit-slide.rb +1 -1
  22. data/lib/rabbit/command/rabbit.rb +6 -4
  23. data/lib/rabbit/cursor-manager.rb +5 -5
  24. data/lib/rabbit/element/text.rb +66 -0
  25. data/lib/rabbit/error.rb +9 -1
  26. data/lib/rabbit/frame.rb +22 -2
  27. data/lib/rabbit/front.rb +1 -1
  28. data/lib/rabbit/gesture/handler.rb +5 -8
  29. data/lib/rabbit/gtk.rb +44 -2
  30. data/lib/rabbit/info-window.rb +16 -2
  31. data/lib/rabbit/menu.rb +1 -3
  32. data/lib/rabbit/parser/ext/charty.rb +9 -0
  33. data/lib/rabbit/parser/markdown/converter.rb +3 -3
  34. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +0 -12
  35. data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +23 -0
  36. data/lib/rabbit/parser/wiki/output.rb +0 -6
  37. data/lib/rabbit/renderer/base.rb +1 -9
  38. data/lib/rabbit/renderer/display/base.rb +7 -5
  39. data/lib/rabbit/renderer/display/button-handler.rb +25 -10
  40. data/lib/rabbit/renderer/display/cursor.rb +18 -2
  41. data/lib/rabbit/renderer/display/drawing-area-base.rb +23 -7
  42. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +35 -20
  43. data/lib/rabbit/renderer/display/gesture.rb +17 -1
  44. data/lib/rabbit/renderer/engine/cairo.rb +27 -13
  45. data/lib/rabbit/renderer/gl.rb +0 -81
  46. data/lib/rabbit/renderer/kernel.rb +0 -50
  47. data/lib/rabbit/renderer/offscreen.rb +1 -6
  48. data/lib/rabbit/renderer/printer.rb +2 -8
  49. data/lib/rabbit/renderer/screen.rb +6 -7
  50. data/lib/rabbit/source/argf.rb +17 -1
  51. data/lib/rabbit/source/base.rb +35 -10
  52. data/lib/rabbit/source/file.rb +17 -1
  53. data/lib/rabbit/source/uri.rb +17 -1
  54. data/lib/rabbit/theme/dark-gradation/dark-gradation.rb +2 -2
  55. data/lib/rabbit/theme/default-comment/default-comment.rb +1 -5
  56. data/lib/rabbit/theme/image-slide-number/property.rb +1 -1
  57. data/lib/rabbit/theme/title-background-image/title-background-image.rb +2 -2
  58. data/lib/rabbit/trackball.rb +21 -21
  59. data/lib/rabbit/utils.rb +5 -45
  60. data/lib/rabbit/version.rb +1 -1
  61. data/lib/rabbit/video-window.rb +6 -2
  62. data/po/en/rabbit.edit.po +24 -38
  63. data/po/en/rabbit.po +9 -21
  64. data/po/fr/rabbit.edit.po +24 -38
  65. data/po/fr/rabbit.po +9 -21
  66. data/po/ja/rabbit.edit.po +56 -58
  67. data/po/ja/rabbit.po +12 -21
  68. data/rabbit.gemspec +11 -14
  69. data/sample/gl-sample.rd +2 -4
  70. data/sample/rabbit/theme/gl-sample/gl-sample.rb +1 -1
  71. data/sample/rabbit-en.hiki +1 -1
  72. data/sample/rabbit-en.md +1 -1
  73. data/sample/rabbit-en.rd +1 -13
  74. data/sample/rabbit.rd +1 -13
  75. data/test/helper.rb +1 -2
  76. data/test/parser/test-markdown.rb +4 -3
  77. data/test/parser/test-rd.rb +3 -3
  78. data/test/parser/test-wiki.rb +2 -2
  79. data/test/test-readme-parser.rb +15 -12
  80. data/test/test-source.rb +2 -2
  81. metadata +35 -122
  82. data/doc/images/screenshots/en/blue-circle-raw.png +0 -0
  83. data/doc/images/screenshots/en/blue-circle.png +0 -0
  84. data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
  85. data/doc/images/screenshots/en/clear-blue.png +0 -0
  86. data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
  87. data/doc/images/screenshots/en/cozmixng.png +0 -0
  88. data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
  89. data/doc/images/screenshots/en/dark-gradation.png +0 -0
  90. data/doc/images/screenshots/en/day-white-raw.png +0 -0
  91. data/doc/images/screenshots/en/day-white.png +0 -0
  92. data/doc/images/screenshots/en/debian-raw.png +0 -0
  93. data/doc/images/screenshots/en/debian.png +0 -0
  94. data/doc/images/screenshots/en/green-circle-raw.png +0 -0
  95. data/doc/images/screenshots/en/green-circle.png +0 -0
  96. data/doc/images/screenshots/en/night-black-raw.png +0 -0
  97. data/doc/images/screenshots/en/night-black.png +0 -0
  98. data/doc/images/screenshots/en/rabbit-raw.png +0 -0
  99. data/doc/images/screenshots/en/rabbit.png +0 -0
  100. data/doc/images/screenshots/en/ranguba-raw.png +0 -0
  101. data/doc/images/screenshots/en/ranguba.png +0 -0
  102. data/doc/images/screenshots/en/red-frame-raw.png +0 -0
  103. data/doc/images/screenshots/en/red-frame.png +0 -0
  104. data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
  105. data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
  106. data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
  107. data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
  108. data/doc/images/screenshots/ja/blue-circle-raw.png +0 -0
  109. data/doc/images/screenshots/ja/blue-circle.png +0 -0
  110. data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
  111. data/doc/images/screenshots/ja/clear-blue.png +0 -0
  112. data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
  113. data/doc/images/screenshots/ja/cozmixng.png +0 -0
  114. data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
  115. data/doc/images/screenshots/ja/dark-gradation.png +0 -0
  116. data/doc/images/screenshots/ja/day-white-raw.png +0 -0
  117. data/doc/images/screenshots/ja/day-white.png +0 -0
  118. data/doc/images/screenshots/ja/debian-raw.png +0 -0
  119. data/doc/images/screenshots/ja/debian.png +0 -0
  120. data/doc/images/screenshots/ja/green-circle-raw.png +0 -0
  121. data/doc/images/screenshots/ja/green-circle.png +0 -0
  122. data/doc/images/screenshots/ja/night-black-raw.png +0 -0
  123. data/doc/images/screenshots/ja/night-black.png +0 -0
  124. data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
  125. data/doc/images/screenshots/ja/rabbit.png +0 -0
  126. data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
  127. data/doc/images/screenshots/ja/ranguba.png +0 -0
  128. data/doc/images/screenshots/ja/red-frame-raw.png +0 -0
  129. data/doc/images/screenshots/ja/red-frame.png +0 -0
  130. data/doc/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
  131. data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
  132. data/doc/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
  133. data/doc/images/screenshots/ja/rubykaigi2011.png +0 -0
  134. data/lib/rabbit/parser/ext/emacs.rb +0 -121
  135. data/lib/rabbit/renderer/display/clutter-embed.rb +0 -606
  136. data/lib/rabbit/theme/clutter-comment/clutter-comment.rb +0 -76
  137. 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
@@ -1,3 +0,0 @@
1
- @category = N_("Comment")
2
- @title = N_("Clutter Comment")
3
- @description = N_("Show comment as a rolling Clutter actor.")