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
@@ -23,7 +23,7 @@ module Rabbit
23
23
  init_drawing_area
24
24
  end
25
25
 
26
- def attach_to(window)
26
+ def attach_to(window, container=nil)
27
27
  init_gl(@area)
28
28
  super
29
29
  end
@@ -8,13 +8,18 @@ module Rabbit
8
8
  include Renderer::Engine.renderer_module
9
9
  include DrawingAreaPrimitive
10
10
 
11
- def attach_to(window)
11
+ def attach_to(window, container=nil, &block)
12
12
  super
13
- @window.add(@area)# if @window # need?
13
+ add_widgets_to_container(@container, &block)
14
+ widget.show
14
15
  end
15
16
 
16
17
  def detach
17
- @window.remove(@area)# if @window # need?
18
+ widget.hide
19
+ unless @window.destroyed?
20
+ remove_widgets_from_container(@container)
21
+ end
22
+
18
23
  super
19
24
  end
20
25
 
@@ -23,6 +28,18 @@ module Rabbit
23
28
  super
24
29
  init_engine_color
25
30
  end
31
+
32
+ def add_widgets_to_container(container, &block)
33
+ if block_given?
34
+ yield(container, @area)
35
+ else
36
+ container.add(@area)
37
+ end
38
+ end
39
+
40
+ def remove_widgets_from_container(container)
41
+ container.remove(@area)
42
+ end
26
43
  end
27
44
  end
28
45
  end
@@ -20,7 +20,7 @@ module Rabbit
20
20
  init_graffiti
21
21
  end
22
22
 
23
- def attach_to(window)
23
+ def attach_to(window, container=nil)
24
24
  super
25
25
  graffiti_mode_action.active = false
26
26
  end
@@ -0,0 +1,60 @@
1
+ module Rabbit
2
+ module Renderer
3
+ module Display
4
+ module HookHandler
5
+ def initialize(*args, &block)
6
+ super
7
+ init_hook_handler
8
+ end
9
+
10
+ def call_hook_procs(procs, *args)
11
+ procs.any? {|proc| proc.call(*args)}
12
+ end
13
+
14
+ def add_motion_notify_hook(hook=Proc.new)
15
+ @motion_notify_hook_procs << hook
16
+ end
17
+
18
+ def clear_motion_notify_hook
19
+ @motion_notify_hook_procs.clear
20
+ end
21
+
22
+ def add_scroll_hook(hook=Proc.new)
23
+ @scroll_hook_procs << hook
24
+ end
25
+
26
+ def clear_scroll_hook
27
+ @scroll_hook_procs.clear
28
+ end
29
+
30
+ def add_button_press_hook(hook=Proc.new)
31
+ @button_press_hook_procs << hook
32
+ end
33
+
34
+ def clear_button_press_hook
35
+ @button_press_hook_procs.clear
36
+ end
37
+
38
+ def add_button_release_hook(hook=Proc.new)
39
+ @button_release_hook_procs << hook
40
+ end
41
+
42
+ def clear_button_release_hook
43
+ @button_release_hook_procs.clear
44
+ end
45
+
46
+ def clear_hooks
47
+ init_hook_handler
48
+ end
49
+
50
+ private
51
+ def init_hook_handler
52
+ @motion_notify_hook_procs = []
53
+ @scroll_hook_procs = []
54
+ @button_press_hook_procs = []
55
+ @button_release_hook_procs = []
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -7,7 +7,7 @@ module Rabbit
7
7
  init_magnifier
8
8
  end
9
9
 
10
- def attach_to(window)
10
+ def attach_to(window, container=nil)
11
11
  super
12
12
  magnifier_action.active = false
13
13
  end
@@ -0,0 +1,36 @@
1
+ require 'gtk2'
2
+
3
+ module Rabbit
4
+ module Renderer
5
+ module Display
6
+ module ScrollHandler
7
+ def initialize(*args, &block)
8
+ super
9
+ init_scroll_handler
10
+ end
11
+
12
+ private
13
+ def init_scroll_handler
14
+ end
15
+
16
+ def set_scroll_event(widget)
17
+ widget.signal_connect("scroll_event") do |widget, event|
18
+ handled = call_hook_procs(@scroll_hook_procs, event)
19
+ unless handled
20
+ handled = true
21
+ case event.direction
22
+ when Gdk::EventScroll::Direction::UP
23
+ @canvas.activate("PreviousSlide")
24
+ when Gdk::EventScroll::Direction::DOWN
25
+ @canvas.activate("NextSlide")
26
+ else
27
+ handled = false
28
+ end
29
+ end
30
+ handled
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -7,7 +7,7 @@ module Rabbit
7
7
  init_spotlight
8
8
  end
9
9
 
10
- def attach_to(window)
10
+ def attach_to(window, container=nil)
11
11
  super
12
12
  spotlight_action.active = false
13
13
  end
@@ -167,7 +167,7 @@ module Rabbit
167
167
  x2, y2 = from_screen(x2, y2)
168
168
  @context.save do
169
169
  set_source(color, params)
170
- set_line_width(get_line_width(params))
170
+ set_line_options(params)
171
171
  @context.new_path
172
172
  @context.move_to(x1, y1)
173
173
  @context.line_to(x2, y2)
@@ -179,7 +179,7 @@ module Rabbit
179
179
  x, y = from_screen(x, y)
180
180
  @context.save do
181
181
  set_source(color, params)
182
- set_line_width(get_line_width(params))
182
+ set_line_options(params)
183
183
  @context.rectangle(x, y, w, h)
184
184
  apply_cairo_action(filled, params)
185
185
  end
@@ -193,7 +193,7 @@ module Rabbit
193
193
 
194
194
  @context.save do
195
195
  set_source(color, params)
196
- set_line_width(get_line_width(params))
196
+ set_line_options(params)
197
197
  @context.new_path
198
198
  @context.rounded_rectangle(x, y, w, h, x_radius, y_radius)
199
199
  apply_cairo_action(filled, params)
@@ -211,7 +211,7 @@ module Rabbit
211
211
  a1, a2 = convert_angle(a1, a2)
212
212
  @context.save do
213
213
  set_source(color, params)
214
- set_line_width(get_line_width(params))
214
+ set_line_options(params)
215
215
  args = [x, y, r, a1, a2]
216
216
  action, = cairo_action(filled, params)
217
217
  @context.move_to(x, y) unless action == :stroke
@@ -229,7 +229,7 @@ module Rabbit
229
229
  return if points.empty?
230
230
  @context.save do
231
231
  set_source(color, params)
232
- set_line_width(get_line_width(params))
232
+ set_line_options(params)
233
233
  @context.move_to(*from_screen(*points.first))
234
234
  points[1..-1].each do |x, y|
235
235
  @context.line_to(*from_screen(x, y))
@@ -243,7 +243,7 @@ module Rabbit
243
243
  x, y = from_screen(x, y)
244
244
  @context.save do
245
245
  set_source(color, params)
246
- set_line_width(get_line_width(params))
246
+ set_line_options(params)
247
247
  @context.move_to(x, y)
248
248
  @context.show_pango_layout(layout)
249
249
  end
@@ -368,11 +368,30 @@ module Rabbit
368
368
  info[:color_stops].each do |offset, r, g, b, a|
369
369
  pattern.add_color_stop_rgba(offset, r, g, b, a)
370
370
  end
371
+ when :pixbuf
372
+ @context.set_source_pixbuf(info[:pixbuf])
373
+ pattern = @context.source
374
+ end
375
+ if pattern
376
+ set_pattern_common_options(pattern, info)
377
+ @context.set_source(pattern)
371
378
  end
372
- @context.set_source(pattern) if pattern
373
379
  !pattern.nil?
374
380
  end
375
381
 
382
+ def set_pattern_common_options(pattern, info)
383
+ extend = info[:extend]
384
+ pattern.extend = extend if extend
385
+ transformations = info[:transformations]
386
+ if transformations
387
+ matrix = ::Cairo::Matrix.identity
388
+ transformations.each do |operation, *args|
389
+ matrix.send("#{operation}!", *args)
390
+ end
391
+ pattern.matrix = matrix
392
+ end
393
+ end
394
+
376
395
  def set_color(color)
377
396
  @context.set_source_rgba(make_color(color).to_a)
378
397
  end
@@ -437,6 +456,14 @@ module Rabbit
437
456
  @context.mask(pattern)
438
457
  end
439
458
  end
459
+
460
+ def set_line_options(params)
461
+ set_line_width(get_line_width(params))
462
+ [:line_cap, :line_join].each do |key|
463
+ value = params[key]
464
+ @context.send("#{key}=", value) if value
465
+ end
466
+ end
440
467
  end
441
468
  end
442
469
  end
@@ -89,28 +89,36 @@ module Rabbit
89
89
  end
90
90
  end
91
91
 
92
- def draw_image_mark(image_name, name=nil)
92
+ def draw_image_mark(image_name, name=nil, options={})
93
93
  return if empty?
94
94
 
95
95
  loader = ImageLoader.new(image_name)
96
96
 
97
97
  width_proc = Proc.new {loader.width}
98
98
  height_proc = Proc.new {loader.height}
99
+ custom_indent = options[:indent]
99
100
  indent_proc = Proc.new do |item, simulation|
100
101
  text_height = item.elements.first.original_height
101
102
  if text_height < loader.height
102
103
  loader.resize(nil, (text_height * 2.0 / 3.0).ceil)
103
104
  end
104
- loader.width * 2.5
105
+ if custom_indent.nil?
106
+ loader.width * 2.5
107
+ elsif custom_indent.respond_to?(:call)
108
+ custom_indent.call(item, loader)
109
+ else
110
+ custom_indent
111
+ end
105
112
  end
106
113
 
107
- draw_mark(indent_proc, width_proc, height_proc, name) do
108
- |item, canvas, x, y, w, h|
114
+ draw_mark(indent_proc,
115
+ width_proc, height_proc,
116
+ name) do |item, canvas, x, y, w, h|
109
117
  x -= loader.width * 0.5
110
118
  loader.draw(canvas, x, y)
111
119
  end
112
120
  end
113
-
121
+
114
122
  def draw_order(indent_width, name=nil, &block)
115
123
  layouts = {}
116
124
  make_order_layout = Proc.new do |item, simulation|
@@ -0,0 +1,253 @@
1
+ # #--------------------------------------
2
+ # # font size setup
3
+ # #--------------------------------------
4
+ # @xxxx_large_font_size = screen_size(6.5 * Pango::SCALE)
5
+ # @xxx_large_font_size = screen_size(5 * Pango::SCALE)
6
+ # @xx_large_font_size = screen_size(4.5.* Pango::SCALE)
7
+ # @x_large_font_size = screen_size(4 * Pango::SCALE)
8
+ # @large_font_size = screen_size(3.5 * Pango::SCALE)
9
+ # @normal_font_size = screen_size(3 * Pango::SCALE)
10
+ # @small_font_size = screen_size(2.8 * Pango::SCALE)
11
+ # @x_small_font_size = screen_size(2.5 * Pango::SCALE)
12
+ # @xx_small_font_size = screen_size(2.2 * Pango::SCALE)
13
+ # @xxx_small_font_size = screen_size(2 * Pango::SCALE)
14
+ # @script_font_size = @xxx_small_font_size
15
+ # @large_script_font_size = @xx_small_font_size
16
+ # @x_large_script_font_size = @xsmall_font_size
17
+ # #--------------------------------------
18
+ # @title_slide_font_size = @xx_large_font_size
19
+ # @title_slide_title_font_size = @xxxx_large_font_size
20
+ # @title_slide_subtitle_font_size = @normal_font_size
21
+ # @title_slide_author_font_size = @xx_large_font_size
22
+ # @title_slide_content_source_font_size = @_small_font_size
23
+ # @title_slide_institution_font_size = @small_font_size
24
+ # @title_slide_place_font_size = @xx_small_font_size
25
+ # @title_slide_date_font_size = @xx_small_font_size
26
+ # @title_slide_note_font_size = @xxx_small_font_size
27
+ #--------------------------------------
28
+ # font family setup
29
+ #--------------------------------------
30
+ # using font name in `fc-list -v`
31
+ @default_font = "Sans"
32
+ @font_family = find_font_family(@default_font)
33
+ @bold_font = "Sans"
34
+ @bold_font_family = find_font_family(@bold_font)
35
+ @monospace_font = "Monospace"
36
+ @monospace_font_family = find_font_family(@monospace_font)
37
+
38
+ #--------------------------------------
39
+ # using default
40
+ #--------------------------------------
41
+ add_image_path("debian-images")
42
+ #include_theme("default")
43
+ # not need slide-number...
44
+ include_theme("default-icon")
45
+ include_theme("default-title-text")
46
+ include_theme("default-text")
47
+ include_theme("default-title-slide")
48
+ include_theme("default-slide")
49
+ include_theme("default-item-mark")
50
+ include_theme("default-method-list")
51
+ include_theme("default-preformatted")
52
+ include_theme("default-block-quote")
53
+ include_theme("default-foot-text")
54
+ include_theme("default-description")
55
+ include_theme("image")
56
+ include_theme("table")
57
+ include_theme("newline-in-slides")
58
+ include_theme("per-slide-background-color")
59
+ include_theme("background-image-toolkit")
60
+ include_theme("per-slide-background-image")
61
+ include_theme("body-background-image")
62
+ include_theme("tag")
63
+
64
+ @preformatted_frame_color = "#242424"
65
+ @preformatted_frame_width = 0.5
66
+ @preformatted_fill_color = "#fff"
67
+ @preformatted_shadow_color = "#242424"
68
+ @centering_preformatted_block = true
69
+ @description_term_line_color ||= "#ff9900"
70
+
71
+
72
+ #--------------------------------------
73
+ # title style changed
74
+ #--------------------------------------
75
+ @title_background_image = "debian-logo-pink.png"
76
+ include_theme("title-background-image")
77
+ match(TitleSlide) do |contents|
78
+ contents.prop_set("style", "normal")
79
+ end
80
+ match(TitleSlide, ContentSource) do |sources|
81
+ sources.margin_bottom = 0
82
+ end
83
+ match(TitleSlide, Date) do |dates|
84
+ dates.margin_top = @space
85
+ end
86
+ match(TitleSlide, Place) do |places|
87
+ end
88
+ #--------------------------------------
89
+ # title logo position changed
90
+ #--------------------------------------
91
+ @title_logo ||= "debian-whirl.png"
92
+ logo_loader = ImageLoader.new(find_file(@title_logo))
93
+ title_logo = Proc.new do |slide, canvas, x, y, w, h, simulation|
94
+ unless simulation
95
+ draw_x = canvas.width - logo_loader.width
96
+ draw_y = canvas.height - logo_loader.height
97
+ logo_loader.draw(canvas, draw_x, draw_y)
98
+ end
99
+ [x, y, w, h]
100
+ end
101
+ match(TitleSlide) do |slides|
102
+ name2 = "title-logo"
103
+ slides.delete_pre_draw_proc_by_name(name2)
104
+ slides.add_pre_draw_proc(name2, &title_logo)
105
+ end
106
+
107
+ ## header/footer settings
108
+ # image loader
109
+ @slide_header ||= "top.png"
110
+ @slide_footer ||= "bottom.png"
111
+ @slide_banner ||= "debian-logo.png"
112
+ # Headline Settings
113
+ loader_head = ImageLoader.new(find_file(@slide_header))
114
+ match(Slide, HeadLine) do |heads|
115
+ heads.each do |head|
116
+ head.add_pre_draw_proc("header_bg") do |canvas, x, y, w, h, simulation|
117
+ unless simulation
118
+ loader_head.resize(canvas.width, nil)
119
+ loader_head.draw(canvas,
120
+ x + w - canvas.width + @margin_left + @margin_right, 0)
121
+ end
122
+ [x, y, w, h]
123
+ end
124
+ end
125
+ name = "head-line"
126
+ delete_post_draw_proc_by_name(name)
127
+ heads.margin_left = (canvas.width + @margin_left + @margin_right)/6.0
128
+ heads.margin_right = @margin_right
129
+ heads.margin_top = @margin_top * 1.3
130
+ heads.prop_set("size", @xx_large_font_size)
131
+ heads.prop_set("foreground", "#fff")
132
+ loader_head.resize(canvas.width, nil)
133
+ static_y = loader_head.height - @margin_top
134
+ original_h = nil
135
+ heads.add_pre_draw_proc do |head, canvas, x, y, w, h, simulation|
136
+ original_h = h
137
+ [x, y, w, h]
138
+ end
139
+ heads.add_post_draw_proc do |head, canvas, x, y, w, h, simulation|
140
+ [x, static_y, w, original_h - static_y]
141
+ end
142
+ end
143
+ # Slide number settings
144
+ @slide_number_props = {
145
+ "size" => @x_small_font_size,
146
+ "font_family" => @bold_font
147
+ }
148
+ @slide_number_color = "#fff"
149
+ match(Slide) do |slides|
150
+ break if @slide_number_uninstall
151
+ unless @not_use_slide_number
152
+ slides.add_post_draw_proc("slide_number") do |slide, canvas, x, y, w, h, simulation|
153
+ unless simulation
154
+ text = Text.new("#{canvas.current_index}/#{canvas.slide_size - 1}")
155
+ text.font @slide_number_props
156
+ text.align = Pango::Layout::ALIGN_RIGHT
157
+ text.compile(canvas, x, y, w, h)
158
+ layout = text.layout
159
+ layout.set_width(w * Pango::SCALE)
160
+ num_y = @margin_top
161
+ canvas.draw_layout(text.layout, x, num_y, @slide_number_color)
162
+ end
163
+ [x, y, w, h]
164
+ end
165
+ end
166
+ end
167
+ # Footer settings
168
+ loader_foot = ImageLoader.new(find_file(@slide_footer))
169
+ loader_banner = ImageLoader.new(find_file(@slide_banner))
170
+ match(Slide) do |slides|
171
+ slides.each do |slide|
172
+ slide.add_post_draw_proc("footer") do |canvas, x, y, w, h, simulation|
173
+ unless simulation
174
+ footer_height = canvas.height/26.0 + screen_y(1) * 0.2
175
+ loader_foot.resize(canvas.width, footer_height)
176
+ loader_foot.draw(canvas, 0, canvas.height - footer_height)
177
+ banner_height = canvas.height/26.0
178
+ loader_banner.resize(nil, banner_height)
179
+ banner_pos_x = canvas.width - loader_banner.width
180
+ banner_pos_y = canvas.height - loader_banner.height - footer_height
181
+ loader_banner.draw(canvas, banner_pos_x, banner_pos_y)
182
+ end
183
+ [x, y, w, h]
184
+ end
185
+ end
186
+ end
187
+
188
+ # item setup need update!!
189
+ slide_body = [Slide, Body]
190
+ item_list_item = [ItemList, ItemListItem]
191
+ match(*(slide_body + (item_list_item * 1))) do |items|
192
+ name = "item1"
193
+ items.delete_pre_draw_proc_by_name(name)
194
+ items.delete_post_draw_proc_by_name(name)
195
+ draw_image_mark(items, "item1.png", name)
196
+ end
197
+
198
+ match(*(slide_body + (item_list_item * 2))) do |items|
199
+ name = "item2"
200
+ items.delete_pre_draw_proc_by_name(name)
201
+ items.delete_post_draw_proc_by_name(name)
202
+ draw_image_mark(items, "item1.png", name)
203
+ end
204
+
205
+ match(*(slide_body + (item_list_item * 3))) do |items|
206
+ name = "item3"
207
+ items.delete_pre_draw_proc_by_name(name)
208
+ items.delete_post_draw_proc_by_name(name)
209
+ draw_image_mark(items, "item1.png", name)
210
+ end
211
+
212
+ enum_list_item = [EnumList, EnumListItem]
213
+ match(*(slide_body + enum_list_item + item_list_item)) do |items|
214
+ name = "enum-item1"
215
+ items.delete_pre_draw_proc_by_name(name)
216
+ items.delete_post_draw_proc_by_name(name)
217
+ draw_image_mark(items, "item1.png", name)
218
+ end
219
+
220
+ match(*(slide_body + enum_list_item + (item_list_item * 2))) do |items|
221
+ name = "enum-item2"
222
+ items.delete_pre_draw_proc_by_name(name)
223
+ items.delete_post_draw_proc_by_name(name)
224
+ draw_image_mark(items, "item1.png", name)
225
+ end
226
+
227
+ # text changed
228
+ match("**", ReferText) do |texts|
229
+ texts.prop_set("underline", "none")
230
+ texts.prop_set("foreground", "blue")
231
+ end
232
+
233
+ # �ⶶ�᥽�å�
234
+ @lightning_talk_proc_name = "lightning-debian"
235
+ @lightning_talk_as_large_as_possible = true
236
+ include_theme("title-on-image-toolkit")
237
+ include_theme("lightning-talk-toolkit")
238
+ match(Slide) do |slides|
239
+ slides.each do |slide|
240
+ slide.title_on_image if slide.title_on_image?
241
+ end
242
+ end
243
+ match(Slide) do |slides|
244
+ slides.each do |slide|
245
+ if slide.lightning_talk?
246
+ # reset header.margin_left
247
+ slide.headline.margin_left = @margin_left
248
+ slide.lightning_talk
249
+ end
250
+ end
251
+ end
252
+
253
+