rabbit 3.0.0 → 3.0.1

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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
  3. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  4. data/doc/_config.yml +2 -2
  5. data/doc/en/faq.rd +4 -2
  6. data/doc/en/news.rd +91 -0
  7. data/doc/en/sample/hiki/rabbit.hiki +0 -4
  8. data/doc/en/sample/rd/rabbit.rd +0 -4
  9. data/doc/en/usage/rabbit-slide.rd +3 -3
  10. data/doc/index.html.en +1 -1
  11. data/doc/ja/faq.rd +2 -0
  12. data/doc/ja/news.rd +90 -0
  13. data/doc/ja/sample/hiki/rabbit.hiki +0 -4
  14. data/doc/ja/sample/rd/rabbit.rd +0 -4
  15. data/doc/ja/usage/rabbit-slide.rd +3 -3
  16. data/doc/ja/users.rd +7 -0
  17. data/lib/rabbit/action/toggle.rb +7 -0
  18. data/lib/rabbit/author-configuration.rb +3 -4
  19. data/lib/rabbit/canvas.rb +11 -1
  20. data/lib/rabbit/command/rabbit-slide.rb +59 -1
  21. data/lib/rabbit/command/rabbit-slide.ui +127 -49
  22. data/lib/rabbit/command/rabbit.rb +5 -9
  23. data/lib/rabbit/element/image.rb +78 -94
  24. data/lib/rabbit/element/video.rb +3 -11
  25. data/lib/rabbit/error.rb +2 -2
  26. data/lib/rabbit/frame.rb +102 -4
  27. data/lib/rabbit/gem-pusher.rb +28 -6
  28. data/lib/rabbit/image/base.rb +97 -26
  29. data/lib/rabbit/image/dia.rb +21 -6
  30. data/lib/rabbit/image/pdf.rb +1 -4
  31. data/lib/rabbit/image/svg.rb +1 -4
  32. data/lib/rabbit/image.rb +3 -4
  33. data/lib/rabbit/info-window.rb +106 -80
  34. data/lib/rabbit/keys.rb +6 -0
  35. data/lib/rabbit/menu.rb +2 -0
  36. data/lib/rabbit/parser/ext/charty.rb +58 -0
  37. data/lib/rabbit/parser/ext/image.rb +2 -1
  38. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +13 -5
  39. data/lib/rabbit/progress.rb +1 -1
  40. data/lib/rabbit/properties.rb +141 -0
  41. data/lib/rabbit/rabbit.rb +3 -1
  42. data/lib/rabbit/relative-size.rb +28 -0
  43. data/lib/rabbit/renderer/base.rb +6 -0
  44. data/lib/rabbit/renderer/display/drawing-area-base.rb +0 -1
  45. data/lib/rabbit/renderer/display/drawing-area-primitive.rb +1 -0
  46. data/lib/rabbit/renderer/display/info.rb +6 -1
  47. data/lib/rabbit/renderer/display/key-handler.rb +27 -2
  48. data/lib/rabbit/renderer/engine/cairo.rb +24 -3
  49. data/lib/rabbit/renderer/screen.rb +0 -1
  50. data/lib/rabbit/slide-configuration.rb +12 -8
  51. data/lib/rabbit/task/slide.rb +3 -3
  52. data/lib/rabbit/theme/clear-blue/clear-blue.rb +3 -1
  53. data/lib/rabbit/theme/edge-info-toolkit/edge-info-toolkit.rb +12 -2
  54. data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +1 -1
  55. data/lib/rabbit/theme/slide-footer-info/slide-footer-info.rb +2 -0
  56. data/lib/rabbit/theme/tag/tag.rb +9 -2
  57. data/lib/rabbit/theme-configuration.rb +3 -4
  58. data/lib/rabbit/version.rb +1 -1
  59. data/lib/rabbit/video-window.rb +14 -3
  60. data/lib/rabbit/yaml-loader.rb +39 -0
  61. data/po/en/rabbit.edit.po +82 -64
  62. data/po/en/rabbit.po +16 -2
  63. data/po/fr/rabbit.edit.po +81 -63
  64. data/po/fr/rabbit.po +15 -1
  65. data/po/ja/rabbit.edit.po +108 -65
  66. data/po/ja/rabbit.po +19 -3
  67. data/sample/can_rabbit.rd +0 -24
  68. data/sample/rabbit-en.hiki +0 -4
  69. data/sample/rabbit-en.rd +0 -4
  70. data/sample/rabbit.hiki +0 -4
  71. data/sample/rabbit.rd +0 -4
  72. data/test/test-slide-configuration.rb +3 -2
  73. metadata +27 -24
@@ -1,29 +1,36 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <!-- Generated with glade 3.22.1 -->
2
+ <!-- Generated with glade 3.38.2 -->
3
3
  <interface>
4
4
  <requires lib="gtk+" version="3.20"/>
5
+ <object class="GtkAdjustment" id="slide-height-adjustment">
6
+ <property name="upper">4000</property>
7
+ <property name="step-increment">10</property>
8
+ <property name="page-increment">100</property>
9
+ </object>
10
+ <object class="GtkAdjustment" id="slide-width-adjustment">
11
+ <property name="upper">4000</property>
12
+ <property name="step-increment">10</property>
13
+ <property name="page-increment">100</property>
14
+ </object>
5
15
  <object class="GtkDialog" id="dialog">
6
- <property name="can_focus">False</property>
7
- <property name="type_hint">dialog</property>
8
- <child>
9
- <placeholder/>
10
- </child>
16
+ <property name="can-focus">False</property>
17
+ <property name="type-hint">dialog</property>
11
18
  <child internal-child="vbox">
12
19
  <object class="GtkBox">
13
- <property name="can_focus">False</property>
20
+ <property name="can-focus">False</property>
14
21
  <property name="orientation">vertical</property>
15
22
  <property name="spacing">2</property>
16
23
  <child internal-child="action_area">
17
24
  <object class="GtkButtonBox">
18
- <property name="can_focus">False</property>
19
- <property name="layout_style">end</property>
25
+ <property name="can-focus">False</property>
26
+ <property name="layout-style">end</property>
20
27
  <child>
21
28
  <object class="GtkButton" id="cancel-button">
22
29
  <property name="label">gtk-cancel</property>
23
30
  <property name="visible">True</property>
24
- <property name="can_focus">True</property>
25
- <property name="receives_default">True</property>
26
- <property name="use_stock">True</property>
31
+ <property name="can-focus">True</property>
32
+ <property name="receives-default">True</property>
33
+ <property name="use-stock">True</property>
27
34
  </object>
28
35
  <packing>
29
36
  <property name="expand">True</property>
@@ -35,9 +42,9 @@
35
42
  <object class="GtkButton" id="apply-button">
36
43
  <property name="label">gtk-apply</property>
37
44
  <property name="visible">True</property>
38
- <property name="can_focus">True</property>
39
- <property name="receives_default">True</property>
40
- <property name="use_stock">True</property>
45
+ <property name="can-focus">True</property>
46
+ <property name="receives-default">True</property>
47
+ <property name="use-stock">True</property>
41
48
  </object>
42
49
  <packing>
43
50
  <property name="expand">True</property>
@@ -55,90 +62,153 @@
55
62
  <child>
56
63
  <object class="GtkBox">
57
64
  <property name="visible">True</property>
58
- <property name="can_focus">False</property>
65
+ <property name="can-focus">False</property>
59
66
  <property name="orientation">vertical</property>
60
67
  <child>
61
68
  <object class="GtkFrame">
62
69
  <property name="visible">True</property>
63
- <property name="can_focus">False</property>
64
- <property name="label_xalign">0</property>
65
- <property name="shadow_type">none</property>
70
+ <property name="can-focus">False</property>
71
+ <property name="label-xalign">0</property>
72
+ <property name="shadow-type">none</property>
66
73
  <child>
67
74
  <object class="GtkAlignment">
68
75
  <property name="visible">True</property>
69
- <property name="can_focus">False</property>
70
- <property name="left_padding">12</property>
76
+ <property name="can-focus">False</property>
77
+ <property name="left-padding">12</property>
71
78
  <child>
79
+ <!-- n-columns=3 n-rows=5 -->
72
80
  <object class="GtkGrid">
73
81
  <property name="visible">True</property>
74
- <property name="can_focus">False</property>
82
+ <property name="can-focus">False</property>
75
83
  <child>
76
84
  <object class="GtkLabel">
77
85
  <property name="visible">True</property>
78
- <property name="can_focus">False</property>
86
+ <property name="can-focus">False</property>
79
87
  <property name="halign">end</property>
80
88
  <property name="label" translatable="yes">ID:</property>
81
89
  </object>
82
90
  <packing>
83
- <property name="left_attach">0</property>
84
- <property name="top_attach">0</property>
91
+ <property name="left-attach">0</property>
92
+ <property name="top-attach">0</property>
85
93
  </packing>
86
94
  </child>
87
95
  <child>
88
- <object class="GtkEntry" id="slide-id">
96
+ <object class="GtkLabel">
89
97
  <property name="visible">True</property>
90
- <property name="can_focus">True</property>
91
- <property name="placeholder_text" translatable="yes">rubykaigi2012</property>
98
+ <property name="can-focus">False</property>
99
+ <property name="halign">end</property>
100
+ <property name="label" translatable="yes">Base name:</property>
92
101
  </object>
93
102
  <packing>
94
- <property name="left_attach">1</property>
95
- <property name="top_attach">0</property>
103
+ <property name="left-attach">0</property>
104
+ <property name="top-attach">1</property>
96
105
  </packing>
97
106
  </child>
98
107
  <child>
99
108
  <object class="GtkLabel">
100
109
  <property name="visible">True</property>
101
- <property name="can_focus">False</property>
102
- <property name="halign">end</property>
103
- <property name="label" translatable="yes">Base name:</property>
110
+ <property name="can-focus">False</property>
111
+ <property name="label" translatable="yes">Markup language:</property>
104
112
  </object>
105
113
  <packing>
106
- <property name="left_attach">0</property>
107
- <property name="top_attach">1</property>
114
+ <property name="left-attach">0</property>
115
+ <property name="top-attach">2</property>
116
+ </packing>
117
+ </child>
118
+ <child>
119
+ <object class="GtkLabel">
120
+ <property name="visible">True</property>
121
+ <property name="can-focus">False</property>
122
+ <property name="label" translatable="yes">Height:</property>
123
+ </object>
124
+ <packing>
125
+ <property name="left-attach">0</property>
126
+ <property name="top-attach">4</property>
127
+ </packing>
128
+ </child>
129
+ <child>
130
+ <object class="GtkEntry" id="slide-id">
131
+ <property name="visible">True</property>
132
+ <property name="can-focus">True</property>
133
+ <property name="placeholder-text" translatable="yes">rubykaigi2012</property>
134
+ </object>
135
+ <packing>
136
+ <property name="left-attach">1</property>
137
+ <property name="top-attach">0</property>
108
138
  </packing>
109
139
  </child>
110
140
  <child>
111
141
  <object class="GtkEntry" id="slide-base-name">
112
142
  <property name="visible">True</property>
113
- <property name="can_focus">True</property>
114
- <property name="placeholder_text" translatable="yes">rabbit-introduction</property>
143
+ <property name="can-focus">True</property>
144
+ <property name="placeholder-text" translatable="yes">rabbit-introduction</property>
115
145
  </object>
116
146
  <packing>
117
- <property name="left_attach">1</property>
118
- <property name="top_attach">1</property>
147
+ <property name="left-attach">1</property>
148
+ <property name="top-attach">1</property>
149
+ </packing>
150
+ </child>
151
+ <child>
152
+ <object class="GtkComboBoxText" id="slide-markup-language">
153
+ <property name="visible">True</property>
154
+ <property name="can-focus">False</property>
155
+ </object>
156
+ <packing>
157
+ <property name="left-attach">1</property>
158
+ <property name="top-attach">2</property>
159
+ </packing>
160
+ </child>
161
+ <child>
162
+ <object class="GtkSpinButton" id="slide-height">
163
+ <property name="visible">True</property>
164
+ <property name="can-focus">True</property>
165
+ <property name="adjustment">slide-height-adjustment</property>
166
+ <property name="climb-rate">10</property>
167
+ <property name="numeric">True</property>
168
+ </object>
169
+ <packing>
170
+ <property name="left-attach">1</property>
171
+ <property name="top-attach">4</property>
119
172
  </packing>
120
173
  </child>
121
174
  <child>
122
175
  <object class="GtkLabel">
123
176
  <property name="visible">True</property>
124
- <property name="can_focus">False</property>
125
- <property name="label" translatable="yes">Markup language:</property>
177
+ <property name="can-focus">False</property>
178
+ <property name="label" translatable="yes">Width:</property>
126
179
  </object>
127
180
  <packing>
128
- <property name="left_attach">0</property>
129
- <property name="top_attach">2</property>
181
+ <property name="left-attach">0</property>
182
+ <property name="top-attach">3</property>
130
183
  </packing>
131
184
  </child>
132
185
  <child>
133
- <object class="GtkComboBoxText" id="slide-markup-language">
186
+ <object class="GtkSpinButton" id="slide-width">
134
187
  <property name="visible">True</property>
135
- <property name="can_focus">False</property>
188
+ <property name="can-focus">True</property>
189
+ <property name="adjustment">slide-width-adjustment</property>
190
+ <property name="climb-rate">10</property>
136
191
  </object>
137
192
  <packing>
138
- <property name="left_attach">1</property>
139
- <property name="top_attach">2</property>
193
+ <property name="left-attach">1</property>
194
+ <property name="top-attach">3</property>
140
195
  </packing>
141
196
  </child>
197
+ <child>
198
+ <placeholder/>
199
+ </child>
200
+ <child>
201
+ <placeholder/>
202
+ </child>
203
+ <child>
204
+ <placeholder/>
205
+ </child>
206
+ <child>
207
+ <placeholder/>
208
+ </child>
209
+ <child>
210
+ <placeholder/>
211
+ </child>
142
212
  </object>
143
213
  </child>
144
214
  </object>
@@ -146,7 +216,7 @@
146
216
  <child type="label">
147
217
  <object class="GtkLabel">
148
218
  <property name="visible">True</property>
149
- <property name="can_focus">False</property>
219
+ <property name="can-focus">False</property>
150
220
  <property name="label" translatable="yes">Slide information</property>
151
221
  </object>
152
222
  </child>
@@ -158,7 +228,15 @@
158
228
  </packing>
159
229
  </child>
160
230
  <child>
161
- <placeholder/>
231
+ <object class="GtkBox">
232
+ <property name="visible">True</property>
233
+ <property name="can-focus">False</property>
234
+ </object>
235
+ <packing>
236
+ <property name="expand">False</property>
237
+ <property name="fill">True</property>
238
+ <property name="position">1</property>
239
+ </packing>
162
240
  </child>
163
241
  <child>
164
242
  <placeholder/>
@@ -636,14 +636,10 @@ module Rabbit
636
636
  end
637
637
 
638
638
  def choose_source_file_by_dialog
639
- dialog = Gtk::FileChooserDialog.new(_("Choose a Rabbit source file"),
640
- nil,
641
- Gtk::FileChooser::ACTION_OPEN,
642
- nil,
643
- [Gtk::Stock::CANCEL,
644
- Gtk::Dialog::RESPONSE_CANCEL],
645
- [Gtk::Stock::OPEN,
646
- Gtk::Dialog::RESPONSE_ACCEPT])
639
+ dialog = Gtk::FileChooserDialog.new(:title => _("Choose a Rabbit source file"),
640
+ :action => :open,
641
+ :buttons => [[Gtk::Stock::CANCEL, :cancel],
642
+ [Gtk::Stock::OPEN, :accept]])
647
643
  dialog.current_folder = @options.base if @options.base
648
644
  add_source_dialog_filter(dialog, "Rabbit files", "*.rab")
649
645
  add_source_dialog_filter(dialog, "RD files", "*.rd")
@@ -652,7 +648,7 @@ module Rabbit
652
648
  add_source_dialog_filter(dialog, "Markdown files", "*.md")
653
649
  add_source_dialog_filter(dialog, "All files", "*")
654
650
  file_name = nil
655
- if dialog.run == Gtk::Dialog::RESPONSE_ACCEPT
651
+ if dialog.run == Gtk::ResponseType::ACCEPT
656
652
  file_name = dialog.filename
657
653
  dialog.destroy
658
654
  end
@@ -1,5 +1,21 @@
1
- require 'rabbit/image'
2
- require 'rabbit/element/block-element'
1
+ # Copyright (C) 2004-2020 Sutou Kouhei <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 "rabbit/image"
18
+ require "rabbit/element/block-element"
3
19
 
4
20
  module Rabbit
5
21
  module Element
@@ -13,61 +29,23 @@ module Rabbit
13
29
  alias image_draw draw
14
30
  alias draw element_draw
15
31
 
16
- attr_reader :filename
17
- attr_reader :caption
18
- attr_reader :normalized_width, :normalized_height
19
- attr_reader :relative_width, :relative_height
20
- attr_reader :relative_margin_top, :relative_margin_bottom
21
- attr_reader :relative_margin_left, :relative_margin_right
22
- attr_reader :relative_padding_top, :relative_padding_bottom
23
- attr_reader :relative_padding_left, :relative_padding_right
24
-
25
- def initialize(filename, prop)
26
- @filename = filename
27
- prop = Utils.stringify_hash_key(prop)
28
- super(filename, prop)
29
- normalized_prop = {}
30
- prop.each do |name, value|
31
- normalized_prop[name.gsub(/-/, '_')] = value
32
- end
33
- prop = normalized_prop
34
- %w(caption dither_mode).each do |name|
35
- instance_variable_set("@#{name}", prop[name])
36
- end
37
- %w(keep_scale keep_ratio).each do |name|
38
- unless prop[name].nil?
39
- self.keep_ratio = true_value?(prop[name])
40
- end
41
- end
42
- %w(as_large_as_possible).each do |name|
43
- instance_variable_set("@#{name}", true_value?(prop[name]))
44
- end
45
- %w(width height
46
- x_dither y_dither
47
- normalized_width normalized_height
48
- relative_width relative_height
49
- relative_margin_top relative_margin_bottom
50
- relative_margin_left relative_margin_right
51
- relative_padding_top relative_padding_bottom
52
- relative_padding_left relative_padding_right
53
- ).each do |name|
54
- begin
55
- instance_variable_set("@#{name}", prop[name] && Integer(prop[name]))
56
- rescue ArgumentError
57
- raise InvalidImageSizeError.new(filename, name, prop[name])
58
- end
59
- end
60
-
61
- setup_draw_parameters(prop)
62
- resize(@width, @height)
32
+ def initialize(filename, props)
33
+ super(filename, props)
34
+ setup_draw_parameters
35
+ resize(properties.get_size("width", @filename),
36
+ properties.get_size("height", @filename))
63
37
  end
64
38
 
65
39
  def draw_element(canvas, x, y, w, h, simulation)
66
40
  draw_image(canvas, x, y, w, h, simulation)
67
41
  end
68
42
 
43
+ def caption
44
+ self["caption"]
45
+ end
46
+
69
47
  def text
70
- @caption.to_s
48
+ caption.to_s
71
49
  end
72
50
 
73
51
  def to_rd
@@ -85,22 +63,44 @@ module Rabbit
85
63
  html
86
64
  end
87
65
 
88
- def dither_mode
89
- @dither_mode ||= "normal"
90
- mode_name = "DITHER_#{@dither_mode.upcase}"
91
- if Gdk::RGB.const_defined?(mode_name)
92
- Gdk::RGB.const_get(mode_name)
93
- else
94
- Gdk::RGB::DITHER_NORMAL
95
- end
66
+ def relative_width
67
+ properties.get_relative_size("relative_width", @filename)
68
+ end
69
+
70
+ def relative_height
71
+ properties.get_relative_size("relative_height", @filename)
72
+ end
73
+
74
+ def relative_margin_top
75
+ properties.get_relative_size("relative_margin_top", @filename)
96
76
  end
97
77
 
98
- def x_dither
99
- @x_dither || 0
78
+ def relative_margin_bottom
79
+ properties.get_relative_size("relative_margin_bottom", @filename)
100
80
  end
101
81
 
102
- def y_dither
103
- @y_dither || 0
82
+ def relative_margin_left
83
+ properties.get_relative_size("relative_margin_left", @filename)
84
+ end
85
+
86
+ def relative_margin_right
87
+ properties.get_relative_size("relative_margin_right", @filename)
88
+ end
89
+
90
+ def relative_padding_top
91
+ properties.get_relative_size("relative_padding_top", @filename)
92
+ end
93
+
94
+ def relative_padding_bottom
95
+ properties.get_relative_size("relative_padding_bottom", @filename)
96
+ end
97
+
98
+ def relative_padding_left
99
+ properties.get_relative_size("relative_padding_left", @filename)
100
+ end
101
+
102
+ def relative_padding_right
103
+ properties.get_relative_size("relative_padding_right", @filename)
104
104
  end
105
105
 
106
106
  alias _compile compile
@@ -122,23 +122,23 @@ module Rabbit
122
122
  end
123
123
 
124
124
  def as_large_as_possible?
125
- @as_large_as_possible
125
+ properties.get_boolean("as_large_as_possible")
126
126
  end
127
127
 
128
128
  private
129
- def setup_draw_parameters(prop)
129
+ def setup_draw_parameters
130
130
  @draw_parameters = {}
131
131
 
132
- @draw_parameters[:reflect] = {} if true_value?(prop["reflect"])
132
+ @draw_parameters[:reflect] = {} if properties.get_boolean("reflect")
133
133
  [:ratio, :alpha].each do |key|
134
134
  name = "reflect_#{key}"
135
- value = prop[name]
135
+ value = self[name]
136
136
  next unless value
137
137
  @draw_parameters[:reflect] ||= {}
138
138
  @draw_parameters[:reflect][key] = Float(value)
139
139
  end
140
140
 
141
- alpha = prop["alpha"]
141
+ alpha = self["alpha"]
142
142
  @draw_parameters[:alpha] = Float(alpha) if alpha
143
143
  end
144
144
 
@@ -151,24 +151,24 @@ module Rabbit
151
151
 
152
152
  def adjust_margin(w, h)
153
153
  @margin_top =
154
- make_relative_size(@relative_margin_top, h) || @margin_top
154
+ relative_margin_top&.resolve(h) || @margin_top
155
155
  @margin_bottom =
156
- make_relative_size(@relative_margin_bottom, h) || @margin_bottom
156
+ relative_margin_bottom&.resolve(h) || @margin_bottom
157
157
  @margin_left =
158
- make_relative_size(@relative_margin_left, w) || @margin_left
158
+ relative_margin_left&.resolve(w) || @margin_left
159
159
  @margin_right =
160
- make_relative_size(@relative_margin_right, w) || @margin_right
160
+ relative_margin_right&.resolve(w) || @margin_right
161
161
  end
162
162
 
163
163
  def adjust_padding(w, h)
164
164
  @padding_top =
165
- make_relative_size(@relative_padding_top, h) || @padding_top
165
+ relative_padding_top&.resolve(h) || @padding_top
166
166
  @padding_bottom =
167
- make_relative_size(@relative_padding_bottom, h) || @padding_bottom
167
+ relative_padding_bottom&.resolve(h) || @padding_bottom
168
168
  @padding_left =
169
- make_relative_size(@relative_padding_left, w) || @padding_left
169
+ relative_padding_left&.resolve(w) || @padding_left
170
170
  @padding_right =
171
- make_relative_size(@relative_padding_right, w) || @padding_right
171
+ relative_padding_right&.resolve(w) || @padding_right
172
172
  end
173
173
 
174
174
  def adjust_size(canvas, x, y, w, h)
@@ -177,7 +177,7 @@ module Rabbit
177
177
  adjust_margin(base_w, base_h)
178
178
  adjust_padding(base_w, base_h)
179
179
  base_h = base_h - @padding_top - @padding_bottom
180
- if @as_large_as_possible
180
+ if as_large_as_possible?
181
181
  iw = base_w - x
182
182
  ih = base_h - y
183
183
  if iw.to_f / original_width > ih.to_f / original_height
@@ -186,27 +186,11 @@ module Rabbit
186
186
  ih = nil
187
187
  end
188
188
  else
189
- nw = make_normalized_size(@normalized_width)
190
- nh = make_normalized_size(@normalized_height)
191
- rw = make_relative_size(@relative_width, base_w)
192
- rh = make_relative_size(@relative_height, base_h)
193
- iw = nw || rw
194
- ih = nh || rh
189
+ iw = relative_width&.resolve(base_w)
190
+ ih = relative_height&.resolve(base_h)
195
191
  end
196
192
  resize(iw, ih)
197
193
  end
198
-
199
- def make_normalized_size(size)
200
- size && screen_size(size)
201
- end
202
-
203
- def make_relative_size(size, parent_size)
204
- size && parent_size && ((size / 100.0) * parent_size).ceil
205
- end
206
-
207
- def true_value?(value)
208
- value == true or value == "true"
209
- end
210
194
  end
211
195
  end
212
196
  end
@@ -14,7 +14,6 @@ module Rabbit
14
14
  include TextRenderer
15
15
 
16
16
  attr_reader :filename
17
- attr_reader :normalized_width, :normalized_height
18
17
  attr_reader :relative_width, :relative_height
19
18
  attr_reader :relative_margin_top, :relative_margin_bottom
20
19
  attr_reader :relative_margin_left, :relative_margin_right
@@ -34,7 +33,6 @@ module Rabbit
34
33
  instance_variable_set("@#{name}", true_value?(prop[name]))
35
34
  end
36
35
  %w(width height
37
- normalized_width normalized_height
38
36
  relative_width relative_height
39
37
  relative_margin_top relative_margin_bottom
40
38
  relative_margin_left relative_margin_right
@@ -44,7 +42,7 @@ module Rabbit
44
42
  begin
45
43
  instance_variable_set("@#{name}", prop[name] && Integer(prop[name]))
46
44
  rescue ArgumentError
47
- raise InvalidImageSizeError.new(filename, name, prop[name])
45
+ raise InvalidSizeError.new(filename, name, prop[name])
48
46
  end
49
47
  end
50
48
 
@@ -126,12 +124,10 @@ module Rabbit
126
124
  iw = base_w
127
125
  ih = base_h
128
126
  else
129
- nw = make_normalized_size(@normalized_width)
130
- nh = make_normalized_size(@normalized_height)
131
127
  rw = make_relative_size(@relative_width, base_w)
132
128
  rh = make_relative_size(@relative_height, base_h)
133
- iw = nw || rw || base_w
134
- ih = nh || rh || base_h
129
+ iw = rw || base_w
130
+ ih = rh || base_h
135
131
  end
136
132
  resize(iw, ih)
137
133
  end
@@ -151,10 +147,6 @@ module Rabbit
151
147
  end
152
148
  end
153
149
 
154
- def make_normalized_size(size)
155
- size && screen_size(size)
156
- end
157
-
158
150
  def make_relative_size(size, parent_size)
159
151
  size && parent_size && ((size / 100.0) * parent_size).ceil
160
152
  end
data/lib/rabbit/error.rb CHANGED
@@ -181,7 +181,7 @@ module Rabbit
181
181
  end
182
182
  end
183
183
 
184
- class InvalidImageSizeError < Error
184
+ class InvalidSizeError < Error
185
185
  attr_reader :filename, :prop_name, :value
186
186
  def initialize(filename, prop_name, value)
187
187
  @filename = filename
@@ -193,7 +193,7 @@ module Rabbit
193
193
  :value => value,
194
194
  }
195
195
  super(_("invalid value of size property \"%{prop_name}\" " \
196
- "of image \"%{filename}\": %{value}") % params)
196
+ "of \"%{filename}\": %{value}") % params)
197
197
  end
198
198
  end
199
199