panda_canvas 0.1.0 → 0.2.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.
data/README.rdoc CHANGED
@@ -1,7 +1,8 @@
1
1
  = Panda Canvas
2
2
 
3
- Panda Canvas is an educational 2D drawing canvas on top of Gosu and TexPlay.
4
- It is created as a teaching tool for the {Computer Club n.a. 8-bit Panda}[http://panda.tsi.lv]
3
+ Panda Canvas is an educational 2D drawing canvas on top of {Gosu}[http://www.libgosu.org/] and {TexPlay}[http://github.com/banister/texplay].
4
+
5
+ It is created as a teaching tool for the {Computer Club n.a. 8-bit Panda}[http://panda.tsi.lv].
5
6
 
6
7
  == Installation
7
8
 
@@ -0,0 +1,27 @@
1
+ require 'texplay'
2
+ require 'fiber'
3
+
4
+ module PandaCanvas
5
+
6
+ class Canvas < Gosu::Window
7
+
8
+ attr_reader :image
9
+
10
+ def initialize(width, height, fiber)
11
+ super(width, height, false)
12
+ self.caption = 'Panda Canvas'
13
+ @image = TexPlay.create_image(self, width, height)
14
+ @fiber = fiber
15
+ end
16
+
17
+ def draw
18
+ @image.draw(0, 0, 0)
19
+ end
20
+
21
+ def update
22
+ @fiber.resume if @fiber.alive?
23
+ end
24
+
25
+ end # Canvas
26
+
27
+ end # PandaCanvas
@@ -1,6 +1,6 @@
1
- class PandaCanvas
2
-
3
- # PandaCanvas version.
4
- VERSION = '0.1.0'
5
-
1
+ class PandaCanvas
2
+
3
+ # PandaCanvas version.
4
+ VERSION = '0.2.0'
5
+
6
6
  end # end PandaCanvas
data/lib/panda_canvas.rb CHANGED
@@ -1,50 +1,36 @@
1
+ libdir = File.dirname(__FILE__)
2
+ $:.unshift(libdir) unless $:.include?(libdir)
3
+
1
4
  require 'texplay'
5
+ require 'panda_canvas/canvas'
2
6
 
3
- class PandaCanvas < Gosu::Window
7
+ module PandaCanvas
4
8
 
5
- # Creates a new canvas window with dimensions +width+ and +height+.
6
- # A list of +commands+ of the form +[:method, [*args]]+ is passed to be executed.
7
- def initialize(width, height, commands)
8
- super(width, height, false)
9
- self.caption = 'Panda Canvas'
10
- @image = TexPlay.create_image(self, width, height)
11
- @commands = commands
12
- end
9
+ class << self
13
10
 
14
- # Runs a range of commands until the next flush.
15
- def update
16
- unless @commands.empty?
17
- @commands.slice!(0...@commands.index(FLUSH_SIGNATURE)).each do |command|
18
- @image.send command[0], *command[1]
19
- end
20
- @commands.shift
21
- end
22
- end
11
+ attr_reader :canvas
23
12
 
24
- # Draws the image in memory.
25
- def draw
26
- @image.draw(0, 0, 0)
27
- end
13
+ def draw(width=640, height=480, &block)
14
+ @canvas = Canvas.new(width, height, Fiber.new(&block))
15
+ @canvas.show
16
+ end
28
17
 
29
- end # end PandaCanvas
18
+ end # class << self
30
19
 
31
- __width__ = 640
32
- __height__ = 480
33
- __commands__ = []
34
- IMAGE_METHODS = (Gosu::Image.public_instance_methods + [:flush]).freeze
35
- FLUSH_SIGNATURE = [:flush, []].freeze
20
+ end # PandaCanvas
36
21
 
37
- self.class.instance_eval do
38
- define_method(:method_missing) do |sym, *args|
39
- if IMAGE_METHODS.include? sym
40
- __commands__ << [sym, args]
41
- else
42
- super(sym, *args)
22
+ def method_missing(sym, *args)
23
+ found = false
24
+ if PandaCanvas.canvas
25
+ @panda_canvas_image ||= PandaCanvas.canvas.image
26
+ if @panda_canvas_image.respond_to? sym
27
+ pci = @panda_canvas_image
28
+ self.class.instance_eval do
29
+ define_method(sym) {|*args| pci.send sym, *args }
30
+ end
31
+ self.send sym, *args
32
+ found = true
43
33
  end
44
34
  end
45
- end
46
-
47
- at_exit do
48
- __commands__ << FLUSH_SIGNATURE
49
- PandaCanvas.new(__width__, __height__, __commands__).show if $!.nil?
35
+ super(sym, *args) unless found
50
36
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Dimitry Solovyov
@@ -56,6 +56,7 @@ extensions: []
56
56
  extra_rdoc_files: []
57
57
 
58
58
  files:
59
+ - lib/panda_canvas/canvas.rb
59
60
  - lib/panda_canvas/version.rb
60
61
  - lib/panda_canvas.rb
61
62
  - LICENSE