scruffy 0.0.12 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,6 +1,13 @@
1
1
  = Scruffy Changelog
2
2
 
3
- Version 0.1.0 will be the first release for general use.
3
+ == Version 0.1.0
4
+ (August 11th, 2006)
5
+
6
+ * First public release!
7
+ * Legend rendering
8
+ * Rasterizing graph to multiple image types (graph.render :as => 'PNG')
9
+
10
+
4
11
 
5
12
  == Version 0.0.12
6
13
  (August 10th, 2006)
data/Rakefile CHANGED
@@ -42,7 +42,7 @@ Rake::RDocTask.new { |rdoc|
42
42
  rdoc.rdoc_files.include('README', 'CHANGES')
43
43
  rdoc.rdoc_files.include('lib/scruffy.rb')
44
44
  rdoc.rdoc_files.include('lib/scruffy/*.rb')
45
- rdoc.rdoc_files.include('lib/scruffy/graph_layers/*.rb')
45
+ rdoc.rdoc_files.include('lib/scruffy/layers/*.rb')
46
46
  rdoc.rdoc_files.include('lib/scruffy/renderers/*.rb')
47
47
  }
48
48
 
data/lib/scruffy.rb CHANGED
@@ -9,6 +9,7 @@ require 'scruffy/graph'
9
9
  require 'scruffy/themes'
10
10
  require 'scruffy/version'
11
11
  require 'scruffy/transformer'
12
+ require 'scruffy/rasterizers'
12
13
  require 'scruffy/resolver'
13
14
  require 'scruffy/layers'
14
15
 
data/lib/scruffy/graph.rb CHANGED
@@ -123,14 +123,20 @@ module Scruffy
123
123
  # min_value:: Overrides the calculated minimum value used for the graph.
124
124
  # max_value:: Overrides the calculated maximum value used for the graph.
125
125
  #
126
+ # For other image formats:
127
+ # as:: File format to render to ('PNG', 'JPG', etc)
128
+ # to:: Name of file to save graph to, if desired. If not provided, image is returned as blob.
126
129
  def render(options = {})
127
130
  size = options.delete(:size) || (options[:width] ? [options[:width], (options.delete(:width) * 0.6).to_i] : [600, 400])
128
131
  options[:theme] ||= @theme
129
132
  options[:marker_transformer] ||= @marker_transformer
130
133
  options[:point_markers] ||= @point_markers
131
134
 
132
- self.renderer.render( options.merge({:size => size, :title => title,
133
- :layers => layers, :min_value => (options[:min_value] || bottom_value), :max_value => (options[:max_value] || top_value) } ) )
135
+ svg = self.renderer.render( options.merge({:size => size, :title => title,
136
+ :layers => layers, :min_value => (options[:min_value] || bottom_value),
137
+ :max_value => (options[:max_value] || top_value) } ) )
138
+
139
+ options[:as] ? Scruffy::Rasterizers::RMagickRasterizer.new.rasterize(svg, options) : svg
134
140
  end
135
141
 
136
142
  # Adds a Layer to the Graph. Accepts either a list of arguments used to build a new layer, or
@@ -1,6 +1,13 @@
1
1
  module Scruffy
2
+ # ==Scruffy::Layers
3
+ #
4
+ # Author:: Brasten Sager
5
+ # Date:: August 10th, 2006
6
+ #
7
+ # See documentation in Scruffy::Layers::Base
8
+ #
2
9
  module Layers
3
- # ==Base
10
+ # ==Scruffy::Layers::Base
4
11
  #
5
12
  # Author:: Brasten Sager
6
13
  # Date:: August 5th, 2006
@@ -0,0 +1 @@
1
+ require 'scruffy/rasterizers/rmagick_rasterizer.rb'
@@ -0,0 +1,26 @@
1
+ module Scruffy
2
+ # ===Scruffy Rasterizers
3
+ #
4
+ # Author:: Brasten Sager
5
+ # Date:: August 10th, 2006
6
+ #
7
+ # These handle the job of rasterizing SVG images to other image formats.
8
+ # At the moment, only RMagickRasterizer exists, but others may soon follow.
9
+ #
10
+ # I'm somewhat interesting in finding a way to integrate Apache Batik, as it's
11
+ # SVG rendering seems to be superior to ImageMagick's.
12
+ module Rasterizers
13
+ class RMagickRasterizer
14
+ def rasterize(svg, options={})
15
+ require 'RMagick'
16
+
17
+ image = Magick::Image::from_blob(svg)[0]
18
+ if options[:to]
19
+ image.write(options[:to]) { self.format = options[:as] }
20
+ end
21
+
22
+ image.to_blob { self.format = options[:as] }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -24,6 +24,7 @@ module Scruffy
24
24
  render_markers(svg, options)
25
25
  render_title(svg, options)
26
26
  render_layers(svg, options)
27
+ render_legend(svg, options)
27
28
 
28
29
  }
29
30
  }
@@ -55,6 +56,8 @@ module Scruffy
55
56
 
56
57
  def render_layers(svg, options)
57
58
  svg.g(:id => 'graphs', :transform => "translate(#{GRAPH_VIEWPORT[:x] * options[:size][0]},#{GRAPH_VIEWPORT[:y] * options[:size][1]})") {
59
+ options[:legend_information] = {}
60
+
58
61
  options[:layers].each_with_index do |layer, idx|
59
62
 
60
63
  layer_options = {}
@@ -74,6 +77,7 @@ module Scruffy
74
77
 
75
78
  svg.g {
76
79
  layer.render(svg, layer_options)
80
+ (options[:legend_information][layer.title] = layer.color) unless layer.title.nil?
77
81
  }
78
82
  end
79
83
  }
@@ -111,6 +115,28 @@ module Scruffy
111
115
  }
112
116
  end
113
117
  end
118
+
119
+ def render_legend(svg, options)
120
+ scaled = options[:resolver]
121
+
122
+ active_width = scaled.to_point(100) * options[:legend_information].size
123
+
124
+ svg.g(:transform => "translate(#{(options[:size][0] * 0.5) - (active_width * 0.5) + scaled.to_point(50)}, #{options[:size][1] * 0.12})") {
125
+ point_distance = scaled.to_point(100)
126
+ points = (0...options[:legend_information].size).map { |idx| idx * point_distance }
127
+
128
+
129
+ points.each_with_index do |point, idx|
130
+ svg.rect(:x => point, :y => scaled.to_point(18),
131
+ :width => scaled.to_point(13), :height => scaled.to_point(13),
132
+ :fill => options[:legend_information].values[idx])
133
+ svg.text( options[:legend_information].keys[idx], :x => point + scaled.to_point(25),
134
+ :y => scaled.to_point(30), 'font-size' => scaled.to_point(15),
135
+ :fill => (options[:theme][:marker] || 'white'))
136
+
137
+ end
138
+ }
139
+ end
114
140
 
115
141
  def render_title(svg, options)
116
142
  svg.g(:transform => "translate(0, #{options[:size][1] * 0.09})") {
@@ -1,3 +1,3 @@
1
1
  module Scruffy
2
- VERSION = '0.0.12'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: scruffy
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.12
6
+ version: 0.1.0
7
7
  date: 2006-08-10 00:00:00 -07:00
8
8
  summary: A powerful, clean graphing library for Ruby.
9
9
  require_paths:
@@ -36,6 +36,7 @@ files:
36
36
  - lib/scruffy.rb
37
37
  - lib/scruffy/graph.rb
38
38
  - lib/scruffy/layers.rb
39
+ - lib/scruffy/rasterizers.rb
39
40
  - lib/scruffy/resolver.rb
40
41
  - lib/scruffy/themes.rb
41
42
  - lib/scruffy/transformer.rb
@@ -46,6 +47,7 @@ files:
46
47
  - lib/scruffy/layers/bar.rb
47
48
  - lib/scruffy/layers/base.rb
48
49
  - lib/scruffy/layers/line.rb
50
+ - lib/scruffy/rasterizers/rmagick_rasterizer.rb
49
51
  - lib/scruffy/renderers/standard.rb
50
52
  - spec/graph_spec.rb
51
53
  test_files: []