scruffy 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +10 -0
- data/lib/scruffy/components/base.rb +17 -13
- data/lib/scruffy/components/data_markers.rb +1 -3
- data/lib/scruffy/components/grid.rb +3 -1
- data/lib/scruffy/components/label.rb +1 -2
- data/lib/scruffy/components/legend.rb +1 -3
- data/lib/scruffy/components/style_info.rb +5 -0
- data/lib/scruffy/components/title.rb +1 -2
- data/lib/scruffy/components/value_markers.rb +5 -5
- data/lib/scruffy/components/viewport.rb +0 -2
- data/lib/scruffy/formatters.rb +19 -0
- data/lib/scruffy/graph.rb +10 -1
- data/lib/scruffy/helpers.rb +2 -1
- data/lib/scruffy/helpers/canvas.rb +14 -0
- data/lib/scruffy/helpers/layer_container.rb +7 -4
- data/lib/scruffy/helpers/meta.rb +5 -0
- data/lib/scruffy/layers/area.rb +3 -0
- data/lib/scruffy/layers/bar.rb +8 -0
- data/lib/scruffy/layers/line.rb +12 -2
- data/lib/scruffy/renderers/base.rb +50 -4
- data/lib/scruffy/renderers/cubed.rb +1 -1
- data/lib/scruffy/renderers/cubed3d.rb +1 -1
- data/lib/scruffy/renderers/empty.rb +2 -3
- data/lib/scruffy/renderers/reversed.rb +1 -2
- data/lib/scruffy/renderers/sparkline.rb +1 -2
- data/lib/scruffy/renderers/split.rb +29 -15
- data/lib/scruffy/renderers/standard.rb +31 -15
- data/lib/scruffy/themes.rb +6 -5
- data/lib/scruffy/version.rb +1 -1
- metadata +3 -2
data/CHANGES
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
= Scruffy Changelog
|
2
2
|
|
3
|
+
== Version 0.2.2
|
4
|
+
(August 19th, 2006)
|
5
|
+
|
6
|
+
* Removed all font-family and text-rendering attributes from elements.
|
7
|
+
- These were causing issues with Batik and Adobe Viewer. Horrible font problems.
|
8
|
+
* Added require 'builder' to renderers/base.rb
|
9
|
+
* Added minor shadows to most graph types. Adds some depth perception.
|
10
|
+
* Added graph.layout as an alias of renderer. (graph.layout looks nicer).
|
11
|
+
* Added markers, values, grid options.
|
12
|
+
|
3
13
|
== Version 0.2.1
|
4
14
|
(August 18th, 2006)
|
5
15
|
|
@@ -4,28 +4,32 @@ module Scruffy
|
|
4
4
|
attr_reader :id
|
5
5
|
|
6
6
|
# In terms of percentages: [10, 10] == 10% by 10%
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
attr_accessor :position
|
8
|
+
attr_accessor :size
|
9
|
+
attr_accessor :options
|
10
|
+
attr_accessor :visible
|
10
11
|
|
11
12
|
def initialize(id, options = {})
|
12
13
|
@id = id.to_sym
|
13
|
-
@position = options[:position]
|
14
|
-
@size = options[:size]
|
14
|
+
@position = options[:position] || [0, 0]
|
15
|
+
@size = options[:size] || [100, 100]
|
16
|
+
@visible = options[:visible] || true
|
15
17
|
@options = options
|
16
18
|
end
|
17
19
|
|
18
20
|
def render(svg, bounds, options={})
|
19
|
-
|
20
|
-
|
21
|
+
if @visible
|
22
|
+
unless bounds.nil?
|
23
|
+
@render_height = bounds[:height]
|
21
24
|
|
22
|
-
|
23
|
-
|
25
|
+
svg.g(:id => id.to_s,
|
26
|
+
:transform => "translate(#{bounds.delete(:x)}, #{bounds.delete(:y)})") {
|
24
27
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
28
|
+
draw(svg, bounds, options.merge(@options))
|
29
|
+
}
|
30
|
+
else
|
31
|
+
process(svg, options.merge(@options))
|
32
|
+
end
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
@@ -12,9 +12,7 @@ module Scruffy
|
|
12
12
|
svg.text(options[:point_markers][idx], :x => x_coord, :y => bounds[:height],
|
13
13
|
'font-size' => relative(90),
|
14
14
|
:fill => (options[:theme].marker || 'white').to_s,
|
15
|
-
'text-anchor' => 'middle'
|
16
|
-
'font-family' => options[:theme].font_family,
|
17
|
-
'text-rendering' => 'optimizeLegibility') unless options[:point_markers][idx].nil?
|
15
|
+
'text-anchor' => 'middle') unless options[:point_markers][idx].nil?
|
18
16
|
end
|
19
17
|
end
|
20
18
|
end # draw
|
@@ -1,8 +1,10 @@
|
|
1
1
|
module Scruffy
|
2
2
|
module Components
|
3
3
|
class Grid < Base
|
4
|
+
attr_accessor :markers
|
5
|
+
|
4
6
|
def draw(svg, bounds, options={})
|
5
|
-
markers = options[:markers] || 5
|
7
|
+
markers = (options[:markers] || self.markers) || 5
|
6
8
|
|
7
9
|
(0...markers).each do |idx|
|
8
10
|
marker = ((1 / (markers - 1).to_f) * idx) * bounds[:height]
|
@@ -4,8 +4,7 @@ module Scruffy
|
|
4
4
|
def draw(svg, bounds, options={})
|
5
5
|
svg.text(@options[:text], :class => 'text', :x => (bounds[:width] / 2), :y => bounds[:height],
|
6
6
|
'font-size' => relative(100), :fill => options[:theme].marker, :stroke => 'none', 'stroke-width' => '0',
|
7
|
-
'text-anchor' => (@options[:text_anchor] || 'middle')
|
8
|
-
'font-family' => options[:theme].font_family, 'text-rendering' => 'optimizeLegibility')
|
7
|
+
'text-anchor' => (@options[:text_anchor] || 'middle'))
|
9
8
|
end
|
10
9
|
end
|
11
10
|
end
|
@@ -20,9 +20,7 @@ module Scruffy::Components
|
|
20
20
|
:x => offset + point + relative(100),
|
21
21
|
:y => relative(80),
|
22
22
|
'font-size' => relative(80),
|
23
|
-
:fill => (options[:theme].marker || 'white')
|
24
|
-
'font-family' => options[:theme].font_family,
|
25
|
-
'text-rendering' => 'optimizeLegibility')
|
23
|
+
:fill => (options[:theme].marker || 'white'))
|
26
24
|
end
|
27
25
|
end # draw
|
28
26
|
|
@@ -5,6 +5,11 @@ module Scruffy
|
|
5
5
|
# In hindsight, ImageMagick and Mozilla SVG's handling of CSS styling is
|
6
6
|
# extremely inconsistant, so use this at your own risk.
|
7
7
|
class StyleInfo < Base
|
8
|
+
def initialize(*args)
|
9
|
+
super
|
10
|
+
|
11
|
+
@visible = false
|
12
|
+
end
|
8
13
|
def process(svg, options={})
|
9
14
|
svg.defs {
|
10
15
|
svg.style(:type => "text/css") {
|
@@ -4,8 +4,7 @@ module Scruffy
|
|
4
4
|
def draw(svg, bounds, options={})
|
5
5
|
svg.text(options[:title], :class => 'title', :x => (bounds[:width] / 2), :y => bounds[:height],
|
6
6
|
'font-size' => relative(100), :fill => options[:theme].marker, :stroke => 'none', 'stroke-width' => '0',
|
7
|
-
'text-anchor' => (@options[:text_anchor] || 'middle')
|
8
|
-
'font-family' => options[:theme].font_family, 'text-rendering' => 'optimizeLegibility')
|
7
|
+
'text-anchor' => (@options[:text_anchor] || 'middle'))
|
9
8
|
end
|
10
9
|
end
|
11
10
|
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
module Scruffy
|
2
2
|
module Components
|
3
3
|
class ValueMarkers < Base
|
4
|
+
attr_accessor :markers
|
5
|
+
|
4
6
|
def draw(svg, bounds, options={})
|
5
|
-
markers = options[:markers] || 5
|
7
|
+
markers = (options[:markers] || self.markers) || 5
|
6
8
|
all_values = []
|
7
9
|
|
8
10
|
(0...markers).each do |idx|
|
@@ -18,11 +20,9 @@ module Scruffy
|
|
18
20
|
svg.text( marker_value.to_s,
|
19
21
|
:x => bounds[:width],
|
20
22
|
:y => (bounds[:height] - marker),
|
21
|
-
'font-size' => relative(
|
23
|
+
'font-size' => relative(8),
|
22
24
|
:fill => ((options.delete(:marker_color_override) || options[:theme].marker) || 'white').to_s,
|
23
|
-
'text-anchor' => 'end'
|
24
|
-
'font-family' => options[:theme].font_family,
|
25
|
-
'text-rendering' => 'optimizeLegibility')
|
25
|
+
'text-anchor' => 'end')
|
26
26
|
end
|
27
27
|
|
28
28
|
end
|
data/lib/scruffy/formatters.rb
CHANGED
@@ -46,6 +46,25 @@ module Scruffy::Formatters
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
# Allows you to pass in a Proc for use as a formatter.
|
50
|
+
#
|
51
|
+
# Use:
|
52
|
+
#
|
53
|
+
# graph.value_formatter = Scruffy::Formatters::Custom.new { |value, idx, options| "Displays Returned Value" }
|
54
|
+
class Custom < Base
|
55
|
+
attr_reader :proc
|
56
|
+
|
57
|
+
def initialize(&block)
|
58
|
+
self.proc = block
|
59
|
+
end
|
60
|
+
|
61
|
+
def format(target, idx, options)
|
62
|
+
proc.call(target, idx, options)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
|
49
68
|
# Default number formatter.
|
50
69
|
# Limits precision, beautifies numbers.
|
51
70
|
class Number < Base
|
data/lib/scruffy/graph.rb
CHANGED
@@ -159,11 +159,20 @@ module Scruffy
|
|
159
159
|
options[:as] ? rasterizer.rasterize(svg, options) : svg
|
160
160
|
end
|
161
161
|
|
162
|
-
|
163
162
|
def renderer=(val)
|
164
163
|
raise ArgumentError, "Renderer must include a #render(options) method." unless (val.respond_to?(:render) && val.method(:render).arity.abs > 0)
|
165
164
|
|
166
165
|
@renderer = val
|
167
166
|
end
|
167
|
+
|
168
|
+
alias :layout :renderer
|
169
|
+
|
170
|
+
def component(id)
|
171
|
+
renderer.component(id)
|
172
|
+
end
|
173
|
+
|
174
|
+
def remove(id)
|
175
|
+
renderer.remove(id)
|
176
|
+
end
|
168
177
|
end
|
169
178
|
end
|
data/lib/scruffy/helpers.rb
CHANGED
@@ -7,6 +7,20 @@ module Scruffy::Helpers
|
|
7
7
|
# Provides common methods for canvas objects. Primarily used for providing spacial-type calculations
|
8
8
|
# where necessary.
|
9
9
|
module Canvas
|
10
|
+
attr_accessor :components
|
11
|
+
|
12
|
+
def reset_settings!
|
13
|
+
self.options = {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def component(id, components=self.components)
|
17
|
+
components.find { |elem| elem.id == id }
|
18
|
+
end
|
19
|
+
|
20
|
+
def remove(id, components=self.components)
|
21
|
+
components.delete(component(id))
|
22
|
+
end
|
23
|
+
|
10
24
|
protected
|
11
25
|
# Converts percentage values into actual pixe values based on the known render size.
|
12
26
|
#
|
@@ -1,4 +1,5 @@
|
|
1
1
|
module Scruffy::Helpers
|
2
|
+
|
2
3
|
# ==Scruffy::Helpers::LayerContainer
|
3
4
|
#
|
4
5
|
# Author:: Brasten Sager
|
@@ -8,10 +9,12 @@ module Scruffy::Helpers
|
|
8
9
|
# container for graph layers. The best example of this is the Scruffy::Graph
|
9
10
|
# object itself, but this module is also used by Scruffy::Layer::Stacked.
|
10
11
|
module LayerContainer
|
11
|
-
|
12
|
-
# a
|
13
|
-
#
|
14
|
-
#
|
12
|
+
|
13
|
+
# Adds a Layer to the Graph/Container. Accepts either a list of
|
14
|
+
# arguments used to build a new layer, or a Scruffy::Layers::Base-derived
|
15
|
+
# object. When passing a list of arguments, all arguments are optional,
|
16
|
+
# but the arguments specified must be provided in a particular order:
|
17
|
+
# type (Symbol), title (String), points (Array), options (Hash).
|
15
18
|
#
|
16
19
|
# Both #add and #<< can be used.
|
17
20
|
#
|
data/lib/scruffy/layers/area.rb
CHANGED
@@ -36,6 +36,9 @@ module Scruffy::Layers
|
|
36
36
|
# }
|
37
37
|
# }
|
38
38
|
# }
|
39
|
+
svg.g(:transform => "translate(0, -#{relative(2)})") {
|
40
|
+
svg.polygon(:points => points_value, :style => "fill: black; stroke: black; fill-opacity: 0.06; stroke-opacity: 0.06;")
|
41
|
+
}
|
39
42
|
|
40
43
|
svg.polygon(:points => points_value, :fill => color.to_s, :stroke => color.to_s, 'style' => "opacity: #{opacity}")
|
41
44
|
end
|
data/lib/scruffy/layers/bar.rb
CHANGED
@@ -12,6 +12,14 @@ module Scruffy::Layers
|
|
12
12
|
coords.each do |coord|
|
13
13
|
x, y, bar_height = (coord.first-(@bar_width * 0.5)), coord.last, (height - coord.last)
|
14
14
|
|
15
|
+
svg.g(:transform => "translate(-#{relative(0.5)}, -#{relative(0.5)})") {
|
16
|
+
svg.rect( :x => x, :y => y, :width => @bar_width + relative(1), :height => bar_height + relative(1),
|
17
|
+
:style => "fill: black; fill-opacity: 0.15; stroke: none;" )
|
18
|
+
svg.rect( :x => x+relative(0.5), :y => y+relative(2), :width => @bar_width + relative(1), :height => bar_height - relative(0.5),
|
19
|
+
:style => "fill: black; fill-opacity: 0.15; stroke: none;" )
|
20
|
+
|
21
|
+
}
|
22
|
+
|
15
23
|
svg.rect( :x => x, :y => y, :width => @bar_width, :height => bar_height,
|
16
24
|
:fill => color.to_s, 'style' => "opacity: #{opacity}; stroke: none;" )
|
17
25
|
end
|
data/lib/scruffy/layers/line.rb
CHANGED
@@ -9,11 +9,21 @@ module Scruffy::Layers
|
|
9
9
|
|
10
10
|
# Renders line graph.
|
11
11
|
def draw(svg, coords, options={})
|
12
|
+
svg.g(:class => 'shadow', :transform => "translate(#{relative(0.5)}, #{relative(0.5)})") {
|
13
|
+
svg.polyline( :points => stringify_coords(coords).join(' '), :fill => 'transparent',
|
14
|
+
:stroke => 'black', 'stroke-width' => relative(2),
|
15
|
+
:style => 'fill-opacity: 0; stroke-opacity: 0.35' )
|
16
|
+
|
17
|
+
coords.each { |coord| svg.circle( :cx => coord.first, :cy => coord.last + relative(0.9), :r => relative(2),
|
18
|
+
:style => "stroke-width: #{relative(2)}; stroke: black; opacity: 0.35;" ) }
|
19
|
+
}
|
20
|
+
|
21
|
+
|
12
22
|
svg.polyline( :points => stringify_coords(coords).join(' '), :fill => 'none',
|
13
23
|
:stroke => color.to_s, 'stroke-width' => relative(2) )
|
14
24
|
|
15
|
-
coords.each { |coord| svg.circle( :cx => coord.first, :cy => coord.last, :r => relative(2
|
16
|
-
:
|
25
|
+
coords.each { |coord| svg.circle( :cx => coord.first, :cy => coord.last, :r => relative(2),
|
26
|
+
:style => "stroke-width: #{relative(2)}; stroke: #{color.to_s}; fill: #{color.to_s}" ) }
|
17
27
|
end
|
18
28
|
end
|
19
29
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'builder'
|
1
2
|
module Scruffy::Renderers
|
2
3
|
# ===Scruffy::Renderers::Base
|
3
4
|
#
|
@@ -11,19 +12,29 @@ module Scruffy::Renderers
|
|
11
12
|
class Base
|
12
13
|
include Scruffy::Helpers::Canvas
|
13
14
|
|
14
|
-
attr_accessor :
|
15
|
+
attr_accessor :options
|
16
|
+
|
17
|
+
def initialize(options = {})
|
18
|
+
self.components = []
|
19
|
+
self.options = options
|
20
|
+
define_layout
|
21
|
+
end
|
15
22
|
|
16
23
|
# Renders the graph and all components.
|
17
24
|
def render(options = {})
|
18
25
|
options[:graph_id] ||= 'scruffy_graph'
|
19
26
|
options[:complexity] ||= (global_complexity || :normal)
|
20
27
|
|
28
|
+
# Allow subclasses to muck with components prior to renders.
|
29
|
+
rendertime_renderer = self.clone
|
30
|
+
rendertime_renderer.instance_eval { before_render if respond_to?(:before_render) }
|
31
|
+
|
21
32
|
svg = Builder::XmlMarkup.new(:indent => 2)
|
22
33
|
svg.instruct!
|
23
34
|
svg.instruct! 'DOCTYPE', 'svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" type'
|
24
35
|
svg.svg(:xmlns => "http://www.w3.org/2000/svg", 'xmlns:xlink' => "http://www.w3.org/1999/xlink", :width => options[:size].first, :height => options[:size].last) {
|
25
36
|
svg.g(:id => options[:graph_id]) {
|
26
|
-
|
37
|
+
rendertime_renderer.components.each do |component|
|
27
38
|
component.render(svg,
|
28
39
|
bounds_for( options[:size], component.position, component.size ),
|
29
40
|
options)
|
@@ -32,7 +43,42 @@ module Scruffy::Renderers
|
|
32
43
|
}
|
33
44
|
svg.target!
|
34
45
|
end
|
35
|
-
|
46
|
+
|
47
|
+
def before_render
|
48
|
+
set_values(self.options[:values]) if (self.options[:values] && self.options[:values] != :hide)
|
49
|
+
hide_grid if (self.options[:grid] == :hide)
|
50
|
+
hide_values if (self.options[:values] == :hide)
|
51
|
+
hide_labels if (self.options[:labels] == :hide)
|
52
|
+
end
|
53
|
+
|
54
|
+
def method_missing(sym, *args)
|
55
|
+
self.options = {} if self.options.nil?
|
56
|
+
|
57
|
+
if args.size > 0
|
58
|
+
self.options[sym] = args[0]
|
59
|
+
else
|
60
|
+
return self.options[sym]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
protected
|
65
|
+
def hide_grid
|
66
|
+
grids.each { |grid| grid.visible = false }
|
67
|
+
end
|
68
|
+
|
69
|
+
def set_values(val)
|
70
|
+
values.each { |value| value.markers = val }
|
71
|
+
grids.each { |grid| grid.markers = val }
|
72
|
+
end
|
73
|
+
|
74
|
+
def hide_values
|
75
|
+
values.each { |value| value.visible = false }
|
76
|
+
end
|
77
|
+
|
78
|
+
def hide_labels
|
79
|
+
labels.each { |label| label.visible = false }
|
80
|
+
end
|
81
|
+
|
36
82
|
private
|
37
83
|
def global_complexity
|
38
84
|
if Kernel.const_defined? "SCRUFFY_COMPLEXITY"
|
@@ -41,5 +87,5 @@ module Scruffy::Renderers
|
|
41
87
|
nil
|
42
88
|
end
|
43
89
|
end
|
44
|
-
end
|
90
|
+
end # base
|
45
91
|
end
|
@@ -13,11 +13,10 @@ module Scruffy::Renderers
|
|
13
13
|
#
|
14
14
|
# If a block is provided, the components array is passed to
|
15
15
|
# the block, allowing callers to add components during initialize.
|
16
|
-
def
|
17
|
-
self.components = []
|
16
|
+
def define_layout
|
18
17
|
self.components << Scruffy::Components::Background.new(:background, :position => [0,0], :size =>[100, 100])
|
19
18
|
|
20
|
-
yield(components) if block_given?
|
19
|
+
yield(self.components) if block_given?
|
21
20
|
end
|
22
21
|
end
|
23
22
|
end
|
@@ -2,8 +2,7 @@ module Scruffy
|
|
2
2
|
module Renderers
|
3
3
|
class Reversed < Base
|
4
4
|
|
5
|
-
def
|
6
|
-
self.components = []
|
5
|
+
def define_layout
|
7
6
|
self.components << Scruffy::Components::Background.new(:background, :position => [0,0], :size =>[100, 100])
|
8
7
|
self.components << Scruffy::Components::Title.new(:title, :position => [98, 95], :size => [1, 3], :text_anchor => 'end')
|
9
8
|
#self.components << Scruffy::Components::Grid.new(:grid, :position => [14, 12], :size => [78.5, 70])
|
@@ -2,8 +2,7 @@ module Scruffy
|
|
2
2
|
module Renderers
|
3
3
|
# Experimental, do not use.
|
4
4
|
class Sparkline < Base
|
5
|
-
def
|
6
|
-
self.components = []
|
5
|
+
def define_layout
|
7
6
|
self.components << Scruffy::Components::Graphs.new(:sparkline, :position => [0, 0], :size => [100, 100])
|
8
7
|
end
|
9
8
|
end
|
@@ -1,29 +1,43 @@
|
|
1
1
|
module Scruffy
|
2
2
|
module Renderers
|
3
3
|
# Renderer that splits the graphs up into four other little graphs.
|
4
|
-
class Split <
|
5
|
-
def
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
:position => [30, 54.5], :size => [40, 3])
|
4
|
+
class Split < Empty
|
5
|
+
def define_layout
|
6
|
+
super do |components|
|
7
|
+
components << Scruffy::Components::Title.new(:title, :position => [5, 2], :size => [90, 7])
|
8
|
+
components << Scruffy::Components::Label.new(:label_one, :text => self.options[:split_label] || '',
|
9
|
+
:position => [30, 54.5], :size => [40, 3])
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
# Viewports
|
12
|
+
components << Scruffy::Components::Viewport.new(:top, :position => [3, 20],
|
13
|
+
:size => [90, 30], &graph_block(:top))
|
14
|
+
components << Scruffy::Components::Viewport.new(:bottom, :position => [3, 65],
|
15
|
+
:size => [90, 30], &graph_block(:bottom))
|
17
16
|
|
18
|
-
|
17
|
+
components << Scruffy::Components::Legend.new(:legend, :position => [5, 11], :size => [90, 4])
|
18
|
+
end
|
19
19
|
end
|
20
20
|
|
21
|
+
protected
|
22
|
+
def labels
|
23
|
+
[component(:top).component(:labels), component(:bottom).component(:labels)]
|
24
|
+
end
|
25
|
+
|
26
|
+
def values
|
27
|
+
[component(:top).component(:values), component(:bottom).component(:values)]
|
28
|
+
end
|
29
|
+
|
30
|
+
def grids
|
31
|
+
[component(:top).component(:grid), component(:bottom).component(:grid)]
|
32
|
+
end
|
33
|
+
|
34
|
+
|
21
35
|
private
|
22
36
|
def graph_block(graph_filter)
|
23
37
|
block = Proc.new { |components|
|
24
38
|
components << Scruffy::Components::Grid.new(:grid, :position => [10, 0], :size => [90, 89])
|
25
|
-
components << Scruffy::Components::ValueMarkers.new(:
|
26
|
-
components << Scruffy::Components::DataMarkers.new(:
|
39
|
+
components << Scruffy::Components::ValueMarkers.new(:values, :position => [0, 2], :size => [8, 89])
|
40
|
+
components << Scruffy::Components::DataMarkers.new(:labels, :position => [10, 92], :size => [90, 8])
|
27
41
|
components << Scruffy::Components::Graphs.new(:graphs, :position => [10, 0], :size => [90, 89], :only => graph_filter)
|
28
42
|
}
|
29
43
|
|
@@ -1,20 +1,36 @@
|
|
1
|
-
module Scruffy
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
view << Scruffy::Components::DataMarkers.new(:data_markers, :position => [20, 94], :size => [80, 6])
|
13
|
-
view << Scruffy::Components::Graphs.new(:graphs, :position => [20, 0], :size => [80, 90])
|
1
|
+
module Scruffy::Renderers
|
2
|
+
class Standard < Empty
|
3
|
+
|
4
|
+
def define_layout
|
5
|
+
super do |components|
|
6
|
+
components << Scruffy::Components::Title.new(:title, :position => [5, 2], :size => [90, 7])
|
7
|
+
components << Scruffy::Components::Viewport.new(:view, :position => [2, 26], :size => [89, 66]) do |graph|
|
8
|
+
graph << Scruffy::Components::ValueMarkers.new(:values, :position => [0, 2], :size => [18, 89])
|
9
|
+
graph << Scruffy::Components::Grid.new(:grid, :position => [20, 0], :size => [80, 89])
|
10
|
+
graph << Scruffy::Components::DataMarkers.new(:labels, :position => [20, 92], :size => [80, 8])
|
11
|
+
graph << Scruffy::Components::Graphs.new(:graphs, :position => [20, 0], :size => [80, 89])
|
14
12
|
end
|
15
|
-
|
13
|
+
components << Scruffy::Components::Legend.new(:legend, :position => [5, 13], :size => [90, 6])
|
16
14
|
end
|
17
|
-
|
18
15
|
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
def hide_values
|
19
|
+
super
|
20
|
+
component(:view).position[0] = -10
|
21
|
+
component(:view).size[0] = 100
|
22
|
+
end
|
23
|
+
|
24
|
+
def labels
|
25
|
+
[component(:view).component(:labels)]
|
26
|
+
end
|
27
|
+
|
28
|
+
def values
|
29
|
+
[component(:view).component(:values)]
|
30
|
+
end
|
31
|
+
|
32
|
+
def grids
|
33
|
+
[component(:view).component(:grid)]
|
34
|
+
end
|
19
35
|
end
|
20
36
|
end
|
data/lib/scruffy/themes.rb
CHANGED
@@ -16,10 +16,10 @@ module Scruffy::Themes
|
|
16
16
|
#
|
17
17
|
# See Scruffy::Themes::Base#instantiate for examples.
|
18
18
|
class Base
|
19
|
-
attr_accessor :background
|
20
|
-
attr_accessor :colors
|
21
|
-
attr_accessor :marker
|
22
|
-
attr_accessor :font_family
|
19
|
+
attr_accessor :background # Background color or array of two colors
|
20
|
+
attr_accessor :colors # Array of colors for data graphs
|
21
|
+
attr_accessor :marker # Marker color for grid lines, values, etc.
|
22
|
+
attr_accessor :font_family # Font family: Not really supported. Maybe in the future.
|
23
23
|
|
24
24
|
# Returns a new Scruffy::Themes::Base object.
|
25
25
|
#
|
@@ -28,7 +28,8 @@ module Scruffy::Themes
|
|
28
28
|
# colors:: an array of color values to use for graphs.
|
29
29
|
# marker:: color used for grid lines, values, data points, etc.
|
30
30
|
# font_family:: in general, allows you to change the font used in the graph.
|
31
|
-
# This is not yet supported in most graph elements
|
31
|
+
# This is not yet supported in most graph elements,
|
32
|
+
# and may be deprecated soon anyway.
|
32
33
|
def initialize(descriptor)
|
33
34
|
self.background = descriptor[:background]
|
34
35
|
self.colors = descriptor[:colors]
|
data/lib/scruffy/version.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: scruffy
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2006-08-
|
6
|
+
version: 0.2.2
|
7
|
+
date: 2006-08-19 00:00:00 -07:00
|
8
8
|
summary: A powerful, clean graphing library for Ruby.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- lib/scruffy/components/viewport.rb
|
57
57
|
- lib/scruffy/helpers/canvas.rb
|
58
58
|
- lib/scruffy/helpers/layer_container.rb
|
59
|
+
- lib/scruffy/helpers/meta.rb
|
59
60
|
- lib/scruffy/layers/all_smiles.rb
|
60
61
|
- lib/scruffy/layers/area.rb
|
61
62
|
- lib/scruffy/layers/average.rb
|