rubysketch 0.8.1 → 0.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9f827a8489513f0d0f42925e6826949119d5fd2605f4822e62ca25c5161c71c
4
- data.tar.gz: 7afb9647cf37d15a790dd2f65cb367f3954762e2a6b38c5702f71819694b5104
3
+ metadata.gz: 7d8dec759594380f551b5fd46d9f880d38351930e360942630fbac8ac4a3b91b
4
+ data.tar.gz: 953ab7409d9439449f34baa09695f76ba45a0e421e4a2bbadd47b0245dde5e59
5
5
  SHA512:
6
- metadata.gz: 1abcdcc709c0d76ecf23e27779d86bf044766103db9bfec7b9f3418b3f20b11eba48a66a4c847ff4723756de787dea7acd25dd3b54563be4ac4069eeaa131acb
7
- data.tar.gz: 71b33d20e86fbcac9d951b24e3ffbc0171b6f4b533506523922587d228dfdbd988ac9d31c76dce3d2693d3f1df003ae3b0965b89051b65347b88327da73ca4a1
6
+ metadata.gz: 984289d2daf410e6729e4f09f83127938cde051f4bbdb91a82291fc7c3e571a0eac6f5d233c54a69c668c1dd6d836cb50d46c3fa327c769b689c700af64ecc7c
7
+ data.tar.gz: d07dc1574e39ee30f1d44d00f455c6ab6f8ef8c5d9ef01d3317dc286cbc111b19bb3865c7b937073728b697191d6095337181c9dbdcc167ff74dcf6c0c048528
data/ChangeLog.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # rubysketch ChangeLog
2
2
 
3
3
 
4
+ ## [v0.9.0] - 2026-06-12
5
+
6
+ - [BREAKING] Drop redundant drawXxx aliases from GraphicsContext (from processing)
7
+ - [BREAKING] Make pixelDensity a keyword arg in createGraphics (from processing)
8
+
9
+ - Adopt the per-window Context model from Processing
10
+ - Make context dispatch survive across event paths
11
+ - Rework physics example with walls, FPS, and drag-to-spawn
12
+
13
+
4
14
  ## [v0.8.1] - 2026-05-20
5
15
 
6
16
  - Rename snake_case methods to camelCase
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.1
1
+ 0.9.0
data/examples/physics.rb CHANGED
@@ -5,21 +5,50 @@
5
5
  require 'rubysketch'
6
6
  using RubySketch
7
7
 
8
- noStroke
9
- gravity 0, 1000
10
8
 
11
- sprites = []
12
- ground = createSprite 0, height - 10, width, 10
9
+ def setup()
10
+ noStroke
11
+ gravity 0, 1000
13
12
 
14
- draw do
15
- background 100
16
- sprite *sprites, ground
13
+ $sprites = []
14
+ $grounds = [
15
+ createSprite(0, height - 10, width, 10),
16
+ createSprite(0, 0, 10, height),
17
+ createSprite(width - 10, 0, 10, height)
18
+ ]
17
19
  end
18
20
 
19
- mousePressed do
20
- shape = Circle.new 0, 0, 20
21
- sp = createSprite mouseX + rand, mouseY + rand, shape: shape
21
+ def draw()
22
+ background 0
23
+
24
+ fill 200
25
+ sprite *$grounds
26
+ fill 150, 240, 150
27
+ sprite *$sprites
28
+
29
+ textSize 16
30
+ fill 255, 200, 150
31
+ text "#{frameRate.to_i} FPS, #{$sprites.size} Shapes", 20, 30
32
+ end
33
+
34
+ def mousePressed()
35
+ $sprites << create(mouseX, mouseY)
36
+ end
37
+
38
+ def mouseDragged()
39
+ $sprites << create(mouseX, mouseY)
40
+ end
41
+
42
+ def create(x, y)
43
+ x += rand
44
+ y += rand
45
+ size = 20
46
+ if rand(2) == 0
47
+ sp = createSprite x, y, size, size
48
+ else
49
+ sp = createSprite x, y, shape: Circle.new(0, 0, size)
50
+ end
22
51
  sp.dynamic = true
23
52
  sp.restitution = 0.5
24
- sprites << sp
53
+ sp
25
54
  end
@@ -14,6 +14,7 @@ end# RubySketch
14
14
 
15
15
  require 'rubysketch/extension'
16
16
  require 'rubysketch/helper'
17
+ require 'rubysketch/window'
17
18
 
18
19
  require 'rubysketch/sprite'
19
20
  require 'rubysketch/shape'
@@ -63,7 +63,7 @@ module RubySketch
63
63
  raise 'invalid image' if image && !image.getInternal__.is_a?(Rays::Image)
64
64
  raise 'invalid shape' if shape && !shape.getInternal__.is_a?(Reflex::Shape)
65
65
 
66
- @context__ = context || Context.context__
66
+ @context__ = context || Context.current__
67
67
  @shape__ = shape
68
68
  @view__ = View.new(
69
69
  self, x: x, y: y, w: w, h: h,
@@ -851,7 +851,7 @@ module RubySketch
851
851
  # @return [Boolean] is any key pressed or not
852
852
  #
853
853
  def keyPressed(&block)
854
- @view__.keyPressed = block if block
854
+ setViewBlock__ :keyPressed, block if block
855
855
  keyIsPressed
856
856
  end
857
857
 
@@ -860,7 +860,7 @@ module RubySketch
860
860
  # @return [nil] nil
861
861
  #
862
862
  def keyReleased(&block)
863
- @view__.keyReleased = block if block
863
+ setViewBlock__ :keyReleased, block if block
864
864
  nil
865
865
  end
866
866
 
@@ -869,7 +869,7 @@ module RubySketch
869
869
  # @return [nil] nil
870
870
  #
871
871
  def keyTyped(&block)
872
- @view__.keyTyped = block if block
872
+ setViewBlock__ :keyTyped, block if block
873
873
  nil
874
874
  end
875
875
 
@@ -883,7 +883,7 @@ module RubySketch
883
883
  # @return [Boolean] is any mouse button pressed or not
884
884
  #
885
885
  def mousePressed(&block)
886
- @view__.mousePressed = block if block
886
+ setViewBlock__ :mousePressed, block if block
887
887
  @view__.mousePressed?
888
888
  end
889
889
 
@@ -897,7 +897,7 @@ module RubySketch
897
897
  # @return [nil] nil
898
898
  #
899
899
  def mouseReleased(&block)
900
- @view__.mouseReleased = block if block
900
+ setViewBlock__ :mouseReleased, block if block
901
901
  nil
902
902
  end
903
903
 
@@ -911,7 +911,7 @@ module RubySketch
911
911
  # @return [nil] nil
912
912
  #
913
913
  def mouseMoved(&block)
914
- @view__.mouseMoved = block if block
914
+ setViewBlock__ :mouseMoved, block if block
915
915
  nil
916
916
  end
917
917
 
@@ -925,7 +925,7 @@ module RubySketch
925
925
  # @return [nil] nil
926
926
  #
927
927
  def mouseDragged(&block)
928
- @view__.mouseDragged = block if block
928
+ setViewBlock__ :mouseDragged, block if block
929
929
  nil
930
930
  end
931
931
 
@@ -939,7 +939,7 @@ module RubySketch
939
939
  # @return [nil] nil
940
940
  #
941
941
  def mouseClicked(&block)
942
- @view__.mouseClicked = block if block
942
+ setViewBlock__ :mouseClicked, block if block
943
943
  nil
944
944
  end
945
945
 
@@ -953,7 +953,7 @@ module RubySketch
953
953
  # @return [nil] nil
954
954
  #
955
955
  def mouseWheel(&block)
956
- @view__.mouseWheel = block if block
956
+ setViewBlock__ :mouseWheel, block if block
957
957
  nil
958
958
  end
959
959
 
@@ -967,7 +967,7 @@ module RubySketch
967
967
  # @return [nil] nil
968
968
  #
969
969
  def touchStarted(&block)
970
- @view__.touchStarted = block if block
970
+ setViewBlock__ :touchStarted, block if block
971
971
  nil
972
972
  end
973
973
 
@@ -981,7 +981,7 @@ module RubySketch
981
981
  # @return [nil] nil
982
982
  #
983
983
  def touchEnded(&block)
984
- @view__.touchEnded = block if block
984
+ setViewBlock__ :touchEnded, block if block
985
985
  nil
986
986
  end
987
987
 
@@ -995,7 +995,7 @@ module RubySketch
995
995
  # @return [nil] nil
996
996
  #
997
997
  def touchMoved(&block)
998
- @view__.touchMoved = block if block
998
+ setViewBlock__ :touchMoved, block if block
999
999
  nil
1000
1000
  end
1001
1001
 
@@ -1084,6 +1084,17 @@ module RubySketch
1084
1084
  end
1085
1085
  end
1086
1086
 
1087
+ # @private
1088
+ def setViewBlock__(name, block)
1089
+ c = @context__
1090
+ @view__.__send__ "#{name}=", block && (proc do |*a, **k, &b|
1091
+ prev, $processing_context__ = $processing_context__, c
1092
+ block.call(*a, **k, &b)
1093
+ ensure
1094
+ $processing_context__ = prev
1095
+ end)
1096
+ end
1097
+
1087
1098
  end# Sprite
1088
1099
 
1089
1100
 
@@ -1147,7 +1158,7 @@ module RubySketch
1147
1158
  #
1148
1159
  def createSprite(*args, klass: nil, context: nil, **kwargs)
1149
1160
  klass ||= RubySketch::Sprite
1150
- context ||= Context.context__
1161
+ context ||= Context.current__
1151
1162
  addSprite klass.new(*args, context: context, **kwargs)
1152
1163
  end
1153
1164
 
@@ -0,0 +1,14 @@
1
+ module RubySketch
2
+
3
+
4
+ # @private
5
+ class Window < Processing::Window
6
+
7
+ def initialize(*args, context_class: Context, **kwargs)
8
+ super
9
+ end
10
+
11
+ end# Window
12
+
13
+
14
+ end# RubySketch
data/lib/rubysketch.rb CHANGED
@@ -2,13 +2,13 @@ require 'rubysketch/all'
2
2
 
3
3
 
4
4
  module RubySketch
5
- WINDOW__, CONTEXT__ = Processing.setup__ RubySketch
5
+ WINDOW__ = Processing.setup__ Window, Context
6
+ $processing_context__ = WINDOW__.context
6
7
 
7
8
  refine Object do
8
- context = CONTEXT__
9
- Processing.funcs__(context).each do |func|
9
+ Processing.funcs__(Context).each do |func|
10
10
  define_method func do |*args, **kwargs, &block|
11
- context.__send__ func, *args, **kwargs, &block
11
+ $processing_context__.__send__ func, *args, **kwargs, &block
12
12
  end
13
13
  end
14
14
  end
@@ -23,10 +23,9 @@ def RubySketch(snake_case: false)
23
23
  Processing.alias_snake_case_methods__ RubySketch
24
24
 
25
25
  refine Object do
26
- context = RubySketch::CONTEXT__
27
- Processing.funcs__(context).each do |func|
26
+ Processing.funcs__(RubySketch::Context).each do |func|
28
27
  define_method func do |*args, **kwargs, &block|
29
- context.__send__ func, *args, **kwargs, &block
28
+ $processing_context__.__send__ func, *args, **kwargs, &block
30
29
  end
31
30
  end
32
31
  end
@@ -35,20 +34,20 @@ end
35
34
 
36
35
 
37
36
  begin
38
- w, c = RubySketch::WINDOW__, RubySketch::CONTEXT__
37
+ w = RubySketch::WINDOW__
39
38
 
40
- c.class.constants
39
+ w.context.class.constants
41
40
  .reject {_1 =~ /__$/}
42
- .each {self.class.const_set _1, c.class.const_get(_1)}
41
+ .each {self.class.const_set _1, w.context.class.const_get(_1)}
43
42
 
44
43
  w.__send__ :begin_draw
45
44
  at_exit do
46
- Processing.events__(c).each do |event|
45
+ Processing.events__(w.context.class).each do |event|
47
46
  m = begin method event; rescue NameError; nil end
48
- c.__send__(event) {__send__ event} if m
47
+ w.context.__send__(event) {__send__ event} if m
49
48
  end
50
49
 
51
50
  w.__send__ :end_draw
52
- Processing::App.new {w.show}.start if c.hasUserBlocks__ && !$!
51
+ Processing::App.new {w.show}.start if w.context.hasUserBlocks__ && !$!
53
52
  end
54
53
  end
data/rubysketch.gemspec CHANGED
@@ -25,12 +25,12 @@ Gem::Specification.new do |s|
25
25
  s.platform = Gem::Platform::RUBY
26
26
  s.required_ruby_version = '>= 3.0.0'
27
27
 
28
- s.add_dependency 'xot', '~> 0.3.13'
29
- s.add_dependency 'rucy', '~> 0.3.13'
30
- s.add_dependency 'beeps', '~> 0.3.14'
31
- s.add_dependency 'rays', '~> 0.3.14'
32
- s.add_dependency 'reflexion', '~> 0.4.1'
33
- s.add_dependency 'processing', '~> 1.2.1'
28
+ s.add_dependency 'xot', '~> 0.3.14'
29
+ s.add_dependency 'rucy', '~> 0.3.14'
30
+ s.add_dependency 'beeps', '~> 0.3.15'
31
+ s.add_dependency 'rays', '~> 0.3.15'
32
+ s.add_dependency 'reflexion', '~> 0.4.2'
33
+ s.add_dependency 'processing', '~> 1.3.0'
34
34
 
35
35
  s.files = `git ls-files`.split $/
36
36
  s.test_files = s.files.grep %r{^(test|spec|features)/}
data/test/test_context.rb CHANGED
@@ -4,14 +4,21 @@ require_relative 'helper'
4
4
  class TestContext < Test::Unit::TestCase
5
5
 
6
6
  RS = RubySketch
7
- P = Processing
7
+
8
+ def sprite(*args, **kwargs)
9
+ RS::Sprite.new(*args, **kwargs)
10
+ end
8
11
 
9
12
  def context()
10
- RS::Context.new P::Window.new
13
+ RS::Context.current__
11
14
  end
12
15
 
13
- def sprite(*args, **kwargs)
14
- RS::Sprite.new(*args, **kwargs)
16
+ def setup()
17
+ RS::Context.setCurrent__ RS::Window.new.context
18
+ end
19
+
20
+ def teardown()
21
+ RS::Context.setCurrent__ nil
15
22
  end
16
23
 
17
24
  def test_addSprite()
data/test/test_sprite.rb CHANGED
@@ -17,6 +17,14 @@ class TestSprite < Test::Unit::TestCase
17
17
  RS::Image.new Rays::Image.new(w, h)
18
18
  end
19
19
 
20
+ def setup()
21
+ RS::Context.setCurrent__ RS::Window.new.context
22
+ end
23
+
24
+ def teardown()
25
+ RS::Context.setCurrent__ nil
26
+ end
27
+
20
28
  def test_initialize()
21
29
  assert_equal vec(0, 0), sprite .pos
22
30
  assert_equal vec(1, 2), sprite(1, 2) .pos
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysketch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-05-20 00:00:00.000000000 Z
11
+ date: 2026-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xot
@@ -16,84 +16,84 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.13
19
+ version: 0.3.14
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.13
26
+ version: 0.3.14
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rucy
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.3.13
33
+ version: 0.3.14
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.3.13
40
+ version: 0.3.14
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: beeps
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.3.14
47
+ version: 0.3.15
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.3.14
54
+ version: 0.3.15
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rays
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.3.14
61
+ version: 0.3.15
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.3.14
68
+ version: 0.3.15
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: reflexion
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.4.1
75
+ version: 0.4.2
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.4.1
82
+ version: 0.4.2
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: processing
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.2.1
89
+ version: 1.3.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.2.1
96
+ version: 1.3.0
97
97
  description: A game engine based on the Processing API.
98
98
  email: xordog@gmail.com
99
99
  executables: []
@@ -132,6 +132,7 @@ files:
132
132
  - lib/rubysketch/shape.rb
133
133
  - lib/rubysketch/sound.rb
134
134
  - lib/rubysketch/sprite.rb
135
+ - lib/rubysketch/window.rb
135
136
  - pod.rake
136
137
  - rubysketch.gemspec
137
138
  - src/RubySketch.h