rabbit 2.1.2 → 2.1.3

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 (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)