rabbit 0.9.1 → 0.9.2

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 (48) hide show
  1. data/NEWS.en +40 -1
  2. data/NEWS.ja +40 -1
  3. data/data/rabbit/image/debian-images/bottom.png +0 -0
  4. data/data/rabbit/image/debian-images/debian-images.rb +2 -0
  5. data/data/rabbit/image/debian-images/debian-logo-pink.png +0 -0
  6. data/data/rabbit/image/debian-images/debian-logo.png +0 -0
  7. data/data/rabbit/image/debian-images/debian-whirl.png +0 -0
  8. data/data/rabbit/image/debian-images/item1.png +0 -0
  9. data/data/rabbit/image/debian-images/property.rb +4 -0
  10. data/data/rabbit/image/debian-images/top.png +0 -0
  11. data/data/rabbit/image/ranguba-images/ranguba-bar.png +0 -0
  12. data/data/rabbit/image/ranguba-images/ranguba-bar.svg +153 -0
  13. data/data/rabbit/image/ranguba-images/ranguba-images.rb +0 -0
  14. data/data/rabbit/image/ranguba-images/ranguba-item-mark-mini.png +0 -0
  15. data/data/rabbit/image/ranguba-images/ranguba-item-mark.png +0 -0
  16. data/data/rabbit/image/ranguba-images/ranguba-item-mark.svg +400 -0
  17. data/data/rabbit/image/ranguba-images/ranguba-mark.png +0 -0
  18. data/data/rabbit/image/ranguba-images/ranguba-mark.svg +587 -0
  19. data/lib/rabbit/canvas.rb +2 -2
  20. data/lib/rabbit/dependency-canvas.rb +2 -1
  21. data/lib/rabbit/element/slide.rb +1 -1
  22. data/lib/rabbit/info-window.rb +74 -25
  23. data/lib/rabbit/rabbit.rb +1 -1
  24. data/lib/rabbit/renderer/base.rb +0 -48
  25. data/lib/rabbit/renderer/display/base.rb +10 -1
  26. data/lib/rabbit/renderer/display/clutter-embed.rb +7 -8
  27. data/lib/rabbit/renderer/display/comment-drawing-area.rb +4 -4
  28. data/lib/rabbit/renderer/display/comment.rb +1 -1
  29. data/lib/rabbit/renderer/display/drawing-area-base.rb +14 -27
  30. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +1 -1
  31. data/lib/rabbit/renderer/display/drawing-area-view-only.rb +20 -3
  32. data/lib/rabbit/renderer/display/graffiti.rb +1 -1
  33. data/lib/rabbit/renderer/display/hook-handler.rb +60 -0
  34. data/lib/rabbit/renderer/display/magnifier.rb +1 -1
  35. data/lib/rabbit/renderer/display/scroll-handler.rb +36 -0
  36. data/lib/rabbit/renderer/display/spotlight.rb +1 -1
  37. data/lib/rabbit/renderer/engine/cairo.rb +34 -7
  38. data/lib/rabbit/theme/applier.rb +13 -5
  39. data/lib/rabbit/theme/debian/debian.rb +253 -0
  40. data/lib/rabbit/theme/debian/property.rb +3 -0
  41. data/lib/rabbit/theme/default-slide/default-slide.rb +24 -5
  42. data/lib/rabbit/theme/ranguba/property.rb +3 -0
  43. data/lib/rabbit/theme/ranguba/ranguba.rb +230 -0
  44. data/lib/rabbit/theme/slide-logo/slide-logo.rb +22 -4
  45. data/lib/rabbit/theme/tag/tag.rb +4 -0
  46. data/misc/make-image-sample.rb +1 -0
  47. data/sample/info-window.png +0 -0
  48. metadata +27 -4
data/lib/rabbit/canvas.rb CHANGED
@@ -184,9 +184,9 @@ module Rabbit
184
184
  Front.new(self, public_level)
185
185
  end
186
186
 
187
- def attach_to(frame, window)
187
+ def attach_to(frame, window, container=nil, &block)
188
188
  @frame = frame if frame
189
- @renderer.attach_to(window) if window
189
+ @renderer.attach_to(window, container, &block) if window
190
190
  end
191
191
 
192
192
  def detach
@@ -4,7 +4,8 @@ module Rabbit
4
4
  class DependencyCanvas < Canvas
5
5
  extend Forwardable
6
6
 
7
- def_delegators(:@parent, :theme_name, :allotted_time, :rest_time)
7
+ def_delegators(:@parent,
8
+ :theme_name, :allotted_time, :rest_time, :activate)
8
9
 
9
10
  def initialize(parent, *rest, &block)
10
11
  @parent = parent
@@ -1,5 +1,5 @@
1
1
  require 'rabbit/element/slide-element'
2
- require 'rabbit/element/text-container-element'
2
+ require 'rabbit/element/text-block-element'
3
3
 
4
4
  module Rabbit
5
5
  module Element
@@ -2,15 +2,30 @@ require 'erb'
2
2
 
3
3
  require 'rabbit/dependency-canvas'
4
4
  require 'rabbit/renderer/display/drawing-area-view-only'
5
+ require 'rabbit/renderer/display/hook-handler'
6
+ require 'rabbit/renderer/display/key-handler'
7
+ require 'rabbit/renderer/display/button-handler'
8
+ require 'rabbit/renderer/display/scroll-handler'
9
+ require 'rabbit/renderer/display/menu'
5
10
 
6
11
  module Rabbit
7
12
  class InfoWindow
8
13
  include ERB::Util
9
14
 
15
+ include Renderer::Display::HookHandler
16
+ include Renderer::Display::KeyHandler
17
+ include Renderer::Display::ButtonHandler
18
+ include Renderer::Display::ScrollHandler
19
+ include Renderer::Display::Menu
20
+
10
21
  def initialize(canvas)
11
22
  @canvas = canvas
12
23
  @window = nil
13
24
  @timer_started = false
25
+ init_hook_handler
26
+ init_key_handler
27
+ init_button_handler
28
+ init_scroll_handler
14
29
  end
15
30
 
16
31
  def show(width=nil, height=nil)
@@ -23,15 +38,17 @@ module Rabbit
23
38
 
24
39
  def hide
25
40
  return unless showing?
41
+ detach_menu(@window)
42
+ detach_key(@window)
26
43
  each do |canvas|
27
44
  canvas.detach
28
45
  end
29
46
  @window.signal_handler_disconnect(@window_destroy_id)
30
47
  @window.destroy
31
48
  @window = @window_destroy_id = nil
32
- @hbox = @vbox = nil
49
+ @canvas_widgets = @outer_box = nil
33
50
  @timer_started = false
34
- @previous_canvas = @next_canvas = nil
51
+ @previous_canvas = @current_canvas = @next_canvas = nil
35
52
  end
36
53
 
37
54
  def showing?
@@ -61,6 +78,7 @@ module Rabbit
61
78
  end
62
79
 
63
80
  def init_canvas
81
+ @current_canvas = make_canvas
64
82
  @previous_canvas = make_canvas
65
83
  @next_canvas = make_canvas
66
84
  end
@@ -77,29 +95,57 @@ module Rabbit
77
95
  end
78
96
  @window.title = _("%s: Information window") % @canvas.title
79
97
  @window.set_default_size(width, height) if width and height
80
- init_vbox
81
- @window.add(@vbox)
82
- end
98
+ init_widgets(width, height)
99
+ init_menu
100
+ attach_key(@window)
101
+ attach_menu(@window)
102
+ event_mask = Gdk::Event::BUTTON_PRESS_MASK
103
+ event_mask |= Gdk::Event::BUTTON_RELEASE_MASK
104
+ event_mask |= Gdk::Event::BUTTON1_MOTION_MASK
105
+ event_mask |= Gdk::Event::BUTTON2_MOTION_MASK
106
+ event_mask |= Gdk::Event::BUTTON3_MOTION_MASK
107
+ @window.add_events(event_mask)
108
+ set_button_event(@window)
109
+ set_scroll_event(@window)
110
+ @window.add(@outer_box)
111
+ end
112
+
113
+ def init_widgets(width, height)
114
+ init_timer_label(width * (1.0 / 3.0), height * (1.0 / 3.0))
115
+ @outer_box = Gtk::VBox.new
116
+
117
+ current_box = Gtk::HBox.new
118
+ @current_canvas.attach_to(nil, @window, current_box) do |container, widget|
119
+ widget.set_size_request(width * (2.0 / 3.0), height * (2.0 / 3.0))
120
+ container.pack_start(widget, true, false)
121
+ end
122
+ @outer_box.pack_start(current_box, true, false)
83
123
 
84
- def init_vbox
85
- @vbox = Gtk::VBox.new
86
- init_hbox
87
- init_timer_label
88
- @vbox.pack_start(@hbox, true, true)
89
- @vbox.pack_end(@timer_label, true, true)
90
- @vbox.show
124
+ bottom_box = Gtk::HBox.new
125
+ @previous_canvas.attach_to(nil, @window, bottom_box) do |container, widget|
126
+ widget.set_size_request(width * (1.0 / 3.0), height * (1.0 / 3.0))
127
+ container.pack_start(widget, false, false)
128
+ end
129
+ bottom_box.pack_start(@timer_label, true, false)
130
+ @next_canvas.attach_to(nil, @window, bottom_box) do |container, widget|
131
+ widget.set_size_request(width * (1.0 / 3.0), height * (1.0 / 3.0))
132
+ container.pack_end(widget, false, false)
133
+ end
134
+ @outer_box.pack_end(bottom_box, false, false)
135
+
136
+ @outer_box.show
91
137
  end
92
138
 
93
- def init_hbox
94
- @hbox = Gtk::HBox.new
95
- @previous_canvas.attach_to(nil, @hbox)
96
- @next_canvas.attach_to(nil, @hbox)
97
- @hbox.show
139
+ def init_canvas_widgets
140
+ @canvas_widgets = Gtk::HBox.new
141
+ @current_canvas.attach_to(nil, @window, @canvas_widgets)
142
+ @next_canvas.attach_to(nil, @window, @canvas_widgets)
98
143
  end
99
144
 
100
- def init_timer_label
145
+ def init_timer_label(width, height)
101
146
  @timer_label = Gtk::Label.new
102
- @timer_label.markup = markupped_timer_label
147
+ @timer_label.justify = :center
148
+ @timer_label.markup = markupped_timer_label(width, height)
103
149
  @timer_started = false
104
150
  check_timer
105
151
  end
@@ -113,16 +159,18 @@ module Rabbit
113
159
  end
114
160
  end
115
161
 
116
- def markupped_timer_label
162
+ def markupped_timer_label(width=nil, height=nil)
163
+ width ||= @window.size[0] * (1.0 / 3.0)
164
+ height ||= @window.size[1] * (1.0 / 3.0)
117
165
  attrs = {}
118
- attrs["font_desc"] = ((@window.size[1] * 100) / Pango::SCALE).to_s
166
+ attrs["font_desc"] = ((height * 200) / Pango::SCALE).to_s
119
167
  rest_time = @canvas.rest_time
120
168
  attrs["foreground"] = "red" if rest_time and rest_time < 0
121
169
  "<span #{@canvas.to_attrs(attrs)}>#{h timer_label}</span>"
122
170
  end
123
171
 
124
172
  def timer_label
125
- rest_time = @canvas.rest_time
173
+ rest_time = @canvas.rest_time || @canvas.allotted_time
126
174
  if rest_time
127
175
  "%s%02d:%02d" % Utils.split_number_to_minute_and_second(rest_time)
128
176
  else
@@ -143,8 +191,9 @@ module Rabbit
143
191
 
144
192
  def adjust_slide(base_index=nil)
145
193
  base_index ||= @canvas.current_index
146
- @previous_canvas.move_to_if_can(base_index - 1)
147
- @next_canvas.move_to_if_can(base_index + 1)
194
+ @previous_canvas.move_to_if_can([base_index - 1, 0].max)
195
+ @current_canvas.move_to_if_can(base_index)
196
+ @next_canvas.move_to_if_can([base_index + 1, @canvas.slide_size - 1].min)
148
197
  end
149
198
 
150
199
  def toggle_index_mode
@@ -154,7 +203,7 @@ module Rabbit
154
203
  end
155
204
 
156
205
  def each(&block)
157
- [@previous_canvas, @next_canvas].each(&block)
206
+ [@previous_canvas, @current_canvas, @next_canvas].each(&block)
158
207
  end
159
208
  end
160
209
  end
data/lib/rabbit/rabbit.rb CHANGED
@@ -8,7 +8,7 @@ require "rabbit/gettext"
8
8
 
9
9
  module Rabbit
10
10
 
11
- VERSION = "0.9.1"
11
+ VERSION = "0.9.2"
12
12
 
13
13
  TMP_DIR_NAME = ".tmp"
14
14
 
@@ -65,7 +65,6 @@ module Rabbit
65
65
  @graffiti_line_width = nil
66
66
  @draw_scaled_image = true
67
67
  clean
68
- init_hook_procs
69
68
  init_dpi
70
69
  init_gl_parameters
71
70
  end
@@ -176,46 +175,6 @@ module Rabbit
176
175
  end.compact.join(" ")
177
176
  end
178
177
 
179
- def call_hook_procs(procs, *args)
180
- procs.any? {|proc| proc.call(*args)}
181
- end
182
-
183
- def add_motion_notify_hook(hook=Proc.new)
184
- @motion_notify_hook_procs << hook
185
- end
186
-
187
- def clear_motion_notify_hook
188
- @motion_notify_hook_procs.clear
189
- end
190
-
191
- def add_scroll_hook(hook=Proc.new)
192
- @scroll_hook_procs << hook
193
- end
194
-
195
- def clear_scroll_hook
196
- @scroll_hook_procs.clear
197
- end
198
-
199
- def add_button_press_hook(hook=Proc.new)
200
- @button_press_hook_procs << hook
201
- end
202
-
203
- def clear_button_press_hook
204
- @button_press_hook_procs.clear
205
- end
206
-
207
- def add_button_release_hook(hook=Proc.new)
208
- @button_release_hook_procs << hook
209
- end
210
-
211
- def clear_button_release_hook
212
- @button_release_hook_procs.clear
213
- end
214
-
215
- def clear_hooks
216
- init_hook_procs
217
- end
218
-
219
178
  def clean
220
179
  dirty_count_clean
221
180
  end
@@ -454,13 +413,6 @@ module Rabbit
454
413
  @canvas.logger.warn(msg)
455
414
  end
456
415
 
457
- def init_hook_procs
458
- @motion_notify_hook_procs = []
459
- @scroll_hook_procs = []
460
- @button_press_hook_procs = []
461
- @button_release_hook_procs = []
462
- end
463
-
464
416
  def init_dpi
465
417
  @x_dpi = 72
466
418
  @y_dpi = 72
@@ -1,10 +1,12 @@
1
1
  require "rabbit/renderer/base"
2
+ require "rabbit/renderer/display/hook-handler"
2
3
 
3
4
  module Rabbit
4
5
  module Renderer
5
6
  module Display
6
7
  module Base
7
8
  include Renderer::Base
9
+ include HookHandler
8
10
 
9
11
  def initialize(*args, &block)
10
12
  @drawable = nil
@@ -29,14 +31,21 @@ module Rabbit
29
31
  widget.queue_draw
30
32
  end
31
33
 
32
- def attach_to(window)
34
+ def attach_to(window, container=nil)
33
35
  @window = window
36
+ @container = container || @window
34
37
 
35
38
  set_configure_event
36
39
  end
37
40
 
38
41
  def detach
42
+ if !@window.destroyed? and @configure_signal_id
43
+ @window.signal_handler_disconnect(@configure_signal_id)
44
+ @configure_signal_id = nil
45
+ end
46
+
39
47
  @window = nil
48
+ @container = nil
40
49
  end
41
50
 
42
51
  def toggle_whiteout
@@ -188,11 +188,11 @@ module Rabbit
188
188
  end
189
189
  end
190
190
 
191
- def attach_to(window)
191
+ def attach_to(window, container=nil)
192
192
  super
193
193
 
194
194
  init_menu
195
- add_widget_to_window(@window)
195
+ add_widgets_to_container(@container)
196
196
  widget.show
197
197
  attach_menu(@window)
198
198
  attach_key(@window)
@@ -203,8 +203,7 @@ module Rabbit
203
203
  detach_menu(@window)
204
204
  widget.hide
205
205
  unless @window.destroyed?
206
- remove_widget_from_window(@window)
207
- @window.signal_handler_disconnect(@configure_signal_id)
206
+ remove_widgets_from_container(@container)
208
207
  end
209
208
 
210
209
  super
@@ -297,12 +296,12 @@ module Rabbit
297
296
  end
298
297
 
299
298
  private
300
- def add_widget_to_window(window)
301
- window.add(@embed)
299
+ def add_widgets_to_container(container)
300
+ container.add(@embed)
302
301
  end
303
302
 
304
- def remove_widget_from_window(window)
305
- window.remove(@embed)
303
+ def remove_widgets_from_container(container)
304
+ container.remove(@embed)
306
305
  end
307
306
 
308
307
  def init_dpi
@@ -100,12 +100,12 @@ module Rabbit
100
100
  end
101
101
 
102
102
  private
103
- def add_widget_to_window(window)
104
- window.add(@area)
103
+ def add_widgets_to_container(container)
104
+ container.add(@area)
105
105
  end
106
106
 
107
- def remove_widget_from_window(window)
108
- window.remove(@area)
107
+ def remove_widgets_from_container(container)
108
+ container.remove(@area)
109
109
  end
110
110
 
111
111
  def attach_menu(window)
@@ -73,7 +73,7 @@ module Rabbit
73
73
  end
74
74
 
75
75
  private
76
- def add_widget_to_window(window)
76
+ def add_widgets_to_container(container)
77
77
  super
78
78
  @vbox.pack_end(@comment_log.widget, false, false, 0)
79
79
  init_comment_view_canvas
@@ -8,6 +8,7 @@ require "rabbit/renderer/display/graffiti"
8
8
  require "rabbit/renderer/display/menu"
9
9
  require "rabbit/renderer/display/button-handler"
10
10
  require "rabbit/renderer/display/key-handler"
11
+ require "rabbit/renderer/display/scroll-handler"
11
12
  require "rabbit/renderer/display/info"
12
13
  require "rabbit/renderer/display/spotlight"
13
14
  require "rabbit/renderer/display/magnifier"
@@ -26,6 +27,7 @@ module Rabbit
26
27
  include Gesture
27
28
  include KeyHandler
28
29
  include ButtonHandler
30
+ include ScrollHandler
29
31
  include Info
30
32
  include Spotlight
31
33
  include Magnifier
@@ -195,12 +197,12 @@ module Rabbit
195
197
  end
196
198
  end
197
199
 
198
- def attach_to(window)
200
+ def attach_to(window, container=nil, &block)
199
201
  super
200
202
 
201
203
  init_menu
202
204
  init_gesture_actions
203
- add_widget_to_window(@window)
205
+ add_widgets_to_container(@container, &block)
204
206
  widget.show
205
207
  attach_menu(@window)
206
208
  attach_key(@window)
@@ -211,8 +213,7 @@ module Rabbit
211
213
  detach_menu(@window)
212
214
  widget.hide
213
215
  unless @window.destroyed?
214
- remove_widget_from_window(@window)
215
- @window.signal_handler_disconnect(@configure_signal_id)
216
+ remove_widgets_from_container(@container)
216
217
  end
217
218
 
218
219
  super
@@ -237,18 +238,22 @@ module Rabbit
237
238
  end
238
239
 
239
240
  private
240
- def add_widget_to_window(window)
241
+ def add_widgets_to_container(container)
241
242
  @hbox = Gtk::HBox.new
242
243
  @vbox = Gtk::VBox.new
243
244
  @vbox.pack_start(@area, true, true, 0)
244
245
  @hbox.pack_end(@vbox, true, true, 0)
245
- window.add(@hbox)
246
+ if block_given?
247
+ yield(container, @hbox)
248
+ else
249
+ container.add(@hbox)
250
+ end
246
251
  @hbox.show
247
252
  @vbox.show
248
253
  end
249
254
 
250
- def remove_widget_from_window(window)
251
- window.remove(@hbox)
255
+ def remove_widgets_from_container(container)
256
+ container.remove(@hbox)
252
257
  @hbox = @vbox = nil
253
258
  end
254
259
 
@@ -263,7 +268,7 @@ module Rabbit
263
268
  set_key_press_event(@area)
264
269
  set_button_event(@area)
265
270
  set_motion_notify_event
266
- set_scroll_event
271
+ set_scroll_event(@area)
267
272
  end
268
273
 
269
274
  def mapped(widget)
@@ -365,24 +370,6 @@ module Rabbit
365
370
  false
366
371
  end
367
372
 
368
- def set_scroll_event
369
- @area.signal_connect("scroll_event") do |widget, event|
370
- handled = call_hook_procs(@scroll_hook_procs, event)
371
- unless handled
372
- handled = true
373
- case event.direction
374
- when Gdk::EventScroll::Direction::UP
375
- @canvas.activate("PreviousSlide")
376
- when Gdk::EventScroll::Direction::DOWN
377
- @canvas.activate("NextSlide")
378
- else
379
- handled = false
380
- end
381
- end
382
- handled
383
- end
384
- end
385
-
386
373
  def confirm_dialog(message)
387
374
  flags = Gtk::Dialog::MODAL | Gtk::Dialog::DESTROY_WITH_PARENT
388
375
  dialog_type = Gtk::MessageDialog::INFO