chunky_png 0.7.3 → 0.8.0

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.
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
3
3
 
4
4
  # Do not change the version and date fields by hand. This will be done
5
5
  # automatically by the gem release script.
6
- s.version = "0.7.3"
7
- s.date = "2010-04-29"
6
+ s.version = "0.8.0"
7
+ s.date = "2010-07-01"
8
8
 
9
9
  s.summary = "Pure ruby library for read/write, chunk-level access to PNG files"
10
10
  s.description = <<-EOT
@@ -32,6 +32,6 @@ Gem::Specification.new do |s|
32
32
 
33
33
  # Do not change the files and test_files fields by hand. This will be done
34
34
  # automatically by the gem release script.
35
- s.files = %w(spec/spec_helper.rb spec/resources/ztxt_chunk.png spec/resources/text_chunk.png spec/resources/replaced.png spec/resources/pixelstream.rgb spec/resources/indexed_4bit.png spec/resources/gray_10x10_grayscale.png spec/resources/damaged_signature.png spec/resources/damaged_chunk.png spec/resources/clock_updated.png spec/chunky_png/canvas/png_encoding_spec.rb lib/chunky_png/canvas/stream_exporting.rb spec/resources/gray_10x10.png lib/chunky_png/color.rb lib/chunky_png/canvas/operations.rb spec/resources/clock.png .gitignore spec/resources/gray_10x10_truecolor_alpha.png spec/chunky_png/canvas_spec.rb LICENSE spec/resources/gray_10x10_truecolor.png spec/resources/composited.png spec/resources/clock_mask.png spec/chunky_png/color_spec.rb spec/chunky_png/canvas/adam7_interlacing_spec.rb lib/chunky_png/chunk.rb lib/chunky_png/canvas/stream_importing.rb lib/chunky_png/canvas/png_encoding.rb lib/chunky_png/canvas/adam7_interlacing.rb spec/resources/operations.png spec/chunky_png/canvas/png_decoding_spec.rb lib/chunky_png/canvas.rb Rakefile spec/resources/transparent_gray_10x10.png spec/resources/pixelstream.rgba spec/resources/cropped.png README.rdoc spec/resources/gray_10x10_indexed.png spec/resources/clock_base.png spec/resources/16x16_non_interlaced.png spec/chunky_png_spec.rb spec/chunky_png/canvas/drawing_spec.rb lib/chunky_png/palette.rb lib/chunky_png/datastream.rb chunky_png.gemspec tasks/github-gem.rake spec/resources/pixelstream_reference.png spec/resources/lines.png spec/resources/gray_10x10_grayscale_alpha.png spec/resources/16x16_interlaced.png spec/chunky_png/image_spec.rb lib/chunky_png/canvas/drawing.rb spec/resources/clock_mask_updated.png spec/resources/adam7.png lib/chunky_png/rmagick.rb lib/chunky_png/image.rb spec/chunky_png/rmagick_spec.rb spec/chunky_png/datastream_spec.rb lib/chunky_png/canvas/png_decoding.rb lib/chunky_png.rb)
35
+ s.files = %w(spec/spec_helper.rb spec/resources/ztxt_chunk.png spec/resources/text_chunk.png spec/resources/replaced.png spec/resources/pixelstream.rgb spec/resources/indexed_4bit.png spec/resources/gray_10x10_grayscale.png spec/resources/damaged_signature.png spec/resources/damaged_chunk.png spec/resources/clock_updated.png spec/chunky_png/canvas/png_encoding_spec.rb lib/chunky_png/canvas/stream_exporting.rb spec/resources/gray_10x10.png lib/chunky_png/color.rb lib/chunky_png/canvas/operations.rb spec/resources/clock.png .gitignore spec/resources/gray_10x10_truecolor_alpha.png spec/chunky_png/canvas_spec.rb LICENSE spec/resources/gray_10x10_truecolor.png spec/resources/composited.png spec/resources/clock_mask.png spec/chunky_png/color_spec.rb spec/chunky_png/canvas/adam7_interlacing_spec.rb lib/chunky_png/chunk.rb lib/chunky_png/canvas/stream_importing.rb lib/chunky_png/canvas/png_encoding.rb lib/chunky_png/canvas/adam7_interlacing.rb spec/resources/operations.png spec/chunky_png/canvas/png_decoding_spec.rb lib/chunky_png/canvas.rb Rakefile spec/resources/transparent_gray_10x10.png spec/resources/pixelstream.rgba spec/resources/cropped.png README.rdoc spec/resources/gray_10x10_indexed.png spec/resources/clock_base.png spec/resources/16x16_non_interlaced.png spec/chunky_png_spec.rb spec/chunky_png/canvas/drawing_spec.rb lib/chunky_png/palette.rb lib/chunky_png/datastream.rb chunky_png.gemspec tasks/github-gem.rake spec/resources/pixelstream_reference.png spec/resources/lines.png spec/resources/gray_10x10_grayscale_alpha.png spec/resources/16x16_interlaced.png spec/chunky_png/image_spec.rb lib/chunky_png/canvas/drawing.rb spec/resources/rect.png spec/resources/clock_mask_updated.png spec/resources/adam7.png lib/chunky_png/rmagick.rb lib/chunky_png/image.rb spec/chunky_png/rmagick_spec.rb spec/chunky_png/datastream_spec.rb lib/chunky_png/canvas/png_decoding.rb lib/chunky_png.rb)
36
36
  s.test_files = %w(spec/chunky_png/canvas/png_encoding_spec.rb spec/chunky_png/canvas_spec.rb spec/chunky_png/color_spec.rb spec/chunky_png/canvas/adam7_interlacing_spec.rb spec/chunky_png/canvas/png_decoding_spec.rb spec/chunky_png_spec.rb spec/chunky_png/canvas/drawing_spec.rb spec/chunky_png/image_spec.rb spec/chunky_png/rmagick_spec.rb spec/chunky_png/datastream_spec.rb)
37
37
  end
@@ -27,7 +27,7 @@ module ChunkyPNG
27
27
 
28
28
  # The current version of ChunkyPNG. This value will be updated automatically
29
29
  # by them gem:release rake task.
30
- VERSION = "0.7.3"
30
+ VERSION = "0.8.0"
31
31
 
32
32
  ###################################################
33
33
  # PNG international standard defined constants
@@ -59,10 +59,29 @@ module ChunkyPNG
59
59
  end
60
60
  point(x1, y1, color)
61
61
  end
62
+
63
+ return self
62
64
  end
63
65
 
64
66
  alias :line :line_xiaolin_wu
65
67
 
68
+ def rect(x0, y0, x1, y1, line_color, fill_color = ChunkyPNG::COLOR::TRANSPARENT)
69
+
70
+ # Fill
71
+ [x0, x1].min.upto([x0, x1].max) do |x|
72
+ [y0, y1].min.upto([y0, y1].max) do |y|
73
+ point(x, y, fill_color)
74
+ end
75
+ end
76
+
77
+ # Stroke
78
+ line(x0, y0, x0, y1, line_color)
79
+ line(x0, y1, x1, y1, line_color)
80
+ line(x1, y1, x1, y0, line_color)
81
+ line(x1, y0, x0, y0, line_color)
82
+
83
+ return self
84
+ end
66
85
  end
67
86
  end
68
87
  end
@@ -181,7 +181,7 @@ module ChunkyPNG
181
181
  # @return [Integer] The composited color.
182
182
  # @see ChunkyPNG::Color#compose_precise
183
183
  def compose_quick(fg, bg)
184
- return fg if opaque?(fg)
184
+ return fg if opaque?(fg) || fully_transparent?(bg)
185
185
  return bg if fully_transparent?(fg)
186
186
 
187
187
  a_com = int8_mult(0xff - a(fg), a(bg))
@@ -203,7 +203,7 @@ module ChunkyPNG
203
203
  # @return [Integer] The composited color.
204
204
  # @see ChunkyPNG::Color#compose_quick
205
205
  def compose_precise(fg, bg)
206
- return fg if opaque?(fg)
206
+ return fg if opaque?(fg) || fully_transparent?(bg)
207
207
  return bg if fully_transparent?(fg)
208
208
 
209
209
  fg_a = a(fg).to_f / MAX
@@ -380,7 +380,7 @@ module ChunkyPNG
380
380
  WHITE = rgb(255, 255, 255)
381
381
 
382
382
  # Fully transparent pixel/color
383
- TRANSPARENT = rgba(255, 255, 255, 0)
383
+ TRANSPARENT = rgba(0, 0, 0, 0)
384
384
 
385
385
  ####################################################################
386
386
  # STATIC UTILITY METHODS
@@ -26,4 +26,13 @@ describe ChunkyPNG::Canvas::Drawing do
26
26
  canvas.should == reference_canvas('lines')
27
27
  end
28
28
  end
29
+
30
+ describe '#rect' do
31
+ it "should draw a rectangle with the correct colors" do
32
+ canvas = ChunkyPNG::Canvas.new(16, 16, ChunkyPNG::Color::WHITE)
33
+ canvas.rect(1, 1, 10, 10, ChunkyPNG::Color.rgb(0, 255, 0), ChunkyPNG::Color.rgba(255, 0, 0, 100))
34
+ canvas.rect(5, 5, 14, 14, ChunkyPNG::Color.rgb(0, 0, 255), ChunkyPNG::Color.rgba(255, 255, 0, 100))
35
+ canvas.should == reference_canvas('rect')
36
+ end
37
+ end
29
38
  end
@@ -77,6 +77,11 @@ describe ChunkyPNG::Color do
77
77
  end
78
78
 
79
79
  describe '#compose' do
80
+
81
+ it "should use the foregorund color as is when the background color is fully transparent" do
82
+ compose(@non_opaque, @fully_transparent).should == @non_opaque
83
+ end
84
+
80
85
  it "should use the foregorund color as is when an opaque color is given as foreground color" do
81
86
  compose(@opaque, @white).should == @opaque
82
87
  end
@@ -85,7 +90,7 @@ describe ChunkyPNG::Color do
85
90
  compose(@fully_transparent, @white).should == @white
86
91
  end
87
92
 
88
- it "should compose pixels correctly" do
93
+ it "should compose pixels correctly with both algorithms" do
89
94
  compose_quick(@non_opaque, @white).should == 0x9fc2d6ff
90
95
  compose_precise(@non_opaque, @white).should == 0x9fc2d6ff
91
96
  end
Binary file
@@ -119,24 +119,43 @@ module GithubGem
119
119
  checks = [:check_current_branch, :check_clean_status, :check_not_diverged, :check_version]
120
120
  checks.unshift('spec:basic') if has_specs?
121
121
  checks.unshift('test:basic') if has_tests?
122
- checks.push << [:check_rubyforge] if gemspec.rubyforge_project
122
+ # checks.push << [:check_rubyforge] if gemspec.rubyforge_project
123
123
 
124
124
  desc "Perform all checks that would occur before a release"
125
125
  task(:release_checks => checks)
126
126
 
127
127
  release_tasks = [:release_checks, :set_version, :build, :github_release, :gemcutter_release]
128
- release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
128
+ # release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
129
129
 
130
- desc "Release a new verison of the gem"
130
+ desc "Release a new version of the gem using the VERSION environment variable"
131
131
  task(:release => release_tasks) { release_task }
132
+
133
+ namespace(:release) do
134
+ desc "Release the next version of the gem, by incrementing the last version segment by 1"
135
+ task(:next => [:next_version] + release_tasks) { release_task }
132
136
 
133
- task(:check_rubyforge) { check_rubyforge_task }
134
- task(:rubyforge_release) { rubyforge_release_task }
137
+ desc "Release the next version of the gem, using a bump increment (0.0.1)"
138
+ task(:bump => [:next_bump_version] + release_tasks) { release_task }
139
+
140
+ desc "Release the next version of the gem, using a minor increment (0.1.0)"
141
+ task(:minor => [:next_minor_version] + release_tasks) { release_task }
142
+
143
+ desc "Release the next version of the gem, using a major increment (1.0.0)"
144
+ task(:major => [:next_major_version] + release_tasks) { release_task }
145
+ end
146
+
147
+ # task(:check_rubyforge) { check_rubyforge_task }
148
+ # task(:rubyforge_release) { rubyforge_release_task }
135
149
  task(:gemcutter_release) { gemcutter_release_task }
136
150
  task(:github_release => [:commit_modified_files, :tag_version]) { github_release_task }
137
151
  task(:tag_version) { tag_version_task }
138
152
  task(:commit_modified_files) { commit_modified_files_task }
139
153
 
154
+ task(:next_version) { next_version_task }
155
+ task(:next_bump_version) { next_version_task(:bump) }
156
+ task(:next_minor_version) { next_version_task(:minor) }
157
+ task(:next_major_version) { next_version_task(:major) }
158
+
140
159
  desc "Updates the gem release tasks with the latest version on Github"
141
160
  task(:update_tasks) { update_tasks_task }
142
161
  end
@@ -160,6 +179,32 @@ module GithubGem
160
179
  sh "mv #{gemspec.name}-#{gemspec.version}.gem pkg/#{gemspec.name}-#{gemspec.version}.gem"
161
180
  end
162
181
 
182
+ def newest_version
183
+ git.tags.map { |tag| tag.name.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max || Gem::Version.new('0.0.0')
184
+ end
185
+
186
+ def next_version(increment = nil)
187
+ next_version = newest_version.segments
188
+ increment_index = case increment
189
+ when :micro then 3
190
+ when :bump then 2
191
+ when :minor then 1
192
+ when :major then 0
193
+ else next_version.length - 1
194
+ end
195
+
196
+ next_version[increment_index] ||= 0
197
+ next_version[increment_index] = next_version[increment_index].succ
198
+ ((increment_index + 1)...next_version.length).each { |i| next_version[i] = 0 }
199
+
200
+ Gem::Version.new(next_version.join('.'))
201
+ end
202
+
203
+ def next_version_task(increment = nil)
204
+ ENV['VERSION'] = next_version(increment).version
205
+ puts "Releasing version #{ENV['VERSION']}..."
206
+ end
207
+
163
208
  # Updates the version number in the gemspec file, the VERSION constant in the main
164
209
  # include file and the contents of the VERSION file.
165
210
  def version_task
@@ -173,9 +218,7 @@ module GithubGem
173
218
  def check_version_task
174
219
  raise "#{ENV['VERSION']} is not a valid version number!" if ENV['VERSION'] && !Gem::Version.correct?(ENV['VERSION'])
175
220
  proposed_version = Gem::Version.new(ENV['VERSION'] || gemspec.version)
176
- # Loads the latest version number using the created tags
177
- newest_version = git.tags.map { |tag| tag.name.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max
178
- raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version && newest_version >= proposed_version
221
+ raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version >= proposed_version
179
222
  end
180
223
 
181
224
  # Checks whether the current branch is not diverged from the remote branch
@@ -216,20 +259,20 @@ module GithubGem
216
259
  git.push(remote, remote_branch, true)
217
260
  end
218
261
 
219
- # Checks whether Rubyforge is configured properly
220
- def check_rubyforge_task
221
- # Login no longer necessary when using rubyforge 2.0.0 gem
222
- # raise "Could not login on rubyforge!" unless `rubyforge login 2>&1`.strip.empty?
223
- output = `rubyforge names`.split("\n")
224
- raise "Rubyforge group not found!" unless output.any? { |line| %r[^groups\s*\:.*\b#{Regexp.quote(gemspec.rubyforge_project)}\b.*] =~ line }
225
- raise "Rubyforge package not found!" unless output.any? { |line| %r[^packages\s*\:.*\b#{Regexp.quote(gemspec.name)}\b.*] =~ line }
226
- end
227
-
228
- # Task to release the .gem file toRubyforge.
229
- def rubyforge_release_task
230
- sh 'rubyforge', 'add_release', gemspec.rubyforge_project, gemspec.name, gemspec.version.to_s, "pkg/#{gemspec.name}-#{gemspec.version}.gem"
231
- end
232
-
262
+ # # Checks whether Rubyforge is configured properly
263
+ # def check_rubyforge_task
264
+ # # Login no longer necessary when using rubyforge 2.0.0 gem
265
+ # # raise "Could not login on rubyforge!" unless `rubyforge login 2>&1`.strip.empty?
266
+ # output = `rubyforge names`.split("\n")
267
+ # raise "Rubyforge group not found!" unless output.any? { |line| %r[^groups\s*\:.*\b#{Regexp.quote(gemspec.rubyforge_project)}\b.*] =~ line }
268
+ # raise "Rubyforge package not found!" unless output.any? { |line| %r[^packages\s*\:.*\b#{Regexp.quote(gemspec.name)}\b.*] =~ line }
269
+ # end
270
+
271
+ # # Task to release the .gem file toRubyforge.
272
+ # def rubyforge_release_task
273
+ # sh 'rubyforge', 'add_release', gemspec.rubyforge_project, gemspec.name, gemspec.version.to_s, "pkg/#{gemspec.name}-#{gemspec.version}.gem"
274
+ # end
275
+
233
276
  def gemcutter_release_task
234
277
  sh "gem push pkg/#{gemspec.name}-#{gemspec.version}.gem"
235
278
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chunky_png
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 63
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 7
8
- - 3
9
- version: 0.7.3
8
+ - 8
9
+ - 0
10
+ version: 0.8.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Willem van Bergen
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-04-29 00:00:00 +02:00
18
+ date: 2010-07-01 00:00:00 +02:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: rspec
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 13
27
30
  segments:
28
31
  - 1
29
32
  - 2
@@ -93,6 +96,7 @@ files:
93
96
  - spec/resources/16x16_interlaced.png
94
97
  - spec/chunky_png/image_spec.rb
95
98
  - lib/chunky_png/canvas/drawing.rb
99
+ - spec/resources/rect.png
96
100
  - spec/resources/clock_mask_updated.png
97
101
  - spec/resources/adam7.png
98
102
  - lib/chunky_png/rmagick.rb
@@ -116,23 +120,27 @@ rdoc_options:
116
120
  require_paths:
117
121
  - lib
118
122
  required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
119
124
  requirements:
120
125
  - - ">="
121
126
  - !ruby/object:Gem::Version
127
+ hash: 3
122
128
  segments:
123
129
  - 0
124
130
  version: "0"
125
131
  required_rubygems_version: !ruby/object:Gem::Requirement
132
+ none: false
126
133
  requirements:
127
134
  - - ">="
128
135
  - !ruby/object:Gem::Version
136
+ hash: 3
129
137
  segments:
130
138
  - 0
131
139
  version: "0"
132
140
  requirements: []
133
141
 
134
142
  rubyforge_project:
135
- rubygems_version: 1.3.6
143
+ rubygems_version: 1.3.7
136
144
  signing_key:
137
145
  specification_version: 3
138
146
  summary: Pure ruby library for read/write, chunk-level access to PNG files