texplay 0.4.3 → 0.4.4.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +225 -222
  3. data/README.markdown +48 -48
  4. data/Rakefile +16 -16
  5. data/examples/common.rb +18 -18
  6. data/examples/example_alpha_blend.rb +29 -29
  7. data/examples/example_bezier.rb +41 -41
  8. data/examples/example_blank.rb +37 -37
  9. data/examples/example_cache.rb +21 -21
  10. data/examples/example_color_control.rb +69 -69
  11. data/examples/example_color_transform.rb +62 -62
  12. data/examples/example_color_transform_circle.rb +34 -34
  13. data/examples/example_darken.rb +24 -24
  14. data/examples/example_dup.rb +73 -73
  15. data/examples/example_each.rb +39 -39
  16. data/examples/example_effect.rb +34 -34
  17. data/examples/example_fill.rb +43 -43
  18. data/examples/example_fill_old.rb +48 -48
  19. data/examples/example_fluent.rb +29 -29
  20. data/examples/example_font.rb +31 -31
  21. data/examples/example_hash_arguments.rb +46 -46
  22. data/examples/example_ippa.rb +23 -23
  23. data/examples/example_light.rb +75 -75
  24. data/examples/example_light_multiply.rb +18 -18
  25. data/examples/example_lsystem.rb +61 -61
  26. data/examples/example_melt.rb +25 -25
  27. data/examples/example_meyet.rb +62 -62
  28. data/examples/example_polyline.rb +42 -42
  29. data/examples/example_scale.rb +27 -27
  30. data/examples/example_select.rb +36 -36
  31. data/examples/example_select2.rb +25 -25
  32. data/examples/example_simple.rb +46 -46
  33. data/examples/example_splice.rb +26 -26
  34. data/examples/example_sync.rb +59 -59
  35. data/examples/example_tiles.rb +41 -41
  36. data/examples/example_trace.rb +22 -22
  37. data/examples/example_transparent.rb +28 -28
  38. data/examples/example_transparent2.rb +24 -24
  39. data/examples/example_transparent3.rb +20 -20
  40. data/examples/example_turtle.rb +39 -39
  41. data/examples/example_weird.rb +22 -22
  42. data/examples/example_window_render_to_image.rb +41 -41
  43. data/examples/example_window_to_blob.rb +35 -35
  44. data/examples/media/maria.png +0 -0
  45. data/examples/media/rose.bmp +0 -0
  46. data/ext/texplay/actions.c +1011 -1006
  47. data/ext/texplay/actions.h +60 -60
  48. data/ext/texplay/bindings.c +1130 -1125
  49. data/ext/texplay/bindings.h +46 -46
  50. data/ext/texplay/cache.c +123 -118
  51. data/ext/texplay/cache.h +24 -24
  52. data/ext/texplay/compat.h +21 -27
  53. data/ext/texplay/extconf.rb +38 -38
  54. data/ext/texplay/graphics_utils.c +1318 -1313
  55. data/ext/texplay/graphics_utils.h +22 -22
  56. data/ext/texplay/texplay.c +206 -201
  57. data/ext/texplay/texplay.h +153 -153
  58. data/ext/texplay/utils.c +896 -891
  59. data/ext/texplay/utils.h +153 -153
  60. data/lib/texplay-contrib.rb +147 -147
  61. data/lib/texplay.rb +347 -347
  62. data/lib/texplay/alone.rb +20 -20
  63. data/lib/texplay/c_function_docs.rb +178 -178
  64. data/lib/texplay/live.rb +84 -84
  65. data/lib/texplay/version.rb +3 -3
  66. data/live/live.rb +85 -85
  67. data/test/image_spec.rb +45 -45
  68. data/test/texplay_spec.rb +144 -144
  69. metadata +42 -52
  70. data/lib/texplay/1.8/texplay.so +0 -0
  71. data/lib/texplay/1.9/texplay.so +0 -0
@@ -1,48 +1,48 @@
1
- ![Alt text](https://dl.getdropbox.com/u/239375/texplay.png)
2
-
3
- *an image manipulation tool for ruby and gosu*
4
-
5
- INSTRUCTIONS
6
- ============
7
-
8
- **TexPlay version 0.4.2**
9
-
10
- [Read The Documentation](http://banisterfiend.wordpress.com/2008/08/23/texplay-an-image-manipulation-tool-for-ruby-and-gosu/)
11
-
12
- Gem installation:
13
-
14
- + sudo gem install texplay
15
-
16
- How to build the gems? (maintainers only)
17
-
18
- + Install rake-compiler (http://github.com/luislavena/rake-compiler)
19
- + Install 1.9.1 and 1.8.6 mingw ruby versions (instructions above)
20
- + Type (on Linux/OSX to build fat Win32 binary): `rake cross native gem RUBY_CC_VERSION=1.8.6:1.9.1`
21
-
22
- + Upload new gems to rubyforge and gemcutter.
23
-
24
- How to build from source?
25
- + rake compile
26
-
27
- OR
28
-
29
- + rake19 compile (assuming this is the name of your 1.9.1 version of rake)
30
-
31
- **NB:** be sure to run the version of rake that corresponds to the ruby version you wish to use! on my system I use rake19 for ruby 1.9.1!
32
-
33
- If all goes well, run the example programs:
34
-
35
- + cd examples
36
- + ruby example_melt.rb
37
- + ruby example_simple.rb
38
- + ..etc
39
-
40
- + like any gosu application, gosu.so must be in the current directory (or the gosu gem installed) when running the examples.
41
-
42
- Third party
43
- -----------
44
-
45
- + (Windows only) [Freeglut](http://freeglut.sourceforge.net/) [Freeglut Copyright]
46
-
47
- ---
48
- Enjoy!
1
+ ![Alt text](https://dl.getdropbox.com/u/239375/texplay.png)
2
+
3
+ *an image manipulation tool for ruby and gosu*
4
+
5
+ INSTRUCTIONS
6
+ ============
7
+
8
+ **TexPlay version 0.4.3**
9
+
10
+ [Read The Documentation](http://banisterfiend.wordpress.com/2008/08/23/texplay-an-image-manipulation-tool-for-ruby-and-gosu/)
11
+
12
+ Gem installation:
13
+
14
+ + sudo gem install texplay
15
+
16
+ How to build the gems? (maintainers only)
17
+
18
+ + Install rake-compiler (http://github.com/luislavena/rake-compiler)
19
+ + Install 1.9.1 and 1.8.6 mingw ruby versions (instructions above)
20
+ + Type (on Linux/OSX to build fat Win32 binary): `rake cross native gem RUBY_CC_VERSION=1.8.6:1.9.1`
21
+
22
+ + Upload new gems to rubyforge and gemcutter.
23
+
24
+ How to build from source?
25
+ + rake compile
26
+
27
+ OR
28
+
29
+ + rake19 compile (assuming this is the name of your 1.9.1 version of rake)
30
+
31
+ **NB:** be sure to run the version of rake that corresponds to the ruby version you wish to use! on my system I use rake19 for ruby 1.9.1!
32
+
33
+ If all goes well, run the example programs:
34
+
35
+ + cd examples
36
+ + ruby example_melt.rb
37
+ + ruby example_simple.rb
38
+ + ..etc
39
+
40
+ + like any gosu application, gosu.so must be in the current directory (or the gosu gem installed) when running the examples.
41
+
42
+ Third party
43
+ -----------
44
+
45
+ + (Windows only) [Freeglut](http://freeglut.sourceforge.net/) [Freeglut Copyright]
46
+
47
+ ---
48
+ Enjoy!
data/Rakefile CHANGED
@@ -1,16 +1,16 @@
1
- begin
2
- require 'devkit' # Only on Windows.
3
- rescue LoadError
4
- end
5
-
6
- require 'rake/extensiontask'
7
-
8
- spec = Gem::Specification.load Dir['*.gemspec'].first
9
-
10
- Gem::PackageTask.new spec do
11
- end
12
-
13
- Rake::ExtensionTask.new 'texplay', spec do |ext|
14
- RUBY_VERSION =~ /(\d+.\d+)/
15
- ext.lib_dir = "lib/texplay/#{$1}"
16
- end
1
+ begin
2
+ require 'devkit' # Only on Windows.
3
+ rescue LoadError
4
+ end
5
+
6
+ require 'rake/extensiontask'
7
+
8
+ spec = Gem::Specification.load Dir['*.gemspec'].first
9
+
10
+ Gem::PackageTask.new spec do
11
+ end
12
+
13
+ Rake::ExtensionTask.new 'texplay', spec do |ext|
14
+ RUBY_VERSION =~ /(\d+.\d+)/
15
+ ext.lib_dir = "lib/texplay/#{$1}"
16
+ end
@@ -1,18 +1,18 @@
1
- EXAMPLES_DIR = File.dirname(File.expand_path(__FILE__))
2
-
3
- # Ensure that the texplay loaded is the one in this repository, not any gem installed.
4
- $LOAD_PATH.unshift File.expand_path(File.join(EXAMPLES_DIR, '..', 'lib'))
5
-
6
- begin
7
- require 'rubygems'
8
- rescue LoadError => ex
9
- end
10
-
11
- require 'gosu'
12
- require 'texplay'
13
-
14
- module Common
15
- MEDIA = File.join(EXAMPLES_DIR, 'media')
16
- end
17
-
18
-
1
+ EXAMPLES_DIR = File.dirname(File.expand_path(__FILE__))
2
+
3
+ # Ensure that the texplay loaded is the one in this repository, not any gem installed.
4
+ $LOAD_PATH.unshift File.expand_path(File.join(EXAMPLES_DIR, '..', 'lib'))
5
+
6
+ begin
7
+ require 'rubygems'
8
+ rescue LoadError => ex
9
+ end
10
+
11
+ require 'gosu'
12
+ require 'texplay'
13
+
14
+ module Common
15
+ MEDIA = File.join(EXAMPLES_DIR, 'media')
16
+ end
17
+
18
+
@@ -1,29 +1,29 @@
1
- $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__))
2
- require 'common'
3
-
4
- class W < Gosu::Window
5
- def initialize
6
- super(500, 500, false, 20)
7
- @img = Gosu::Image.new(self, "#{Common::MEDIA}/empty2.png")
8
- @tp = Gosu::Image.new(self, "#{Common::MEDIA}/texplay.png")
9
-
10
- # put a border on the image
11
- @img.rect 0,0, @img.width - 1, @img.height - 1
12
-
13
- @img.rect 1, 1, @img.width - 2, @img.height - 2, :fill => true, :texture => @tp
14
-
15
- # NOTE: the current implementation of alpha blending is a bit tempermental, i need to think it
16
- # through a bit more...
17
- @img.rect 100, 100, 300, 300, :color => [1, 1, 1, 0.8], :alpha_blend => true, :fill => true
18
- end
19
-
20
- def draw
21
- @img.draw 100, 50,1
22
- end
23
-
24
- end
25
-
26
-
27
- w = W.new
28
- w.show
29
-
1
+ $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__))
2
+ require 'common'
3
+
4
+ class W < Gosu::Window
5
+ def initialize
6
+ super(500, 500, false, 20)
7
+ @img = Gosu::Image.new(self, "#{Common::MEDIA}/empty2.png")
8
+ @tp = Gosu::Image.new(self, "#{Common::MEDIA}/texplay.png")
9
+
10
+ # put a border on the image
11
+ @img.rect 0,0, @img.width - 1, @img.height - 1
12
+
13
+ @img.rect 1, 1, @img.width - 2, @img.height - 2, :fill => true, :texture => @tp
14
+
15
+ # NOTE: the current implementation of alpha blending is a bit tempermental, i need to think it
16
+ # through a bit more...
17
+ @img.rect 100, 100, 300, 300, :color => [1, 1, 1, 0.8], :alpha_blend => true, :fill => true
18
+ end
19
+
20
+ def draw
21
+ @img.draw 100, 50,1
22
+ end
23
+
24
+ end
25
+
26
+
27
+ w = W.new
28
+ w.show
29
+
@@ -1,41 +1,41 @@
1
- $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__))
2
- require 'common'
3
-
4
-
5
- class W < Gosu::Window
6
- def initialize
7
- super(500, 500, false, 20)
8
- @img = TexPlay.create_image(self, 500, 500)
9
-
10
- # put a border on the image
11
- @img.rect 0,0, @img.width - 1, @img.height - 1
12
-
13
- points = []
14
-
15
- # NOTE: TexPlay also accepts points. a 'point' is any object that responds to 'x' or 'y'
16
- # NOTE: current maximum points for a bezier is 13
17
- (0..@img.width + 100).step(40) { |x|
18
- p = TexPlay::TPPoint.new
19
- p.x = x
20
- p.y = @img.height * rand
21
-
22
- points << p
23
- }
24
-
25
- # making the bezier
26
- @img.bezier points, :color => :red
27
-
28
- # NOTE: can 'close' a bezier curve too (as with polylines)
29
- end
30
-
31
- def draw
32
-
33
- @img.draw 100, 50,1
34
- end
35
-
36
- end
37
-
38
-
39
- w = W.new
40
- w.show
41
-
1
+ $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__))
2
+ require 'common'
3
+
4
+
5
+ class W < Gosu::Window
6
+ def initialize
7
+ super(500, 500, false, 20)
8
+ @img = TexPlay.create_image(self, 500, 500)
9
+
10
+ # put a border on the image
11
+ @img.rect 0,0, @img.width - 1, @img.height - 1
12
+
13
+ points = []
14
+
15
+ # NOTE: TexPlay also accepts points. a 'point' is any object that responds to 'x' or 'y'
16
+ # NOTE: current maximum points for a bezier is 13
17
+ (0..@img.width + 100).step(40) { |x|
18
+ p = TexPlay::TPPoint.new
19
+ p.x = x
20
+ p.y = @img.height * rand
21
+
22
+ points << p
23
+ }
24
+
25
+ # making the bezier
26
+ @img.bezier points, :color => :red
27
+
28
+ # NOTE: can 'close' a bezier curve too (as with polylines)
29
+ end
30
+
31
+ def draw
32
+
33
+ @img.draw 100, 50,1
34
+ end
35
+
36
+ end
37
+
38
+
39
+ w = W.new
40
+ w.show
41
+
@@ -1,37 +1,37 @@
1
- $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__))
2
- require 'common'
3
-
4
-
5
- class W < Gosu::Window
6
- def initialize
7
- super(500, 500, false, 20)
8
- @img = TexPlay.create_image(self, 50, 50, :color => Gosu::Color::BLUE)
9
- @img2 = TexPlay.create_image(self, 50, 50, :color => Gosu::Color::RED)
10
-
11
- end
12
-
13
- def update
14
-
15
- end
16
-
17
- def draw
18
- @img.draw 0, 0,1
19
- @img2.draw 100, 100,1
20
- if button_down?(Gosu::KbEscape)
21
- # self.flush
22
- @blob = self.to_blob(0,self.height - 70, 50, 50)
23
- if @blob
24
- @img3 = TexPlay.from_blob(self, @blob,50, 50 )
25
- end
26
- end
27
-
28
- @img3.draw rand(300), rand(300), 1 if @img3
29
- 500000.times {}
30
- end
31
-
32
- end
33
-
34
-
35
- w = W.new
36
- w.show
37
-
1
+ $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__))
2
+ require 'common'
3
+
4
+
5
+ class W < Gosu::Window
6
+ def initialize
7
+ super(500, 500, false, 20)
8
+ @img = TexPlay.create_image(self, 50, 50, :color => Gosu::Color::BLUE)
9
+ @img2 = TexPlay.create_image(self, 50, 50, :color => Gosu::Color::RED)
10
+
11
+ end
12
+
13
+ def update
14
+
15
+ end
16
+
17
+ def draw
18
+ @img.draw 0, 0,1
19
+ @img2.draw 100, 100,1
20
+ if button_down?(Gosu::KbEscape)
21
+ # self.flush
22
+ @blob = self.to_blob(0,self.height - 70, 50, 50)
23
+ if @blob
24
+ @img3 = TexPlay.from_blob(self, @blob,50, 50 )
25
+ end
26
+ end
27
+
28
+ @img3.draw rand(300), rand(300), 1 if @img3
29
+ 500000.times {}
30
+ end
31
+
32
+ end
33
+
34
+
35
+ w = W.new
36
+ w.show
37
+
@@ -1,21 +1,21 @@
1
- $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__))
2
- require 'common'
3
-
4
- class W < Gosu::Window
5
- def initialize
6
- super(400, 300, false, 20)
7
- TexPlay.set_options :caching => true
8
- @img = Gosu::Image.new(self, "#{Common::MEDIA}/object.png", :caching => false)
9
-
10
- @img.clear :color => :red, :dest_select => :transparent, :tolerance => 0.9
11
- end
12
-
13
- def draw
14
- @img.draw 100, 100, 1
15
- end
16
-
17
- end
18
-
19
-
20
- w = W.new
21
- w.show
1
+ $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__))
2
+ require 'common'
3
+
4
+ class W < Gosu::Window
5
+ def initialize
6
+ super(400, 300, false, 20)
7
+ TexPlay.set_options :caching => true
8
+ @img = Gosu::Image.new(self, "#{Common::MEDIA}/object.png", :caching => false)
9
+
10
+ @img.clear :color => :red, :dest_select => :transparent, :tolerance => 0.9
11
+ end
12
+
13
+ def draw
14
+ @img.draw 100, 100, 1
15
+ end
16
+
17
+ end
18
+
19
+
20
+ w = W.new
21
+ w.show
@@ -1,69 +1,69 @@
1
- require 'rubygems'
2
- require 'common'
3
- require 'texplay'
4
-
5
- class W < Gosu::Window
6
- def initialize
7
- super(500, 500, false, 20)
8
- @img = Gosu::Image.new(self, "#{Common::MEDIA}/empty2.png")
9
- @tp = Gosu::Image.new(self, "#{Common::MEDIA}/texplay.png")
10
- @gosu = Gosu::Image.new(self, "#{Common::MEDIA}/gosu.png")
11
-
12
- # put a border on the image
13
- @img.rect 0,0, @img.width - 1, @img.height - 1
14
-
15
- # When using color_control the pixel the draw action is currently manipulating is yielded
16
- # to the proc. This gives you pixel-level control over the drawing.
17
- # (NOTE: the return value of the proc is used as the pixel color, so it should be a 4 element array or
18
- # a valid color symbol)
19
-
20
- # color_control accepts procs of 4 types:
21
- # arity of 0: nothing is yielded and color is set by return value of block
22
- # arity of 1: just the destination pixel color is yielded
23
- # arity of 2: both the destination and the source pixel colors are yielded (in that order)
24
- # arity of 3: the destination pixel color is yielded along with the x and y coords of the current pixel
25
- # arity of 4: both the destination and the source pixel colours are yielded as well as the x and y vals
26
-
27
- # just drawing an area to fill
28
- @img.polyline [30, 30, 100, 100, 200, 76, 300, 9, 50, 200], :color => :random, :closed => true
29
-
30
- # below we are 'faking' a texture fill using color_control
31
- @img.fill 42, 70, :color_control => proc { |c, x, y|
32
- @tp.get_pixel(x % @tp.width, y % @tp.height)
33
- }
34
-
35
- # merging two images together
36
- @img.rect 100, 200, 400, 300, :fill => true, :texture => @gosu,
37
- :color_control => proc { |c1, c2, x, y|
38
- c1 = @tp.get_pixel(x % @tp.width, y % @tp.height)
39
- c1[0] = (c1[0] + c2[0]) / 2
40
- c1[1] = (c1[1] + c2[1]) / 2
41
- c1[2] = (c1[2] + c2[2]) / 2
42
- c1[3] = 1
43
- c1
44
- }
45
-
46
- # we can even use color_control just for the use of the (x, y) values.
47
- # here we simply use the x, y values to make our own circle with a rough edge
48
- @img.circle 200,400, 70,
49
- :color_control => proc { |c,x,y|
50
- @img.pixel(x + (rand(4) - 2), y + (rand(4) - 2))
51
- :none # this ensures that the 'actual' circle isn't drawn, instead its coordinates are
52
- # simply utilized to draw a ragged edge of another circle (using @img.pixel)
53
- }
54
-
55
- # this just fills a rect with random colours
56
- @img.rect 400, 400, 470, 470, :fill => true, :color_control => proc { :rand }
57
- end
58
-
59
- def draw
60
-
61
- @img.draw 0, 0,1
62
- end
63
-
64
- end
65
-
66
-
67
- w = W.new
68
- w.show
69
-
1
+ require 'rubygems'
2
+ require 'common'
3
+ require 'texplay'
4
+
5
+ class W < Gosu::Window
6
+ def initialize
7
+ super(500, 500, false, 20)
8
+ @img = Gosu::Image.new(self, "#{Common::MEDIA}/empty2.png")
9
+ @tp = Gosu::Image.new(self, "#{Common::MEDIA}/texplay.png")
10
+ @gosu = Gosu::Image.new(self, "#{Common::MEDIA}/gosu.png")
11
+
12
+ # put a border on the image
13
+ @img.rect 0,0, @img.width - 1, @img.height - 1
14
+
15
+ # When using color_control the pixel the draw action is currently manipulating is yielded
16
+ # to the proc. This gives you pixel-level control over the drawing.
17
+ # (NOTE: the return value of the proc is used as the pixel color, so it should be a 4 element array or
18
+ # a valid color symbol)
19
+
20
+ # color_control accepts procs of 4 types:
21
+ # arity of 0: nothing is yielded and color is set by return value of block
22
+ # arity of 1: just the destination pixel color is yielded
23
+ # arity of 2: both the destination and the source pixel colors are yielded (in that order)
24
+ # arity of 3: the destination pixel color is yielded along with the x and y coords of the current pixel
25
+ # arity of 4: both the destination and the source pixel colours are yielded as well as the x and y vals
26
+
27
+ # just drawing an area to fill
28
+ @img.polyline [30, 30, 100, 100, 200, 76, 300, 9, 50, 200], :color => :random, :closed => true
29
+
30
+ # below we are 'faking' a texture fill using color_control
31
+ @img.fill 42, 70, :color_control => proc { |c, x, y|
32
+ @tp.get_pixel(x % @tp.width, y % @tp.height)
33
+ }
34
+
35
+ # merging two images together
36
+ @img.rect 100, 200, 400, 300, :fill => true, :texture => @gosu,
37
+ :color_control => proc { |c1, c2, x, y|
38
+ c1 = @tp.get_pixel(x % @tp.width, y % @tp.height)
39
+ c1[0] = (c1[0] + c2[0]) / 2
40
+ c1[1] = (c1[1] + c2[1]) / 2
41
+ c1[2] = (c1[2] + c2[2]) / 2
42
+ c1[3] = 1
43
+ c1
44
+ }
45
+
46
+ # we can even use color_control just for the use of the (x, y) values.
47
+ # here we simply use the x, y values to make our own circle with a rough edge
48
+ @img.circle 200,400, 70,
49
+ :color_control => proc { |c,x,y|
50
+ @img.pixel(x + (rand(4) - 2), y + (rand(4) - 2))
51
+ :none # this ensures that the 'actual' circle isn't drawn, instead its coordinates are
52
+ # simply utilized to draw a ragged edge of another circle (using @img.pixel)
53
+ }
54
+
55
+ # this just fills a rect with random colours
56
+ @img.rect 400, 400, 470, 470, :fill => true, :color_control => proc { :rand }
57
+ end
58
+
59
+ def draw
60
+
61
+ @img.draw 0, 0,1
62
+ end
63
+
64
+ end
65
+
66
+
67
+ w = W.new
68
+ w.show
69
+