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
@@ -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
+