rubysketch 0.3.2

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.
@@ -0,0 +1,130 @@
1
+ module RubySketch
2
+
3
+
4
+ class Window < Reflex::Window
5
+
6
+ attr_accessor :setup, :update, :draw, :before_draw, :after_draw, :resize,
7
+ :pointer_down, :pointer_up, :pointer_move, :pointer_drag,
8
+ :key, :motion
9
+
10
+ attr_accessor :auto_resize
11
+
12
+ attr_reader :canvas, :canvas_painter
13
+
14
+ def initialize (width = 500, height = 500, *args, &block)
15
+ @events = []
16
+ @auto_resize = true
17
+ @error = nil
18
+
19
+ reset_canvas 1, 1
20
+
21
+ super *args, size: [width, height], &block
22
+ end
23
+
24
+ def start (&block)
25
+ draw_canvas do
26
+ block.call if block
27
+ on_setup
28
+ end
29
+ end
30
+
31
+ def event ()
32
+ @events.last
33
+ end
34
+
35
+ def on_setup ()
36
+ call_block @setup, nil
37
+ end
38
+
39
+ def on_update (e)
40
+ call_block @update, e
41
+ redraw
42
+ end
43
+
44
+ def on_draw (e)
45
+ draw_canvas {call_block @draw, e} if @draw
46
+ e.painter.image @canvas
47
+ end
48
+
49
+ def on_key (e)
50
+ draw_canvas {call_block @key, e} if @key
51
+ end
52
+
53
+ def on_pointer (e)
54
+ block = case e.type
55
+ when :down then @pointer_down
56
+ when :up then @pointer_up
57
+ when :move then e.drag? ? @pointer_drag : @pointer_move
58
+ end
59
+ draw_canvas {call_block block, e} if block
60
+ end
61
+
62
+ def on_motion (e)
63
+ draw_canvas {call_block @motion, e} if @motion
64
+ end
65
+
66
+ def on_resize (e)
67
+ reset_canvas e.width, e.height if @auto_resize
68
+ draw_canvas {call_block @resize, e} if @resize
69
+ end
70
+
71
+ private
72
+
73
+ def reset_canvas (width, height)
74
+ return if width * height == 0
75
+ return if width == @canvas&.width && height == @canvas&.height
76
+
77
+ old_canvas = @canvas
78
+ old_painter = @canvas_painter
79
+
80
+ cs = old_canvas&.color_space || Rays::RGBA
81
+ @canvas = Rays::Image.new width, height, cs, painter.pixel_density
82
+ @canvas_painter = @canvas.painter
83
+
84
+ if old_canvas
85
+ @canvas_painter.paint {image old_canvas}
86
+ copy_painter_attributes old_painter, @canvas_painter
87
+ end
88
+ end
89
+
90
+ def copy_painter_attributes (from, to)
91
+ to.fill = from.fill
92
+ to.stroke = from.stroke
93
+ to.stroke_width = from.stroke_width
94
+ to.stroke_cap = from.stroke_cap
95
+ to.stroke_join = from.stroke_join
96
+ to.miter_limit = from.miter_limit
97
+ to.font = from.font
98
+ end
99
+
100
+ def draw_canvas (&block)
101
+ begin_draw
102
+ block.call
103
+ ensure
104
+ end_draw
105
+ end
106
+
107
+ def begin_draw ()
108
+ @canvas_painter.__send__ :begin_paint
109
+ @before_draw&.call
110
+ end
111
+
112
+ def end_draw ()
113
+ @after_draw&.call
114
+ @canvas_painter.__send__ :end_paint
115
+ end
116
+
117
+ def call_block (block, event, *args)
118
+ @events.push event
119
+ block.call event, *args if block && !@error
120
+ rescue Exception => e
121
+ @error = e
122
+ $stderr.puts e.full_message
123
+ ensure
124
+ @events.pop
125
+ end
126
+
127
+ end# Window
128
+
129
+
130
+ end# RubySketch
@@ -0,0 +1,44 @@
1
+ # -*- mode: ruby -*-
2
+
3
+
4
+ File.expand_path('lib', __dir__)
5
+ .tap {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
6
+
7
+ require 'rubysketch/module'
8
+
9
+
10
+ Gem::Specification.new do |s|
11
+ glob = -> *patterns do
12
+ patterns.map {|pat| Dir.glob(pat).to_a}.flatten
13
+ end
14
+
15
+ mod = RubySketch::Module
16
+ name = mod.name.downcase
17
+ rdocs = glob.call *%w[README]
18
+
19
+ s.name = name
20
+ s.summary = 'Processing like Creative Coding Framework.'
21
+ s.description = 'Creative Coding Framework have API compatible to Processing API or p5.js.'
22
+ s.version = mod.version
23
+
24
+ s.authors = %w[xordog]
25
+ s.email = 'xordog@gmail.com'
26
+ s.homepage = "https://github.com/xord/rubysketch"
27
+
28
+ s.platform = Gem::Platform::RUBY
29
+ s.required_ruby_version = '~> 2'
30
+
31
+ s.add_runtime_dependency 'yard'
32
+ s.add_runtime_dependency 'xot', '~> 0.1'
33
+ s.add_runtime_dependency 'beeps', '~> 0.1'
34
+ s.add_runtime_dependency 'rucy', '~> 0.1'
35
+ s.add_runtime_dependency 'rays', '~> 0.1'
36
+ s.add_runtime_dependency 'reflexion', '~> 0.1'
37
+
38
+ s.files = `git ls-files`.split $/
39
+ s.test_files = s.files.grep %r{^(test|spec|features)/}
40
+ s.extra_rdoc_files = rdocs.to_a
41
+ s.has_rdoc = true
42
+
43
+ s.extensions << 'Rakefile'
44
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubysketch
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2
5
+ platform: ruby
6
+ authors:
7
+ - xordog
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-07-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: yard
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: xot
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: beeps
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rucy
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rays
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.1'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: reflexion
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.1'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.1'
97
+ description: Creative Coding Framework have API compatible to Processing API or p5.js.
98
+ email: xordog@gmail.com
99
+ executables: []
100
+ extensions:
101
+ - Rakefile
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".yardopts"
106
+ - ChangeLog.md
107
+ - LICENSE
108
+ - README.md
109
+ - Rakefile
110
+ - VERSION
111
+ - examples/clock.rb
112
+ - examples/glsl.rb
113
+ - examples/hello.rb
114
+ - examples/image.rb
115
+ - examples/shapes.rb
116
+ - lib/rubysketch-processing.rb
117
+ - lib/rubysketch.rb
118
+ - lib/rubysketch/glsl.rb
119
+ - lib/rubysketch/module.rb
120
+ - lib/rubysketch/processing.rb
121
+ - lib/rubysketch/window.rb
122
+ - rubysketch.gemspec
123
+ homepage: https://github.com/xord/rubysketch
124
+ licenses: []
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '2'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubygems_version: 3.0.3
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Processing like Creative Coding Framework.
145
+ test_files: []