gruff 0.2.4 → 0.2.5
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.
- data/Manifest.txt +9 -0
- data/lib/gruff.rb +20 -12
- data/lib/gruff/bar.rb +8 -2
- data/lib/gruff/bar_conversion.rb +7 -16
- data/lib/gruff/base.rb +128 -106
- data/lib/gruff/line.rb +11 -15
- data/lib/gruff/mini/bar.rb +32 -0
- data/lib/gruff/mini/legend.rb +77 -0
- data/lib/gruff/mini/pie.rb +32 -0
- data/lib/gruff/mini/side_bar.rb +22 -0
- data/lib/gruff/pie.rb +26 -15
- data/lib/gruff/side_stacked_bar.rb +1 -0
- data/test/gruff_test_case.rb +86 -4
- data/test/test_bar.rb +27 -0
- data/test/test_legend.rb +40 -40
- data/test/test_line.rb +9 -39
- data/test/test_mini_bar.rb +18 -0
- data/test/test_mini_pie.rb +11 -0
- data/test/test_mini_side_bar.rb +12 -0
- data/test/test_pie.rb +14 -0
- data/test/test_sidestacked_bar.rb +15 -2
- metadata +13 -5
data/Manifest.txt
CHANGED
@@ -19,6 +19,11 @@ lib/gruff/side_stacked_bar.rb
|
|
19
19
|
lib/gruff/spider.rb
|
20
20
|
lib/gruff/stacked_bar.rb
|
21
21
|
|
22
|
+
lib/gruff/mini/bar.rb
|
23
|
+
lib/gruff/mini/pie.rb
|
24
|
+
lib/gruff/mini/side_bar.rb
|
25
|
+
lib/gruff/mini/legend.rb
|
26
|
+
|
22
27
|
test/test_area.rb
|
23
28
|
test/test_bar.rb
|
24
29
|
test/test_base.rb
|
@@ -33,3 +38,7 @@ test/test_scene.rb
|
|
33
38
|
test/test_sidestacked_bar.rb
|
34
39
|
test/test_spider.rb
|
35
40
|
test/test_stacked_bar.rb
|
41
|
+
|
42
|
+
test/test_mini_bar.rb
|
43
|
+
test/test_mini_pie.rb
|
44
|
+
test/test_mini_side_bar.rb
|
data/lib/gruff.rb
CHANGED
@@ -1,15 +1,23 @@
|
|
1
|
-
# Extra full path added to fix
|
1
|
+
# Extra full path added to fix loading errors on some installations.
|
2
2
|
|
3
|
-
|
3
|
+
%w(
|
4
|
+
base
|
5
|
+
area
|
6
|
+
bar
|
7
|
+
line
|
8
|
+
pie
|
9
|
+
spider
|
10
|
+
net
|
11
|
+
stacked_bar
|
12
|
+
side_stacked_bar
|
13
|
+
side_bar
|
4
14
|
|
5
|
-
|
6
|
-
require File.dirname(__FILE__) + '/gruff/bar'
|
7
|
-
require File.dirname(__FILE__) + '/gruff/line'
|
8
|
-
require File.dirname(__FILE__) + '/gruff/pie'
|
9
|
-
require File.dirname(__FILE__) + '/gruff/spider'
|
10
|
-
require File.dirname(__FILE__) + '/gruff/net'
|
11
|
-
require File.dirname(__FILE__) + '/gruff/stacked_bar'
|
12
|
-
require File.dirname(__FILE__) + '/gruff/side_stacked_bar'
|
13
|
-
# require File.dirname(__FILE__) + '/gruff/photo_bar'
|
15
|
+
scene
|
14
16
|
|
15
|
-
|
17
|
+
mini/legend
|
18
|
+
mini/bar
|
19
|
+
mini/pie
|
20
|
+
mini/side_bar
|
21
|
+
).each do |filename|
|
22
|
+
require File.dirname(__FILE__) + "/gruff/#{filename}"
|
23
|
+
end
|
data/lib/gruff/bar.rb
CHANGED
@@ -13,10 +13,16 @@ class Gruff::Bar < Gruff::Base
|
|
13
13
|
super
|
14
14
|
return unless @has_data
|
15
15
|
|
16
|
+
draw_bars
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def draw_bars
|
16
22
|
# Setup spacing.
|
17
23
|
#
|
18
24
|
# Columns sit side-by-side.
|
19
|
-
spacing_factor = 0.9
|
25
|
+
spacing_factor = 0.9 # space between the bars
|
20
26
|
@bar_width = @graph_width / (@column_count * @data.length).to_f
|
21
27
|
|
22
28
|
@d = @d.stroke_opacity 0.0
|
@@ -72,7 +78,7 @@ class Gruff::Bar < Gruff::Base
|
|
72
78
|
# Draw the last label if requested
|
73
79
|
draw_label(@graph_right, @column_count) if @center_labels_over_point
|
74
80
|
|
75
|
-
@d.draw(@base_image)
|
81
|
+
@d.draw(@base_image)
|
76
82
|
end
|
77
83
|
|
78
84
|
end
|
data/lib/gruff/bar_conversion.rb
CHANGED
@@ -1,22 +1,13 @@
|
|
1
|
-
|
1
|
+
##
|
2
|
+
# Original Author: David Stokar
|
2
3
|
#
|
3
|
-
#
|
4
|
+
# This class perfoms the y coordinats conversion for the bar class.
|
4
5
|
#
|
5
|
-
#
|
6
|
+
# There are three cases:
|
6
7
|
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
# $Log: bar_conversion.rb $
|
12
|
-
# $Log: Added comments $
|
13
|
-
##############################################################################
|
14
|
-
|
15
|
-
#
|
16
|
-
# This class perfoms the y coordinats conversion for the bar class
|
17
|
-
# There are 3 cases: 1. Bars all go from zero in positiv direction
|
18
|
-
# 2. Bars all go from zero to negativ direction
|
19
|
-
# 3. Bars either go from zero to positiv or from zero to negativ
|
8
|
+
# 1. Bars all go from zero in positive direction
|
9
|
+
# 2. Bars all go from zero to negative direction
|
10
|
+
# 3. Bars either go from zero to positive or from zero to negative
|
20
11
|
#
|
21
12
|
class Gruff::BarConversion
|
22
13
|
attr_writer :mode
|
data/lib/gruff/base.rb
CHANGED
@@ -20,7 +20,7 @@ require File.dirname(__FILE__) + '/deprecated'
|
|
20
20
|
|
21
21
|
module Gruff
|
22
22
|
|
23
|
-
VERSION = '0.2.
|
23
|
+
VERSION = '0.2.5'
|
24
24
|
|
25
25
|
class Base
|
26
26
|
|
@@ -53,6 +53,9 @@ module Gruff
|
|
53
53
|
# By default, labels are centered over the point they represent.
|
54
54
|
attr_accessor :center_labels_over_point
|
55
55
|
|
56
|
+
# Used internally for horizontal graph types.
|
57
|
+
attr_accessor :has_left_labels
|
58
|
+
|
56
59
|
# A label for the bottom of the graph
|
57
60
|
attr_accessor :x_axis_label
|
58
61
|
|
@@ -77,6 +80,8 @@ module Gruff
|
|
77
80
|
# ENV['MAGICK_FONT_PATH']. Uses default RMagick font otherwise.
|
78
81
|
attr_reader :font
|
79
82
|
|
83
|
+
attr_accessor :font_color
|
84
|
+
|
80
85
|
# Hide various elements
|
81
86
|
attr_accessor :hide_line_markers, :hide_legend, :hide_title, :hide_line_numbers
|
82
87
|
|
@@ -91,7 +96,7 @@ module Gruff
|
|
91
96
|
# The font size of the labels around the graph
|
92
97
|
attr_accessor :marker_font_size
|
93
98
|
|
94
|
-
# The color of the auxiliary
|
99
|
+
# The color of the auxiliary lines
|
95
100
|
attr_accessor :marker_color
|
96
101
|
|
97
102
|
# The number of horizontal lines shown for reference
|
@@ -162,9 +167,11 @@ module Gruff
|
|
162
167
|
|
163
168
|
@hide_line_markers = @hide_legend = @hide_title = @hide_line_numbers = false
|
164
169
|
@center_labels_over_point = true
|
170
|
+
@has_left_labels = false
|
165
171
|
|
166
172
|
@additional_line_values = []
|
167
173
|
@additional_line_colors = []
|
174
|
+
@theme_options = {}
|
168
175
|
|
169
176
|
@x_axis_label = @y_axis_label = nil
|
170
177
|
@y_axis_increment = nil
|
@@ -175,42 +182,6 @@ module Gruff
|
|
175
182
|
theme_keynote()
|
176
183
|
end
|
177
184
|
|
178
|
-
|
179
|
-
|
180
|
-
# You can set a theme manually. Assign a hash to this method before you send your data.
|
181
|
-
#
|
182
|
-
# graph.theme = {
|
183
|
-
# :colors => %w(orange purple green white red),
|
184
|
-
# :marker_color => 'blue',
|
185
|
-
# :background_colors => %w(black grey)
|
186
|
-
# }
|
187
|
-
#
|
188
|
-
# :background_image => 'squirrel.png' is also possible.
|
189
|
-
#
|
190
|
-
# (Or hopefully something better looking than that.)
|
191
|
-
#
|
192
|
-
def theme=(options)
|
193
|
-
defaults = {
|
194
|
-
:colors => ['black', 'white'],
|
195
|
-
:additional_line_colors => ['grey'],
|
196
|
-
:marker_color => 'white',
|
197
|
-
:background_colors => nil,
|
198
|
-
:background_image => nil
|
199
|
-
}
|
200
|
-
options = defaults.merge options
|
201
|
-
|
202
|
-
reset_themes()
|
203
|
-
|
204
|
-
@colors = options[:colors]
|
205
|
-
@marker_color = options[:marker_color]
|
206
|
-
@additional_line_colors = options[:additional_line_colors]
|
207
|
-
if not options[:background_colors].nil?
|
208
|
-
@base_image = render_gradiated_background(*options[:background_colors])
|
209
|
-
else
|
210
|
-
@base_image = render_image_background(*options[:background_image])
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
185
|
def font=(font_path)
|
215
186
|
@font = font_path
|
216
187
|
@d.font = @font
|
@@ -234,18 +205,42 @@ module Gruff
|
|
234
205
|
@colors = color_list
|
235
206
|
end
|
236
207
|
|
208
|
+
|
209
|
+
# You can set a theme manually. Assign a hash to this method before you send your data.
|
210
|
+
#
|
211
|
+
# graph.theme = {
|
212
|
+
# :colors => %w(orange purple green white red),
|
213
|
+
# :marker_color => 'blue',
|
214
|
+
# :background_colors => %w(black grey)
|
215
|
+
# }
|
216
|
+
#
|
217
|
+
# :background_image => 'squirrel.png' is also possible.
|
218
|
+
#
|
219
|
+
# (Or hopefully something better looking than that.)
|
220
|
+
#
|
221
|
+
def theme=(options)
|
222
|
+
reset_themes()
|
223
|
+
|
224
|
+
defaults = {
|
225
|
+
:colors => ['black', 'white'],
|
226
|
+
:additional_line_colors => [],
|
227
|
+
:marker_color => 'white',
|
228
|
+
:font_color => 'black',
|
229
|
+
:background_colors => nil,
|
230
|
+
:background_image => nil
|
231
|
+
}
|
232
|
+
@theme_options = defaults.merge options
|
233
|
+
|
234
|
+
@colors = @theme_options[:colors]
|
235
|
+
@marker_color = @theme_options[:marker_color]
|
236
|
+
@font_color = @theme_options[:font_color] || @marker_color
|
237
|
+
@additional_line_colors = @theme_options[:additional_line_colors]
|
238
|
+
|
239
|
+
render_background
|
240
|
+
end
|
237
241
|
|
238
242
|
# A color scheme similar to the popular presentation software.
|
239
243
|
def theme_keynote
|
240
|
-
# defaults = {
|
241
|
-
# :colors => ['black', 'white'],
|
242
|
-
# :additional_line_colors => ['grey'],
|
243
|
-
# :marker_color => 'white',
|
244
|
-
# :background_colors => nil,
|
245
|
-
# :background_image => nil
|
246
|
-
# }
|
247
|
-
|
248
|
-
reset_themes()
|
249
244
|
# Colors
|
250
245
|
@blue = '#6886B4'
|
251
246
|
@yellow = '#FDD84E'
|
@@ -256,14 +251,16 @@ module Gruff
|
|
256
251
|
@white = 'white'
|
257
252
|
@colors = [@yellow, @blue, @green, @red, @purple, @orange, @white]
|
258
253
|
|
259
|
-
|
260
|
-
|
261
|
-
|
254
|
+
self.theme = {
|
255
|
+
:colors => @colors,
|
256
|
+
:marker_color => 'white',
|
257
|
+
:font_color => 'white',
|
258
|
+
:background_colors => ['black', '#4a465a']
|
259
|
+
}
|
262
260
|
end
|
263
261
|
|
264
262
|
# A color scheme plucked from the colors on the popular usability blog.
|
265
263
|
def theme_37signals
|
266
|
-
reset_themes()
|
267
264
|
# Colors
|
268
265
|
@green = '#339933'
|
269
266
|
@purple = '#cc99cc'
|
@@ -274,14 +271,16 @@ module Gruff
|
|
274
271
|
@black = 'black'
|
275
272
|
@colors = [@yellow, @blue, @green, @red, @purple, @orange, @black]
|
276
273
|
|
277
|
-
|
278
|
-
|
279
|
-
|
274
|
+
self.theme = {
|
275
|
+
:colors => @colors,
|
276
|
+
:marker_color => 'black',
|
277
|
+
:font_color => 'black',
|
278
|
+
:background_colors => ['#d1edf5', 'white']
|
279
|
+
}
|
280
280
|
end
|
281
281
|
|
282
282
|
# A color scheme from the colors used on the 2005 Rails keynote presentation at RubyConf.
|
283
283
|
def theme_rails_keynote
|
284
|
-
reset_themes()
|
285
284
|
# Colors
|
286
285
|
@green = '#00ff00'
|
287
286
|
@grey = '#333333'
|
@@ -291,15 +290,17 @@ module Gruff
|
|
291
290
|
@light_grey = '#999999'
|
292
291
|
@black = 'black'
|
293
292
|
@colors = [@green, @grey, @orange, @red, @white, @light_grey, @black]
|
294
|
-
|
295
|
-
@marker_color = 'white'
|
296
293
|
|
297
|
-
|
294
|
+
self.theme = {
|
295
|
+
:colors => @colors,
|
296
|
+
:marker_color => 'white',
|
297
|
+
:font_color => 'white',
|
298
|
+
:background_colors => ['#0083a3', '#0083a3']
|
299
|
+
}
|
298
300
|
end
|
299
301
|
|
300
302
|
# A color scheme similar to that used on the popular podcast site.
|
301
303
|
def theme_odeo
|
302
|
-
reset_themes()
|
303
304
|
# Colors
|
304
305
|
@grey = '#202020'
|
305
306
|
@white = 'white'
|
@@ -309,10 +310,13 @@ module Gruff
|
|
309
310
|
@dark_blue = '#3a5b87'
|
310
311
|
@black = 'black'
|
311
312
|
@colors = [@grey, @white, @dark_blue, @dark_pink, @green, @light_grey, @black]
|
312
|
-
|
313
|
-
@marker_color = 'white'
|
314
313
|
|
315
|
-
|
314
|
+
self.theme = {
|
315
|
+
:colors => @colors,
|
316
|
+
:marker_color => 'white',
|
317
|
+
:font_color => 'white',
|
318
|
+
:background_colors => ['#ff47a4', '#ff1f81']
|
319
|
+
}
|
316
320
|
end
|
317
321
|
|
318
322
|
# Parameters are an array where the first element is the name of the dataset
|
@@ -378,13 +382,13 @@ protected
|
|
378
382
|
make_stacked if @stacked
|
379
383
|
setup_drawing()
|
380
384
|
|
381
|
-
debug
|
385
|
+
debug {
|
382
386
|
# Outer margin
|
383
387
|
@d.rectangle( LEFT_MARGIN, TOP_MARGIN,
|
384
388
|
@raw_columns - RIGHT_MARGIN, @raw_rows - BOTTOM_MARGIN)
|
385
389
|
# Graph area box
|
386
390
|
@d.rectangle( @graph_left, @graph_top, @graph_right, @graph_bottom)
|
387
|
-
|
391
|
+
}
|
388
392
|
end
|
389
393
|
|
390
394
|
# Draws the decorations.
|
@@ -489,9 +493,9 @@ protected
|
|
489
493
|
x_axis_label_y_coordinate = @graph_bottom + LABEL_MARGIN * 2 + @marker_caps_height
|
490
494
|
|
491
495
|
# TODO Center between graph area
|
492
|
-
@d.fill = @
|
496
|
+
@d.fill = @font_color
|
493
497
|
@d.font = @font if @font
|
494
|
-
@d.stroke
|
498
|
+
@d.stroke('transparent')
|
495
499
|
@d.pointsize = scale_fontsize(@marker_font_size)
|
496
500
|
@d.gravity = NorthGravity
|
497
501
|
@d = @d.annotate_scaled( @base_image,
|
@@ -516,11 +520,9 @@ protected
|
|
516
520
|
# Draws horizontal background lines and labels
|
517
521
|
def draw_line_markers
|
518
522
|
return if @hide_line_markers
|
523
|
+
|
524
|
+
@d = @d.stroke_antialias false
|
519
525
|
|
520
|
-
# Draw horizontal line markers and annotate with numbers
|
521
|
-
@d = @d.stroke(@marker_color)
|
522
|
-
@d = @d.stroke_width 1
|
523
|
-
|
524
526
|
if @y_axis_increment.nil?
|
525
527
|
# Try to use a number of horizontal lines that will come out even.
|
526
528
|
#
|
@@ -547,16 +549,20 @@ protected
|
|
547
549
|
end
|
548
550
|
@increment_scaled = @graph_height.to_f / (@spread / @increment)
|
549
551
|
|
552
|
+
# Draw horizontal line markers and annotate with numbers
|
550
553
|
(0..@marker_count).each do |index|
|
551
554
|
y = @graph_top + @graph_height - index.to_f * @increment_scaled
|
555
|
+
|
556
|
+
@d = @d.stroke(@marker_color)
|
557
|
+
@d = @d.stroke_width 1
|
552
558
|
@d = @d.line(@graph_left, y, @graph_right, y)
|
553
559
|
|
554
560
|
marker_label = index * @increment + @minimum_value.to_f
|
555
561
|
|
556
562
|
unless @hide_line_numbers
|
557
|
-
@d.fill = @
|
563
|
+
@d.fill = @font_color
|
558
564
|
@d.font = @font if @font
|
559
|
-
@d.stroke
|
565
|
+
@d.stroke('transparent')
|
560
566
|
@d.pointsize = scale_fontsize(@marker_font_size)
|
561
567
|
@d.gravity = EastGravity
|
562
568
|
|
@@ -568,28 +574,30 @@ protected
|
|
568
574
|
end
|
569
575
|
end
|
570
576
|
|
571
|
-
# Submitted by a contibutor...the utility escapes me
|
572
|
-
i = 0
|
573
|
-
@additional_line_values.each do |value|
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
end
|
577
|
+
# # Submitted by a contibutor...the utility escapes me
|
578
|
+
# i = 0
|
579
|
+
# @additional_line_values.each do |value|
|
580
|
+
# @increment_scaled = @graph_height.to_f / (@maximum_value.to_f / value)
|
581
|
+
#
|
582
|
+
# y = @graph_top + @graph_height - @increment_scaled
|
583
|
+
#
|
584
|
+
# @d = @d.stroke(@additional_line_colors[i])
|
585
|
+
# @d = @d.line(@graph_left, y, @graph_right, y)
|
586
|
+
#
|
587
|
+
#
|
588
|
+
# @d.fill = @additional_line_colors[i]
|
589
|
+
# @d.font = @font if @font
|
590
|
+
# @d.stroke('transparent')
|
591
|
+
# @d.pointsize = scale_fontsize(@marker_font_size)
|
592
|
+
# @d.gravity = EastGravity
|
593
|
+
# @d = @d.annotate_scaled( @base_image,
|
594
|
+
# 100, 20,
|
595
|
+
# -10, y - (@marker_font_size/2.0),
|
596
|
+
# "", @scale)
|
597
|
+
# i += 1
|
598
|
+
# end
|
599
|
+
|
600
|
+
@d = @d.stroke_antialias true
|
593
601
|
end
|
594
602
|
|
595
603
|
# Draws a legend with the names of the datasets
|
@@ -625,10 +633,10 @@ protected
|
|
625
633
|
@legend_labels.each_with_index do |legend_label, index|
|
626
634
|
|
627
635
|
# Draw label
|
628
|
-
@d.fill = @
|
636
|
+
@d.fill = @font_color
|
629
637
|
@d.font = @font if @font
|
630
638
|
@d.pointsize = scale_fontsize(@legend_font_size)
|
631
|
-
@d.stroke
|
639
|
+
@d.stroke('transparent')
|
632
640
|
@d.font_weight = NormalWeight
|
633
641
|
@d.gravity = WestGravity
|
634
642
|
@d = @d.annotate_scaled( @base_image,
|
@@ -637,7 +645,7 @@ protected
|
|
637
645
|
legend_label.to_s, @scale)
|
638
646
|
|
639
647
|
# Now draw box with color of this dataset
|
640
|
-
@d = @d.stroke
|
648
|
+
@d = @d.stroke('transparent')
|
641
649
|
@d = @d.fill @data[index][DATA_COLOR_INDEX]
|
642
650
|
@d = @d.rectangle(current_x_offset,
|
643
651
|
current_y_offset - legend_square_width / 2.0,
|
@@ -655,9 +663,9 @@ protected
|
|
655
663
|
def draw_title
|
656
664
|
return if (@hide_title || @title.nil?)
|
657
665
|
|
658
|
-
@d.fill = @
|
666
|
+
@d.fill = @font_color
|
659
667
|
@d.font = @font if @font
|
660
|
-
@d.stroke
|
668
|
+
@d.stroke('transparent')
|
661
669
|
@d.pointsize = scale_fontsize(@title_font_size)
|
662
670
|
@d.font_weight = BoldWeight
|
663
671
|
@d.gravity = NorthGravity
|
@@ -678,9 +686,9 @@ protected
|
|
678
686
|
if !@labels[index].nil? && @labels_seen[index].nil?
|
679
687
|
y_offset = @graph_bottom + LABEL_MARGIN
|
680
688
|
|
681
|
-
@d.fill = @
|
689
|
+
@d.fill = @font_color
|
682
690
|
@d.font = @font if @font
|
683
|
-
@d.stroke
|
691
|
+
@d.stroke('transparent')
|
684
692
|
@d.font_weight = NormalWeight
|
685
693
|
@d.pointsize = scale_fontsize(@marker_font_size)
|
686
694
|
@d.gravity = NorthGravity
|
@@ -694,9 +702,9 @@ protected
|
|
694
702
|
end
|
695
703
|
|
696
704
|
def draw_no_data
|
697
|
-
@d.fill = @
|
705
|
+
@d.fill = @font_color
|
698
706
|
@d.font = @font if @font
|
699
|
-
@d.stroke
|
707
|
+
@d.stroke('transparent')
|
700
708
|
@d.font_weight = NormalWeight
|
701
709
|
@d.pointsize = scale_fontsize(80)
|
702
710
|
@d.gravity = CenterGravity
|
@@ -706,6 +714,19 @@ protected
|
|
706
714
|
@no_data_message, @scale)
|
707
715
|
end
|
708
716
|
|
717
|
+
##
|
718
|
+
# Finds the best background to render based on the provided theme options.
|
719
|
+
#
|
720
|
+
# Creates a @base_image to draw on.
|
721
|
+
#
|
722
|
+
def render_background
|
723
|
+
if not @theme_options[:background_colors].nil?
|
724
|
+
@base_image = render_gradiated_background(*@theme_options[:background_colors])
|
725
|
+
else
|
726
|
+
@base_image = render_image_background(*@theme_options[:background_image])
|
727
|
+
end
|
728
|
+
end
|
729
|
+
|
709
730
|
# Use with a theme definition method to draw a gradiated (or solid color) background.
|
710
731
|
def render_gradiated_background(top_color, bottom_color)
|
711
732
|
Image.new(@columns, @rows,
|
@@ -730,7 +751,8 @@ protected
|
|
730
751
|
|
731
752
|
def reset_themes
|
732
753
|
@color_index = 0
|
733
|
-
@labels_seen =
|
754
|
+
@labels_seen = {}
|
755
|
+
@theme_options = {}
|
734
756
|
|
735
757
|
@d = Draw.new
|
736
758
|
# Scale down from 800x600 used to calculate drawing.
|
@@ -883,7 +905,7 @@ private
|
|
883
905
|
#
|
884
906
|
# Not scaled since it deals with dimensions that the regular
|
885
907
|
# scaling will handle.
|
886
|
-
|
908
|
+
#
|
887
909
|
def calculate_caps_height(font_size)
|
888
910
|
@d.pointsize = font_size
|
889
911
|
@d.get_type_metrics(@base_image, 'X').height
|
@@ -894,7 +916,7 @@ private
|
|
894
916
|
#
|
895
917
|
# Not scaled since it deals with dimensions that the regular
|
896
918
|
# scaling will handle.
|
897
|
-
|
919
|
+
#
|
898
920
|
def calculate_width(font_size, text)
|
899
921
|
@d.pointsize = font_size
|
900
922
|
@d.get_type_metrics(@base_image, text.to_s).width
|