rabbit 2.1.2 → 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +26 -0
  3. data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
  4. data/data/locale/fr/LC_MESSAGES/rabbit.mo +0 -0
  5. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  6. data/doc/_config.yml +2 -3
  7. data/doc/en/development.rd +9 -9
  8. data/doc/en/faq.rd +132 -0
  9. data/doc/en/hiki.hiki +2 -1
  10. data/doc/en/index.rd +19 -29
  11. data/doc/en/install/homebrew.rd +1 -0
  12. data/doc/en/install/windows.rd +6 -3
  13. data/doc/en/news.rd +68 -1
  14. data/doc/en/rd.rd +2 -1
  15. data/doc/en/sample/hiki/rabbit.hiki +2 -1
  16. data/doc/en/usage.rd +4 -0
  17. data/doc/en/usage/platform/os-x.rd +13 -0
  18. data/doc/images/screenshots/en/blue-circle-raw.png +0 -0
  19. data/doc/images/screenshots/en/blue-circle.png +0 -0
  20. data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
  21. data/doc/images/screenshots/en/clear-blue.png +0 -0
  22. data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
  23. data/doc/images/screenshots/en/cozmixng.png +0 -0
  24. data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
  25. data/doc/images/screenshots/en/dark-gradation.png +0 -0
  26. data/doc/images/screenshots/en/day-white-raw.png +0 -0
  27. data/doc/images/screenshots/en/day-white.png +0 -0
  28. data/doc/images/screenshots/en/debian-raw.png +0 -0
  29. data/doc/images/screenshots/en/debian.png +0 -0
  30. data/doc/images/screenshots/en/green-circle-raw.png +0 -0
  31. data/doc/images/screenshots/en/green-circle.png +0 -0
  32. data/doc/images/screenshots/en/night-black-raw.png +0 -0
  33. data/doc/images/screenshots/en/night-black.png +0 -0
  34. data/doc/images/screenshots/en/rabbit-raw.png +0 -0
  35. data/doc/images/screenshots/en/rabbit.png +0 -0
  36. data/doc/images/screenshots/en/ranguba-raw.png +0 -0
  37. data/doc/images/screenshots/en/ranguba.png +0 -0
  38. data/doc/images/screenshots/en/red-frame-raw.png +0 -0
  39. data/doc/images/screenshots/en/red-frame.png +0 -0
  40. data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
  41. data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
  42. data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
  43. data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
  44. data/doc/images/screenshots/ja/blue-circle-raw.png +0 -0
  45. data/doc/images/screenshots/ja/blue-circle.png +0 -0
  46. data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
  47. data/doc/images/screenshots/ja/clear-blue.png +0 -0
  48. data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
  49. data/doc/images/screenshots/ja/cozmixng.png +0 -0
  50. data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
  51. data/doc/images/screenshots/ja/dark-gradation.png +0 -0
  52. data/doc/images/screenshots/ja/day-white-raw.png +0 -0
  53. data/doc/images/screenshots/ja/day-white.png +0 -0
  54. data/doc/images/screenshots/ja/debian-raw.png +0 -0
  55. data/doc/images/screenshots/ja/debian.png +0 -0
  56. data/doc/images/screenshots/ja/green-circle-raw.png +0 -0
  57. data/doc/images/screenshots/ja/green-circle.png +0 -0
  58. data/doc/images/screenshots/ja/night-black-raw.png +0 -0
  59. data/doc/images/screenshots/ja/night-black.png +0 -0
  60. data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
  61. data/doc/images/screenshots/ja/rabbit.png +0 -0
  62. data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
  63. data/doc/images/screenshots/ja/ranguba.png +0 -0
  64. data/doc/images/screenshots/ja/red-frame-raw.png +0 -0
  65. data/doc/images/screenshots/ja/red-frame.png +0 -0
  66. data/doc/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
  67. data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
  68. data/doc/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
  69. data/doc/images/screenshots/ja/rubykaigi2011.png +0 -0
  70. data/doc/ja/hiki.hiki +2 -1
  71. data/doc/ja/install/windows.rd +6 -3
  72. data/doc/ja/news.rd +68 -1
  73. data/doc/ja/rd.rd +2 -1
  74. data/doc/ja/sample/hiki/rabbit.hiki +2 -1
  75. data/lib/rabbit/canvas.rb +1 -5
  76. data/lib/rabbit/command/rabbit.rb +9 -2
  77. data/lib/rabbit/element/container-element.rb +5 -3
  78. data/lib/rabbit/element/slide-element.rb +11 -0
  79. data/lib/rabbit/gtk.rb +25 -0
  80. data/lib/rabbit/image-data-loader.rb +46 -0
  81. data/lib/rabbit/image/base.rb +9 -11
  82. data/lib/rabbit/image/default.rb +1 -2
  83. data/lib/rabbit/image/eps.rb +2 -2
  84. data/lib/rabbit/image/gimp.rb +1 -2
  85. data/lib/rabbit/image/pdf.rb +1 -0
  86. data/lib/rabbit/info-window.rb +62 -21
  87. data/lib/rabbit/logger.rb +20 -4
  88. data/lib/rabbit/logger/gui.rb +5 -8
  89. data/lib/rabbit/logger/stderr.rb +5 -9
  90. data/lib/rabbit/parser/rd.rb +1 -1
  91. data/lib/rabbit/renderer/display/button-handler.rb +2 -2
  92. data/lib/rabbit/renderer/display/drawing-area-base.rb +2 -6
  93. data/lib/rabbit/renderer/display/progress.rb +1 -1
  94. data/lib/rabbit/renderer/engine/cairo.rb +17 -13
  95. data/lib/rabbit/slideshare.rb +1 -1
  96. data/lib/rabbit/source/base.rb +24 -40
  97. data/lib/rabbit/task/slide.rb +1 -1
  98. data/lib/rabbit/theme/applier.rb +8 -3
  99. data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +4 -1
  100. data/lib/rabbit/theme/default-text/default-text.rb +0 -10
  101. data/lib/rabbit/theme/slide-show/slide-show.rb +2 -2
  102. data/lib/rabbit/theme/syntax-highlighting/syntax-highlighting.rb +6 -0
  103. data/lib/rabbit/theme/tag/tag.rb +4 -0
  104. data/lib/rabbit/version.rb +2 -2
  105. data/po/en/rabbit.edit.po +2675 -0
  106. data/po/en/rabbit.po +3 -862
  107. data/po/fr/rabbit.edit.po +2674 -0
  108. data/po/fr/rabbit.po +3 -862
  109. data/po/ja/rabbit.edit.po +2737 -0
  110. data/po/ja/rabbit.po +4 -864
  111. data/sample/image-reflection.rab +12 -0
  112. data/sample/note.rab +31 -0
  113. data/sample/rabbit-slide-show-logo.svg +597 -0
  114. data/test/parser/test-rd.rb +45 -0
  115. data/test/test-source.rb +78 -30
  116. metadata +767 -756
@@ -0,0 +1,46 @@
1
+ # Copyright (C) 2014 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 "gdk_pixbuf2"
18
+
19
+ module Rabbit
20
+ class ImageDataLoader
21
+ attr_reader :width, :height, :pixbuf
22
+ def initialize(data)
23
+ @width = 0
24
+ @height = 0
25
+ @pixbuf = nil
26
+ @data = data
27
+ end
28
+
29
+ def load
30
+ loader = Gdk::PixbufLoader.new
31
+ id = loader.signal_connect("size_prepared") do |l, width, height|
32
+ @width = width
33
+ @height = height
34
+ end
35
+ begin
36
+ loader.last_write(@data)
37
+ rescue Gdk::PixbufError => error
38
+ loader.close rescue Gdk::PixbufError
39
+ raise ImageLoadError.new(error.message)
40
+ end
41
+ loader.signal_handler_disconnect(id)
42
+ @pixbuf = loader.pixbuf
43
+ @pixbuf
44
+ end
45
+ end
46
+ end
@@ -1,6 +1,7 @@
1
1
  require "gdk_pixbuf2"
2
2
 
3
3
  require "rabbit/utils"
4
+ require "rabbit/image-data-loader"
4
5
 
5
6
  module Rabbit
6
7
  module ImageManipulable
@@ -84,20 +85,17 @@ module Rabbit
84
85
  key.to_s.gsub(/-/, "_")
85
86
  end
86
87
 
87
- def load_by_pixbuf_loader(data)
88
- loader = Gdk::PixbufLoader.new
89
- id = loader.signal_connect("size_prepared") do |l, width, height|
90
- @width = width
91
- @height = height
92
- end
88
+ def load_data(data)
89
+ loader = ImageDataLoader.new(data)
93
90
  begin
94
- loader.last_write(data)
95
- rescue Gdk::PixbufError
96
- loader.close rescue Gdk::PixbufError
91
+ loader.load
92
+ rescue ImageLoadError
97
93
  raise ImageLoadError.new("#{@filename}: #{$!.message}")
98
94
  end
99
- loader.signal_handler_disconnect(id)
100
- loader
95
+
96
+ @width = loader.width
97
+ @height = loader.height
98
+ loader.pixbuf
101
99
  end
102
100
  end
103
101
  end
@@ -17,8 +17,7 @@ module Rabbit
17
17
  def update_size
18
18
  File.open(@filename, "rb") do |file|
19
19
  Dir.chdir(File.dirname(@filename)) do
20
- loader = load_by_pixbuf_loader(file.read)
21
- @pixbuf = loader.pixbuf
20
+ @pixbuf = load_data(file.read)
22
21
  end
23
22
  end
24
23
  end
@@ -34,7 +34,7 @@ module Rabbit
34
34
 
35
35
  private
36
36
  def update_size
37
- @pixbuf = load_image.pixbuf
37
+ @pixbuf = load_image
38
38
  end
39
39
 
40
40
  def load_image(width=nil, height=nil)
@@ -43,7 +43,7 @@ module Rabbit
43
43
  rescue EPSCanNotHandleError
44
44
  eps_to_pnm(width, height)
45
45
  end
46
- load_by_pixbuf_loader(data)
46
+ load_data(data)
47
47
  end
48
48
 
49
49
  def eps_to_png(width=nil, height=nil)
@@ -41,8 +41,7 @@ EOC
41
41
  if GIMP_COMMANDS.any? {|gimp| run(gimp, *args); File.exist?(png_path)}
42
42
  png_file.open
43
43
  png_file.binmode
44
- loader = load_by_pixbuf_loader(png_file.read)
45
- @pixbuf = loader.pixbuf
44
+ @pixbuf = load_data(png_file.read)
46
45
  else
47
46
  raise GIMPCanNotHandleError.new("gimp #{args.join(' ')}",
48
47
  GIMP_COMMANDS)
@@ -2,6 +2,7 @@ require "rabbit/utils"
2
2
 
3
3
  Rabbit::Utils.require_safe "poppler"
4
4
 
5
+ require "rabbit/gettext"
5
6
  require "rabbit/image/base"
6
7
 
7
8
  module Rabbit
@@ -1,5 +1,6 @@
1
1
  require 'erb'
2
2
 
3
+ require 'rabbit/gtk'
3
4
  require 'rabbit/dependency-canvas'
4
5
  require 'rabbit/renderer/display/drawing-area-view-only'
5
6
  require 'rabbit/renderer/display/hook-handler'
@@ -22,7 +23,8 @@ module Rabbit
22
23
  def initialize(canvas)
23
24
  @canvas = canvas
24
25
  @window = nil
25
- @timer_started = false
26
+ @timer_id = nil
27
+ @note_area = nil
26
28
  init_hook_handler
27
29
  init_key_handler
28
30
  init_button_handler
@@ -48,7 +50,8 @@ module Rabbit
48
50
  @window.destroy
49
51
  @window = @window_destroy_id = nil
50
52
  @canvas_widgets = @outer_box = nil
51
- @timer_started = false
53
+ GLib::Source.remove(@timer_id) if @timer_id
54
+ @timer_id = nil
52
55
  @previous_canvas = @current_canvas = @next_canvas = nil
53
56
  end
54
57
 
@@ -148,7 +151,7 @@ module Rabbit
148
151
 
149
152
  def init_widgets_on_note_mode(width, height)
150
153
  init_timer_label(width * (1.0 / 5.0), height * (2.0 / 5.0))
151
- init_note_text(width * (5.0 / 5.0), height * (3.0 / 5.0))
154
+ init_note_area
152
155
  @outer_box = Gtk::VBox.new
153
156
 
154
157
  current_box = Gtk::HBox.new
@@ -168,8 +171,8 @@ module Rabbit
168
171
  @outer_box.pack_start(current_box, false, false)
169
172
 
170
173
  bottom_box = Gtk::HBox.new
171
- bottom_box.pack_start(@note_label, false, true, 20)
172
- @outer_box.pack_start(bottom_box, true, false)
174
+ bottom_box.pack_start(@note_area, true, true, 20)
175
+ @outer_box.pack_start(bottom_box, true, true, 20)
173
176
 
174
177
  @outer_box.show
175
178
  end
@@ -184,34 +187,72 @@ module Rabbit
184
187
  @timer_label = Gtk::Label.new
185
188
  @timer_label.justify = :center
186
189
  @timer_label.markup = markupped_timer_label(width, height)
187
- @timer_started = false
188
- check_timer
189
190
  end
190
191
 
191
- def init_note_text(width, height)
192
- @note_label = Gtk::Label.new
193
- @note_label.justify = :left
194
- @note_label.wrap = true
195
- @note_label.markup = markupped_note_text(width, height)
196
- @note_label.set_size_request(width, height)
192
+ def init_note_area
193
+ @note_area = Gtk::DrawingArea.new
194
+ @note_area.signal_connect("expose-event") do |area, event|
195
+ draw_text_as_large_as_possible(area, note_text)
196
+ Gdk::Event::PROPAGATE
197
+ end
197
198
  end
198
199
 
199
200
  def update(index=nil)
200
- check_timer
201
- update_note_text if on_note_mode?
201
+ start_timer if @timer_id.nil?
202
+ @note_area.queue_draw if @note_area
202
203
  adjust_slide(index)
203
204
  end
204
205
 
205
- def update_note_text
206
- @note_label.markup = markupped_note_text
206
+ def note_text
207
+ note = @canvas.current_slide["note"]
208
+ return note if note.nil?
209
+ note.gsub(/\\n/, "\n")
207
210
  end
208
211
 
209
- def check_timer
210
- return if @timer_started
212
+ def draw_text_as_large_as_possible(area, markupped_text)
213
+ return if markupped_text.nil?
214
+
215
+ area_width, area_height = area.window.size
216
+
217
+ context = area.window.create_cairo_context
218
+ layout = context.create_pango_layout
219
+ layout.context.resolution = @canvas.font_resolution
220
+ attributes, text = Pango.parse_markup(markupped_text)
221
+ layout.text = text
222
+ layout.attributes = attributes
223
+ layout.width = area_width * Pango::SCALE
224
+ layout.wrap = :word_char
225
+ set_as_large_as_font_description(layout, area_height)
226
+
227
+ context.update_pango_layout(layout)
228
+ context.show_pango_layout(layout)
229
+ end
211
230
 
212
- Gtk.timeout_add(1000) do
231
+ def set_as_large_as_font_description(layout, max_height)
232
+ family = "Sans"
233
+ size = 14
234
+ last_font_description = nil
235
+ loop do
236
+ font_description = Pango::FontDescription.new("#{family} #{size}")
237
+ layout.font_description = font_description
238
+ layout_height = layout.pixel_size[1]
239
+ break if layout_height > max_height
240
+ last_font_description = font_description
241
+ size = [size * 1.2, size + 5].min
242
+ end
243
+ last_font_description ||= Pango::FontDescription.new("#{family} #{size}")
244
+ layout.font_description = last_font_description
245
+ end
246
+
247
+ def start_timer
248
+ @timer_id = GLib::Timeout.add(1000) do
213
249
  @timer_label.markup = markupped_timer_label if showing?
214
- @timer_started = (showing? and @canvas.rest_time)
250
+ if showing? and @canvas.rest_time
251
+ GLib::Source::CONTINUE
252
+ else
253
+ @timer_id = nil
254
+ GLib::Source::REMOVE
255
+ end
215
256
  end
216
257
  end
217
258
 
data/lib/rabbit/logger.rb CHANGED
@@ -1,19 +1,35 @@
1
+ # Copyright (C) 2004-2014 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
+
1
17
  require "rabbit/utils"
2
18
 
19
+ require "rabbit/logger/stderr"
20
+ require "rabbit/logger/gui"
21
+
3
22
  module Rabbit
4
23
  module Logger
5
24
  extend Utils
6
25
 
7
- dir = ::File.join("rabbit", "logger")
8
- require_files_under_directory_in_load_path(dir)
9
-
10
26
  class << self
11
27
  def types
12
28
  collect_classes_under_module(self)
13
29
  end
14
30
 
15
31
  def default
16
- if Utils.support_console_output? or !Logger.const_defined?(:GUI)
32
+ if Utils.support_console_output?
17
33
  Logger::STDERR.new
18
34
  else
19
35
  Logger::GUI.new
@@ -54,24 +54,21 @@ module Rabbit
54
54
  append("#{prog_name}: ", "prog_name")
55
55
  end
56
56
  end
57
-
57
+
58
58
  def log_message(message)
59
- unless GLib.utf8_validate(message)
60
- message = GLib.filename_to_utf8(message)
61
- end
62
59
  append(message, "message")
63
60
  append("\n")
64
61
  end
65
62
 
66
63
  def append(text, *tags)
67
64
  iter = @buffer.get_iter_at_offset(-1)
68
- @buffer.insert_with_tags(iter, text, *tags)
65
+ @buffer.insert_with_tags(iter, text.encode("UTF-8"), *tags)
69
66
  end
70
67
 
71
68
  def title
72
69
  _("Rabbit Error Dialog")
73
70
  end
74
-
71
+
75
72
  def init_dialog(width=@width, height=@height)
76
73
  flags = 0
77
74
  buttons = [
@@ -93,7 +90,7 @@ module Rabbit
93
90
  true
94
91
  end
95
92
  end
96
-
93
+
97
94
  def set_dialog_response
98
95
  @dialog.signal_connect("response") do |widget, event|
99
96
  case event
@@ -112,7 +109,7 @@ module Rabbit
112
109
  false
113
110
  end
114
111
  end
115
-
112
+
116
113
  def set_dialog_accel_group
117
114
  accel_group = Gtk::AccelGroup.new
118
115
  mod = Gdk::Window::ModifierType.new
@@ -1,4 +1,4 @@
1
- require 'glib2'
1
+ require "glib2"
2
2
 
3
3
  require "rabbit/logger/base"
4
4
 
@@ -9,19 +9,15 @@ module Rabbit
9
9
 
10
10
  private
11
11
  def do_log(severity, prog_name, message)
12
- # TODO: Remove me. It is workaround until Ruby/GLib2 2.0.3 is released.
13
- if message.encoding == Encoding::ASCII_8BIT
14
- message.force_encoding("UTF-8")
15
- end
16
12
  begin
17
13
  message = message.encode("locale")
18
14
  rescue EncodingError
19
15
  format = _("can't convert to current locale from UTF-8: %s")
20
- ::STDERR.puts(format % message)
16
+ $stderr.puts(format % message.encode(format.encoding))
21
17
  end
22
- ::STDERR.puts(format_severity(severity))
23
- ::STDERR.print("[#{prog_name}]: ") if prog_name
24
- ::STDERR.puts(message)
18
+ $stderr.puts(format_severity(severity))
19
+ $stderr.print("[#{prog_name}]: ") if prog_name
20
+ $stderr.puts(message)
25
21
  exit if severity >= Severity::FATAL
26
22
  end
27
23
  end
@@ -23,7 +23,7 @@ module Rabbit
23
23
  if head.respond_to?(:force_encoding)
24
24
  head.force_encoding("ASCII-8BIT")
25
25
  end
26
- /^= /.match(head)
26
+ /^=(?:\s+\S|[^=])/ === head
27
27
  else
28
28
  /\A(?:rd|rab|rbt)\z/i =~ extension
29
29
  end
@@ -129,9 +129,9 @@ module Rabbit
129
129
  else
130
130
  @button_handling = true
131
131
  @button_event_coming = false
132
- Gtk.timeout_add(BUTTON_PRESS_ACCEPTING_TIME) do
132
+ GLib::Timeout.add(BUTTON_PRESS_ACCEPTING_TIME) do
133
133
  if @button_event_coming
134
- Gtk.timeout_add(BUTTON_PRESS_ACCEPTING_TIME) do
134
+ GLib::Timeout.add(BUTTON_PRESS_ACCEPTING_TIME) do
135
135
  call_button_handler
136
136
  @button_handling = false
137
137
  false
@@ -305,12 +305,8 @@ module Rabbit
305
305
 
306
306
  def draw_slide(slide, simulation, &block)
307
307
  super do |*args|
308
- # block.call(*args)
309
- # magnify {block.call(*args)} unless simulation
310
- ## the below codes are workaround for
311
- ## http://redmine.ruby-lang.org/issues/show/2600
312
- yield(*args)
313
- magnify {yield(*args)} unless simulation
308
+ block.call(*args)
309
+ magnify {block.call(*args)} unless simulation
314
310
  end
315
311
  end
316
312
 
@@ -39,7 +39,7 @@ module Rabbit
39
39
 
40
40
  def end_progress
41
41
  @progress.end_progress
42
- Gtk.timeout_add(100) do
42
+ GLib::Timeout.add(100) do
43
43
  @progress.window.hide
44
44
  update_menu
45
45
  false
@@ -1,6 +1,8 @@
1
- require 'cairo'
1
+ require "cairo"
2
+ require "stringio"
2
3
 
3
- require 'rabbit/renderer/kernel'
4
+ require "rabbit/image-data-loader"
5
+ require "rabbit/renderer/kernel"
4
6
 
5
7
  module Cairo
6
8
  class Context
@@ -340,10 +342,10 @@ module Rabbit
340
342
  end
341
343
 
342
344
  def make_layout(text)
343
- attrs, text = Pango.parse_markup(text)
345
+ attributes, text = Pango.parse_markup(text)
344
346
  layout = @context.create_pango_layout
345
347
  layout.text = text
346
- layout.set_attributes(attrs)
348
+ layout.attributes = attributes
347
349
  set_font_resolution(layout.context)
348
350
  @context.update_pango_layout(layout)
349
351
  layout
@@ -488,15 +490,17 @@ module Rabbit
488
490
  return unless params
489
491
 
490
492
  dim = handle.dimensions
491
- surface = ::Cairo::ImageSurface.new(:argb32, width, height)
492
- context = ::Cairo::Context.new(surface)
493
- context.scale(width / dim.width, height / dim.height)
494
- context.render_rsvg_handle(handle)
495
- png = Tempfile.new("rabbit-cairo-svg-renderer")
496
- context.target.write_to_png(png.path)
497
- context.target.finish
498
- pixbuf = Gdk::Pixbuf.new(png.path)
499
- _draw_reflected_pixbuf(pixbuf, x, y, params)
493
+ ::Cairo::ImageSurface.new(:argb32, width, height) do |surface|
494
+ ::Cairo::Context.new(surface) do |context|
495
+ context.scale(width / dim.width, height / dim.height)
496
+ context.render_rsvg_handle(handle)
497
+ png = StringIO.new
498
+ context.target.write_to_png(png)
499
+ loader = ImageDataLoader.new(png.string)
500
+ loader.load
501
+ _draw_reflected_pixbuf(loader.pixbuf, x, y, params)
502
+ end
503
+ end
500
504
  end
501
505
 
502
506
  def set_line_options(params)