rabbit 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
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