png 1.2.0 → 1.3.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ed4cb5ea785c269b2b1528b2630d99b24a3bc99a06c4a50961dc3c681959a169
4
+ data.tar.gz: f0a06a6423b7159878cbf5ed844e3600e32fec055e9fa46ace12e7d2329a474d
5
+ SHA512:
6
+ metadata.gz: f281dfb508c5c4ccc5bd82b69e69266b8931e198fa0a8deef3b47d3d13e22ca75b66b9df0d4d37ab44b9581fe3db8b9ef74a00f75a274afa6c1da9a0e8e49f0e
7
+ data.tar.gz: 6b9c5ad8ba80a4c8ed527b56c271de1529b541c9b0f4dac533dc1568a2cf9263f3800ff51336de65e6d3aa94f2c7f7747dacbfd852108495716e69858efa95e9
checksums.yaml.gz.sig ADDED
Binary file
data/History.txt CHANGED
@@ -1,3 +1,29 @@
1
+ === 1.3.0 / 2024-08-27
2
+
3
+ Daaaamn... another 9 years! Means it is really stable, right?
4
+
5
+ * 4 minor enhancements:
6
+
7
+ * Removed a bunch of ancient cruft: getbyte, old 1.8 compile hacks, etc.
8
+ * Removed a bunch of forced deletions of ~/.ruby_inline in test. Cargo culting?
9
+ * Removed binary encoding on all source files and called #b for the few needed binary strings.
10
+ * Removed clean as a dependency for test, speeding up tests 3x.
11
+
12
+ * 1 bug fix:
13
+
14
+ * Fix errors created when string literals are frozen.
15
+
16
+ === 1.2.1 / 2015-04-13
17
+
18
+ WOW! SIX YEARS!!
19
+
20
+ * 4 bug fixes:
21
+
22
+ * 1.9: quelled warnings
23
+ * 2.0: Added ascii-8bit encoding to test file to bypass new utf-8 default
24
+ * Rakefile cleanup. Use isolate. Nuke pathing.
25
+ * Removed dead rubyforge setting in Rakefile
26
+
1
27
  === 1.2.0 / 2009-06-23
2
28
 
3
29
  * 26 minor enhancements:
@@ -56,5 +82,7 @@
56
82
 
57
83
  === 1.0.0 / 2006-09-31
58
84
 
59
- * Birthday!
85
+ * 1 major enhancement:
86
+
87
+ * Birthday!
60
88
 
data/README.txt CHANGED
@@ -1,6 +1,8 @@
1
1
  = PNG
2
2
 
3
- * http://seattlerb.rubyforge.org/
3
+ home :: https://github.com/seattlerb/png
4
+ bugs :: https://github.com/seattlerb/png/issues
5
+ doco :: http://docs.seattlerb.org/png
4
6
 
5
7
  == DESCRIPTION
6
8
 
@@ -14,20 +16,20 @@ without any C libraries.
14
16
  * Basic PNG reader as well (someday it might do compositing and the like!).
15
17
  * Almost pure ruby, does require a compiler.
16
18
 
17
- == SYNOPSYS
19
+ == SYNOPSIS
20
+
21
+ require "png"
18
22
 
19
- require 'png'
20
-
21
23
  canvas = PNG::Canvas.new 200, 200
22
-
24
+
23
25
  # Set a point to a color
24
26
  canvas[100, 100] = PNG::Color::Black
25
-
27
+
26
28
  # draw an anti-aliased line
27
29
  canvas.line 50, 50, 100, 50, PNG::Color::Blue
28
-
30
+
29
31
  png = PNG.new canvas
30
- png.save 'blah.png'
32
+ png.save "blah.png"
31
33
 
32
34
  == REQUIREMENTS
33
35
 
@@ -37,13 +39,13 @@ without any C libraries.
37
39
 
38
40
  == INSTALL
39
41
 
40
- + sudo gem install -y png
42
+ + sudo gem install png
41
43
 
42
44
  == LICENSE
43
45
 
44
46
  (The MIT License)
45
47
 
46
- Copyright (c) 2006-2007 Ryan Davis, Eric Hodel, Zen Spider Software
48
+ Copyright (c) Ryan Davis, Eric Hodel, Zen Spider Software
47
49
 
48
50
  Permission is hereby granted, free of charge, to any person obtaining
49
51
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -1,18 +1,15 @@
1
- $: << "../../RubyInline/dev/lib"
2
- $: << "../../hoe/dev/lib"
1
+ require "hoe"
3
2
 
4
- require 'hoe'
5
-
6
- Hoe.add_include_dirs "../../hoe/dev/lib" # HACK remove
7
- Hoe.add_include_dirs "../../RubyInline/dev/lib", "lib"
8
3
  Hoe.plugin :seattlerb
9
4
  Hoe.plugin :inline
5
+ Hoe.plugin :isolate
10
6
 
11
- Hoe.spec 'png' do
12
- developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
13
- developer 'Eric Hodel', 'drbrain@segment7.net'
7
+ Hoe.spec "png" do
8
+ developer "Ryan Davis", "ryand-ruby@zenspider.com"
14
9
 
15
- self.rubyforge_name = 'seattlerb'
10
+ license "MIT"
16
11
  end
17
12
 
13
+ task(:test).prerequisites.delete "clean" # TODO: consider removing from hoe?
14
+
18
15
  # vim: syntax=Ruby
data/example/lines.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/local/bin/ruby -w
2
2
 
3
- require 'png'
4
- require 'png/font'
3
+ require "png"
4
+ require "png/font"
5
5
 
6
6
  canvas = PNG::Canvas.new 201, 201, PNG::Color::White
7
7
 
@@ -13,8 +13,8 @@ canvas.line 100, 50, 200, 75, PNG::Color::Green
13
13
  canvas.line 0, 200, 200, 0, PNG::Color::Black
14
14
  canvas.line 0, 200, 150, 0, PNG::Color::Red
15
15
 
16
- canvas.annotate 'Hello World', 10, 10
16
+ canvas.annotate "Hello World", 10, 10
17
17
 
18
18
  png = PNG.new canvas
19
- png.save 'blah.png'
19
+ png.save "blah.png"
20
20
  `open blah.png`
data/example/profile.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'png'
1
+ require "png"
2
2
 
3
3
  class PNGProfile
4
4
 
@@ -1,4 +1,4 @@
1
- require 'png'
1
+ require "png"
2
2
 
3
3
  class PNGProfileLine
4
4
 
data/lib/png/font.rb CHANGED
@@ -1,14 +1,12 @@
1
- # encoding: BINARY
2
-
3
- require 'png/reader'
1
+ require "png/reader"
4
2
 
5
3
  ##
6
4
  # Implements a simple bitmap font by extracting letters from a PNG.
7
5
 
8
6
  class PNG::Font
9
- LETTERS = (('A'..'Z').to_a +
10
- ('a'..'z').to_a +
11
- ('0'..'9').to_a + [" "] * 16 +
7
+ LETTERS = (("A".."Z").to_a +
8
+ ("a".."z").to_a +
9
+ ("0".."9").to_a + [" "] * 16 +
12
10
  '({[<!@#$%^&*?_+-=;,"/~>]})'.split(//))
13
11
 
14
12
  attr_reader :height, :width, :canvas
@@ -17,7 +15,7 @@ class PNG::Font
17
15
  @@default ||= new(File.join(File.dirname(__FILE__), "default_font.png"))
18
16
  end
19
17
 
20
- def initialize(png_file)
18
+ def initialize png_file
21
19
  @canvas = PNG.load_file png_file
22
20
  @height, @width = canvas.height / 4, canvas.width / 26
23
21
  @cache = {}
@@ -50,8 +48,8 @@ class PNG::Canvas
50
48
  #
51
49
  # require 'png/font'
52
50
 
53
- def annotate(string, x, y,
54
- font = PNG::Font.default, align = :left, style = :overwrite)
51
+ def annotate string, x, y,
52
+ font = PNG::Font.default, align = :left, style = :overwrite
55
53
  case align
56
54
  when :left then
57
55
  # do nothing
data/lib/png/pie.rb CHANGED
@@ -1,12 +1,10 @@
1
- # encoding: BINARY
2
-
3
- require 'png'
1
+ require "png"
4
2
 
5
3
  class PNG
6
4
  FULL = 360.0
7
5
  HALF = FULL / 2
8
6
 
9
- def self.angle(x, y)
7
+ def self.angle x, y
10
8
  return 0 if x == 0 and y == 0
11
9
  rad_to_deg = 180.0 / Math::PI
12
10
  (Math.atan2(-y, x) * rad_to_deg + 90) % 360
@@ -20,25 +18,26 @@ class PNG
20
18
  # system 'open pie.png'
21
19
 
22
20
  def self.pie_chart(diameter, pct_green,
23
- good_color=PNG::Color::Green, bad_color=PNG::Color::Red)
24
- diameter += 1 if diameter % 2 == 0
21
+ good_color = PNG::Color::Green,
22
+ bad_color = PNG::Color::Red)
23
+ diameter += 1 if diameter.even?
25
24
  radius = (diameter / 2.0).to_i
26
25
  pct_in_deg = FULL * pct_green
27
- rad_to_deg = HALF / Math::PI
28
26
 
29
27
  canvas = PNG::Canvas.new(diameter, diameter)
30
28
 
31
29
  (-radius..radius).each do |x|
32
30
  (-radius..radius).each do |y|
33
31
  magnitude = Math.sqrt(x*x + y*y)
34
- if magnitude <= radius then
35
- angle = PNG.angle(x, y)
36
- color = ((angle <= pct_in_deg) ? good_color : bad_color)
37
32
 
38
- rx, ry = x+radius, y+radius
33
+ next if magnitude > radius
34
+
35
+ angle = PNG.angle(x, y)
36
+ color = ((angle <= pct_in_deg) ? good_color : bad_color)
37
+
38
+ rx, ry = x+radius, y+radius
39
39
 
40
- canvas[ rx, ry ] = color
41
- end
40
+ canvas[rx, ry] = color
42
41
  end
43
42
  end
44
43
 
data/lib/png/reader.rb CHANGED
@@ -1,20 +1,18 @@
1
- # encoding: BINARY
2
-
3
- require 'png'
4
- require 'enumerator'
1
+ require "png"
2
+ require "enumerator"
5
3
 
6
4
  class PNG
7
5
  def self.load_file path, metadata_only = false
8
- file = File.open(path, 'rb') { |f| f.read }
6
+ file = File.open(path, "rb") { |f| f.read }
9
7
  self.load file, metadata_only
10
8
  end
11
9
 
12
10
  def self.load png, metadata_only = false
13
11
  png = png.dup
14
12
  signature = png.slice! 0, 8
15
- raise ArgumentError, 'Invalid PNG signature' unless signature == SIGNATURE
13
+ raise ArgumentError, "Invalid PNG signature" unless signature == SIGNATURE
16
14
 
17
- ihdr = read_chunk 'IHDR', png
15
+ ihdr = read_chunk "IHDR", png
18
16
 
19
17
  bit_depth, color_type, width, height = read_IHDR ihdr, metadata_only
20
18
 
@@ -22,17 +20,17 @@ class PNG
22
20
 
23
21
  canvas = PNG::Canvas.new width, height
24
22
 
25
- type = png.slice(4, 4).unpack('a4').first
26
- read_chunk type, png if type == 'iCCP' # Ignore color profile
23
+ type = png.slice(4, 4).unpack("a4").first
24
+ read_chunk type, png if type == "iCCP" # Ignore color profile
27
25
 
28
- read_IDAT read_chunk('IDAT', png), bit_depth, color_type, canvas
29
- read_chunk 'IEND', png
26
+ read_IDAT read_chunk("IDAT", png), bit_depth, color_type, canvas
27
+ read_chunk "IEND", png
30
28
 
31
29
  canvas
32
30
  end
33
31
 
34
32
  def self.read_chunk expected_type, png
35
- size, type = png.slice!(0, 8).unpack 'Na4'
33
+ size, type = png.slice!(0, 8).unpack "Na4"
36
34
  data, crc = png.slice!(0, size + 4).unpack "a#{size}N"
37
35
 
38
36
  check_crc type, data, crc
@@ -40,7 +38,7 @@ class PNG
40
38
  raise ArgumentError, "Expected #{expected_type} chunk, not #{type}" unless
41
39
  type == expected_type
42
40
 
43
- return data
41
+ data
44
42
  end
45
43
 
46
44
  def self.check_crc type, data, crc
@@ -49,7 +47,7 @@ class PNG
49
47
  end
50
48
 
51
49
  def self.read_IHDR data, metadata_only = false
52
- width, height, bit_depth, color_type, *rest = data.unpack 'N2C5'
50
+ width, height, bit_depth, color_type, *rest = data.unpack "N2C5"
53
51
 
54
52
  unless metadata_only then
55
53
  raise ArgumentError, "Wrong bit depth: #{bit_depth}" unless
@@ -64,7 +62,7 @@ class PNG
64
62
  end
65
63
 
66
64
  def self.read_IDAT data, bit_depth, color_type, canvas
67
- data = Zlib::Inflate.inflate(data).unpack 'C*'
65
+ data = Zlib::Inflate.inflate(data).unpack "C*"
68
66
 
69
67
  pixel_size = color_type == RGBA ? 4 : 3
70
68
 
data/lib/png.rb CHANGED
@@ -1,14 +1,5 @@
1
- # encoding: BINARY
2
-
3
- require 'rubygems'
4
- require 'zlib'
5
- require 'inline'
6
-
7
- unless "".respond_to? :getbyte then
8
- class String
9
- alias :getbyte :[]
10
- end
11
- end
1
+ require "zlib"
2
+ require "inline"
12
3
 
13
4
  class String # :nodoc: # ZenTest SKIP
14
5
  inline do |builder|
@@ -16,6 +7,10 @@ class String # :nodoc: # ZenTest SKIP
16
7
  unsigned long png_crc() {
17
8
  static unsigned long crc[256];
18
9
  static char crc_table_computed = 0;
10
+ unsigned long c = 0xffffffff;
11
+ size_t len = RSTRING_LEN(self);
12
+ char * s = StringValuePtr(self);
13
+ unsigned i;
19
14
 
20
15
  if (! crc_table_computed) {
21
16
  unsigned long c;
@@ -31,11 +26,6 @@ class String # :nodoc: # ZenTest SKIP
31
26
  crc_table_computed = 1;
32
27
  }
33
28
 
34
- unsigned long c = 0xffffffff;
35
- unsigned len = RSTRING_LEN(self);
36
- char * s = StringValuePtr(self);
37
- unsigned i;
38
-
39
29
  for (i = 0; i < len; i++) {
40
30
  c = crc[(c ^ s[i]) & 0xff] ^ (c >> 8);
41
31
  }
@@ -45,7 +35,7 @@ class String # :nodoc: # ZenTest SKIP
45
35
  EOM
46
36
  end
47
37
  rescue CompilationError => e
48
- warn "COMPLIATION ERROR: #{e}"
38
+ warn "COMPILATION ERROR: #{e}"
49
39
 
50
40
  unless defined? @@crc then
51
41
  @@crc = Array.new(256)
@@ -61,12 +51,12 @@ rescue CompilationError => e
61
51
  ##
62
52
  # Calculates a CRC using the algorithm in the PNG specification.
63
53
 
64
- def png_crc()
54
+ def png_crc
65
55
  c = 0xffffffff
66
56
  each_byte do |b|
67
57
  c = @@crc[(c^b) & 0xff] ^ (c >> 8)
68
58
  end
69
- return c ^ 0xffffffff
59
+ c ^ 0xffffffff
70
60
  end
71
61
  end
72
62
 
@@ -99,7 +89,7 @@ end
99
89
  # bottom left.
100
90
 
101
91
  class PNG
102
- VERSION = '1.2.0'
92
+ VERSION = "1.3.0"
103
93
  SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10].pack("C*")
104
94
 
105
95
  # Color Types:
@@ -118,21 +108,15 @@ class PNG
118
108
 
119
109
  begin
120
110
  inline do |builder|
121
- if RUBY_VERSION < "1.8.6" then
122
- builder.prefix <<-EOM
123
- #define RARRAY_PTR(s) (RARRAY(s)->ptr)
124
- #define RARRAY_LEN(s) (RARRAY(s)->len)
125
- EOM
126
- end
127
-
128
111
  builder.c <<-EOM
129
112
  VALUE png_join() {
130
- int i, j;
131
- VALUE data = rb_iv_get(self, "@data");
132
- unsigned int data_len = RARRAY_LEN(data);
133
- unsigned int row_len = RARRAY_LEN(RARRAY_PTR(data)[0]);
134
- unsigned long size = data_len * (1 + (row_len * 4));
135
- char * result = malloc(size);
113
+ size_t i, j;
114
+ VALUE data = rb_iv_get(self, "@data");
115
+ size_t data_len = RARRAY_LEN(data);
116
+ size_t row_len = RARRAY_LEN(RARRAY_PTR(data)[0]);
117
+ size_t size = data_len * (1 + (row_len * 4));
118
+ char * result = malloc(size);
119
+
136
120
  unsigned long idx = 0;
137
121
  for (i = 0; i < data_len; i++) {
138
122
  VALUE row = RARRAY_PTR(data)[i];
@@ -153,21 +137,21 @@ class PNG
153
137
  end
154
138
  rescue CompilationError
155
139
  def png_join
156
- @data.map { |row| "\0" + row.map { |p| p.values }.join }.join
140
+ @data.map { |row| "\0".b + row.map(&:values).join }.join
157
141
  end
158
142
  end
159
143
 
160
144
  ##
161
145
  # Creates a PNG chunk of type +type+ that contains +data+.
162
146
 
163
- def self.chunk(type, data="")
147
+ def self.chunk type, data = ""
164
148
  [data.size, type, data, (type + data).png_crc].pack("Na*a*N")
165
149
  end
166
150
 
167
151
  ##
168
152
  # Creates a new PNG object using +canvas+
169
153
 
170
- def initialize(canvas)
154
+ def initialize canvas
171
155
  @height = canvas.height
172
156
  @width = canvas.width
173
157
  @bits = 8
@@ -177,8 +161,8 @@ class PNG
177
161
  ##
178
162
  # Writes the PNG to +path+.
179
163
 
180
- def save(path)
181
- File.open path, 'wb' do |f|
164
+ def save path
165
+ File.open path, "wb" do |f|
182
166
  f.write to_blob
183
167
  end
184
168
  end
@@ -192,9 +176,9 @@ class PNG
192
176
  header = [@width, @height, @bits, RGBA, NONE, NONE, NONE]
193
177
 
194
178
  blob << SIGNATURE
195
- blob << PNG.chunk('IHDR', header.pack("N2C5"))
196
- blob << PNG.chunk('IDAT', Zlib::Deflate.deflate(self.png_join))
197
- blob << PNG.chunk('IEND', '')
179
+ blob << PNG.chunk("IHDR", header.pack("N2C5"))
180
+ blob << PNG.chunk("IDAT", Zlib::Deflate.deflate(self.png_join))
181
+ blob << PNG.chunk("IEND", "")
198
182
  blob.join
199
183
  end
200
184
 
@@ -204,7 +188,7 @@ class PNG
204
188
 
205
189
  class Color
206
190
 
207
- MAX=255
191
+ MAX = 0xFF
208
192
 
209
193
  attr_reader :values
210
194
 
@@ -214,7 +198,7 @@ class PNG
214
198
 
215
199
  def self.from str, name = nil
216
200
  str = "%08x" % str if Integer === str
217
- colors = str.scan(/[\da-f][\da-f]/i).map { |n| n.hex }
201
+ colors = str.scan(/\h\h/i).map(&:hex)
218
202
  colors << name
219
203
  self.new(*colors)
220
204
  end
@@ -223,7 +207,7 @@ class PNG
223
207
  # Creates a new color with values +red+, +green+, +blue+, and +alpha+.
224
208
 
225
209
  def initialize red, green, blue, alpha = MAX, name = nil
226
- @values = "%c%c%c%c" % [red, green, blue, alpha]
210
+ @values = "%c%c%c%c" % [red, green, blue, alpha].map(&:chr)
227
211
  @name = name
228
212
  end
229
213
 
@@ -255,8 +239,8 @@ class PNG
255
239
  # "Bitwise or" as applied to colors. Background color is
256
240
  # considered false.
257
241
 
258
- def | o
259
- self == Background ? o : self
242
+ def | other
243
+ self == Background ? other : self
260
244
  end
261
245
 
262
246
  def hash # :nodoc:
@@ -294,15 +278,17 @@ class PNG
294
278
  # Blends +color+ into this color returning a new blended color.
295
279
 
296
280
  def blend color
297
- return Color.new(((r + color.r) / 2), ((g + color.g) / 2),
298
- ((b + color.b) / 2), ((a + color.a) / 2))
281
+ Color.new(((r + color.r) / 2),
282
+ ((g + color.g) / 2),
283
+ ((b + color.b) / 2),
284
+ ((a + color.a) / 2))
299
285
  end
300
286
 
301
287
  ##
302
288
  # Returns a new color with an alpha value adjusted by +i+.
303
289
 
304
290
  def intensity i
305
- return Color.new(r,g,b,(a*i) >> 8)
291
+ Color.new(r, g, b, (a*i) >> 8)
306
292
  end
307
293
 
308
294
  def inspect # :nodoc:
@@ -318,11 +304,11 @@ class PNG
318
304
  # art!
319
305
 
320
306
  def to_ascii
321
- return ' ' if a == 0x00
307
+ return " " if a == 0x00
322
308
 
323
309
  brightness = (((r + g + b) / 3) * a) / 0xFF
324
310
 
325
- %w(.. ,, ++ 00)[brightness / 64]
311
+ %w[.. ,, ++ 00][brightness / 64]
326
312
  end
327
313
 
328
314
  def to_s # :nodoc:
@@ -341,26 +327,26 @@ class PNG
341
327
  unless s == 0.0 then
342
328
  h += 255 if h < 0
343
329
  h = h / 255.0 * 6.0
344
- s = s / 255.0
345
- v = v / 255.0
330
+ s /= 255.0
331
+ v /= 255.0
346
332
  i = h.floor
347
333
  f = h - i
348
334
  p = v * (1 - (s))
349
335
  q = v * (1 - (s * (f)))
350
336
  w = v * (1 - (s * (1-f)))
351
337
  r, g, b = case i
352
- when 0,6 then
353
- [ v, w, p ]
338
+ when 0, 6 then
339
+ [v, w, p]
354
340
  when 1 then
355
- [ q, v, p ]
341
+ [q, v, p]
356
342
  when 2 then
357
- [ p, v, w ]
343
+ [p, v, w]
358
344
  when 3 then
359
- [ p, q, v ]
345
+ [p, q, v]
360
346
  when 4 then
361
- [ w, p, v ]
347
+ [w, p, v]
362
348
  when 5 then
363
- [ v, p, q ]
349
+ [v, p, q]
364
350
  else
365
351
  raise [h, s, v, i, f, p, q, w].inspect
366
352
  end
@@ -420,7 +406,7 @@ class PNG
420
406
  def initialize width, height, background = Color::Background
421
407
  @width = width
422
408
  @height = height
423
- @data = Array.new(@height) { |x| Array.new(@width, background) }
409
+ @data = Array.new(@height) { Array.new(@width, background) }
424
410
  end
425
411
 
426
412
  ##
@@ -489,14 +475,14 @@ class PNG
489
475
  end
490
476
 
491
477
  def inspect # :nodoc:
492
- '#<%s %dx%d>' % [self.class, @width, @height]
478
+ "#<%s %dx%d>" % [self.class, @width, @height]
493
479
  end
494
480
 
495
481
  ##
496
482
  # Blends +color+ onto the color at point (+x+, +y+).
497
483
 
498
- def point(x, y, color)
499
- self[x,y] = self[x,y].blend(color)
484
+ def point x, y, color
485
+ self[x, y] = self[x, y].blend(color)
500
486
  end
501
487
 
502
488
  ##
@@ -504,7 +490,7 @@ class PNG
504
490
  #
505
491
  # http://en.wikipedia.org/wiki/Xiaolin_Wu's_line_algorithm
506
492
 
507
- def line(x0, y0, x1, y1, color)
493
+ def line x0, y0, x1, y1, color
508
494
  y0, y1, x0, x1 = y1, y0, x1, x0 if y0 > y1
509
495
  dx = x1 - x0
510
496
  sx = dx < 0 ? -1 : 1
@@ -513,7 +499,7 @@ class PNG
513
499
 
514
500
  # 'easy' cases
515
501
  if dy == 0 then
516
- Range.new(*[x0,x1].sort).each do |x|
502
+ Range.new(*[x0, x1].sort).each do |x|
517
503
  point(x, y0, color)
518
504
  end
519
505
  return
@@ -539,12 +525,12 @@ class PNG
539
525
  e_acc = 0
540
526
  if dy > dx then # vertical displacement
541
527
  e = (dx << 16) / dy
542
- (y0...y1-1).each do |i|
528
+ (y0...y1-1).each do
543
529
  e_acc_temp, e_acc = e_acc, (e_acc + e) & 0xFFFF
544
- x0 = x0 + sx if (e_acc <= e_acc_temp)
530
+ x0 += sx if (e_acc <= e_acc_temp)
545
531
  w = 0xFF-(e_acc >> 8)
546
532
  point(x0, y0, color.intensity(w))
547
- y0 = y0 + 1
533
+ y0 += 1
548
534
  point(x0 + sx, y0, color.intensity(0xFF-w))
549
535
  end
550
536
  point(x1, y1, color)
@@ -553,7 +539,7 @@ class PNG
553
539
 
554
540
  # horizontal displacement
555
541
  e = (dy << 16) / dx
556
- (dx - 1).downto(0) do |i|
542
+ (dx - 1).downto(0) do
557
543
  e_acc_temp, e_acc = e_acc, (e_acc + e) & 0xFFFF
558
544
  y0 += 1 if (e_acc <= e_acc_temp)
559
545
  w = 0xFF-(e_acc >> 8)
@@ -580,7 +566,7 @@ class PNG
580
566
  image << "\n"
581
567
  end
582
568
 
583
- return image.join
569
+ image.join
584
570
  end
585
571
  end # Canvas
586
572
  end