rubysketch 0.3.21 → 0.5.1
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 +4 -4
- data/.github/workflows/{release.yml → release-gem.yml} +21 -21
- data/.github/workflows/tag.yml +35 -0
- data/.github/workflows/test.yml +8 -9
- data/.github/workflows/utils.rb +55 -0
- data/ChangeLog.md +7 -150
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/Rakefile +10 -34
- data/RubySketch.podspec +4 -3
- data/VERSION +1 -1
- data/examples/hello.rb +6 -6
- data/lib/rubysketch/all.rb +9 -0
- data/lib/rubysketch/context.rb +47 -0
- data/lib/rubysketch/{module.rb → extension.rb} +3 -3
- data/lib/rubysketch/graphics_context.rb +37 -0
- data/lib/rubysketch/helper.rb +5 -0
- data/lib/rubysketch/sprite.rb +101 -0
- data/lib/rubysketch.rb +30 -12
- data/rubysketch.gemspec +15 -8
- data/src/{RubySketch.h → RubyProcessing.h} +0 -4
- data/src/RubyProcessing.mm +25 -0
- data/test/helper.rb +3 -10
- data/test/test_sprite.rb +23 -0
- metadata +119 -29
- data/examples/breakout.rb +0 -212
- data/examples/camera.rb +0 -14
- data/examples/clock.rb +0 -57
- data/examples/delay_camera.rb +0 -33
- data/examples/glsl.rb +0 -14
- data/examples/image.rb +0 -13
- data/examples/shapes.rb +0 -121
- data/lib/rubysketch/app.rb +0 -13
- data/lib/rubysketch/glsl.rb +0 -38
- data/lib/rubysketch/processing.rb +0 -2910
- data/lib/rubysketch/window.rb +0 -205
- data/lib/rubysketch-glsl.rb +0 -11
- data/lib/rubysketch-processing.rb +0 -25
- data/src/RubySketch.mm +0 -55
- data/test/processing/test_utility.rb +0 -34
- data/test/processing/test_vector.rb +0 -394
data/lib/rubysketch/window.rb
DELETED
@@ -1,205 +0,0 @@
|
|
1
|
-
module RubySketch
|
2
|
-
|
3
|
-
|
4
|
-
class Window < Reflex::Window
|
5
|
-
|
6
|
-
class CanvasView < Reflex::View
|
7
|
-
def on_update(e)
|
8
|
-
window.on_canvas_update e
|
9
|
-
end
|
10
|
-
|
11
|
-
def on_draw(e)
|
12
|
-
window.on_canvas_draw e
|
13
|
-
end
|
14
|
-
|
15
|
-
def on_pointer(e)
|
16
|
-
window.on_canvas_pointer e
|
17
|
-
end
|
18
|
-
|
19
|
-
def on_resize(e)
|
20
|
-
window.on_canvas_resize e
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
attr_accessor :setup, :update, :draw, :before_draw, :after_draw, :resize,
|
25
|
-
:key_down, :key_up,
|
26
|
-
:pointer_down, :pointer_up, :pointer_move, :pointer_drag,
|
27
|
-
:motion
|
28
|
-
|
29
|
-
attr_accessor :auto_resize
|
30
|
-
|
31
|
-
attr_reader :canvas_image, :canvas_painter
|
32
|
-
|
33
|
-
def initialize(width = 500, height = 500, *args, **kwargs, &block)
|
34
|
-
RubySketch.instance_variable_set :@window, self
|
35
|
-
|
36
|
-
@canvas_image =
|
37
|
-
@canvas_painter = nil
|
38
|
-
@events = []
|
39
|
-
@auto_resize = true
|
40
|
-
@error = nil
|
41
|
-
|
42
|
-
painter.miter_limit = 10
|
43
|
-
resize_canvas 1, 1
|
44
|
-
|
45
|
-
@canvas_view = add CanvasView.new name: :canvas
|
46
|
-
|
47
|
-
super(*args, size: [width, height], **kwargs, &block)
|
48
|
-
end
|
49
|
-
|
50
|
-
def start(&block)
|
51
|
-
draw_canvas do
|
52
|
-
block.call if block
|
53
|
-
on_setup
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def event()
|
58
|
-
@events.last
|
59
|
-
end
|
60
|
-
|
61
|
-
def on_setup()
|
62
|
-
call_block @setup, nil
|
63
|
-
end
|
64
|
-
|
65
|
-
def on_resize(e)
|
66
|
-
on_canvas_resize e
|
67
|
-
end
|
68
|
-
|
69
|
-
def on_draw(e)
|
70
|
-
update_canvas_view
|
71
|
-
end
|
72
|
-
|
73
|
-
def on_key(e)
|
74
|
-
block = case e.action
|
75
|
-
when :down then @key_down
|
76
|
-
when :up then @key_up
|
77
|
-
end
|
78
|
-
draw_canvas {call_block block, e} if block
|
79
|
-
end
|
80
|
-
|
81
|
-
def on_motion(e)
|
82
|
-
draw_canvas {call_block @motion, e} if @motion
|
83
|
-
end
|
84
|
-
|
85
|
-
def on_canvas_update(e)
|
86
|
-
call_block @update, e
|
87
|
-
@canvas_view.redraw
|
88
|
-
end
|
89
|
-
|
90
|
-
def on_canvas_draw(e)
|
91
|
-
draw_canvas {call_block @draw, e} if @draw
|
92
|
-
e.painter.image @canvas_image
|
93
|
-
end
|
94
|
-
|
95
|
-
def on_canvas_pointer(e)
|
96
|
-
block = case e.action
|
97
|
-
when :down then @pointer_down
|
98
|
-
when :up, :cancel then @pointer_up
|
99
|
-
when :move then e.drag? ? @pointer_drag : @pointer_move
|
100
|
-
end
|
101
|
-
draw_canvas {call_block block, e} if block
|
102
|
-
end
|
103
|
-
|
104
|
-
def on_canvas_resize(e)
|
105
|
-
resize_canvas e.width, e.height if @auto_resize
|
106
|
-
draw_canvas {call_block @resize, e} if @resize
|
107
|
-
end
|
108
|
-
|
109
|
-
private
|
110
|
-
|
111
|
-
def resize_canvas(width, height, pixel_density = nil)
|
112
|
-
return nil if width * height == 0
|
113
|
-
|
114
|
-
unless width == @canvas_image&.width &&
|
115
|
-
height == @canvas_image&.height &&
|
116
|
-
pixel_density == @canvas_painter&.pixel_density
|
117
|
-
|
118
|
-
old_image = @canvas_image
|
119
|
-
old_painter = @canvas_painter
|
120
|
-
cs = old_image&.color_space || Rays::RGBA
|
121
|
-
pd = pixel_density ||
|
122
|
-
old_painter&.pixel_density ||
|
123
|
-
painter .pixel_density
|
124
|
-
|
125
|
-
@canvas_image = Rays::Image.new width, height, cs, pd
|
126
|
-
@canvas_painter = @canvas_image.painter
|
127
|
-
|
128
|
-
if old_image
|
129
|
-
@canvas_painter.paint {image old_image}
|
130
|
-
copy_painter_attributes old_painter, @canvas_painter
|
131
|
-
end
|
132
|
-
|
133
|
-
resize_window width, height
|
134
|
-
GC.start
|
135
|
-
end
|
136
|
-
|
137
|
-
@canvas_painter
|
138
|
-
end
|
139
|
-
|
140
|
-
def copy_painter_attributes(from, to)
|
141
|
-
to.fill = from.fill
|
142
|
-
to.stroke = from.stroke
|
143
|
-
to.stroke_width = from.stroke_width
|
144
|
-
to.stroke_cap = from.stroke_cap
|
145
|
-
to.stroke_join = from.stroke_join
|
146
|
-
to.miter_limit = from.miter_limit
|
147
|
-
to.font = from.font
|
148
|
-
end
|
149
|
-
|
150
|
-
def resize_window(width, height)
|
151
|
-
size width, height
|
152
|
-
end
|
153
|
-
|
154
|
-
def update_canvas_view()
|
155
|
-
scrollx, scrolly, zoom = get_scroll_and_zoom
|
156
|
-
@canvas_view.scroll_to scrollx, scrolly
|
157
|
-
@canvas_view.zoom zoom
|
158
|
-
end
|
159
|
-
|
160
|
-
def get_scroll_and_zoom()
|
161
|
-
ww, wh = width.to_f, height.to_f
|
162
|
-
cw, ch = @canvas_image.width.to_f, @canvas_image.height.to_f
|
163
|
-
return [0, 0, 1] if ww == 0 || wh == 0 || cw == 0 || ch == 0
|
164
|
-
|
165
|
-
wratio, cratio = ww / wh, cw / ch
|
166
|
-
if wratio >= cratio
|
167
|
-
scaled_w = wh * cratio
|
168
|
-
return (ww - scaled_w) / 2, 0, scaled_w / cw
|
169
|
-
else
|
170
|
-
scaled_h = ww / cratio
|
171
|
-
return 0, (wh - scaled_h) / 2, ww / cw
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
def draw_canvas(&block)
|
176
|
-
begin_draw
|
177
|
-
block.call
|
178
|
-
ensure
|
179
|
-
end_draw
|
180
|
-
end
|
181
|
-
|
182
|
-
def begin_draw()
|
183
|
-
@canvas_painter.__send__ :begin_paint
|
184
|
-
@before_draw&.call
|
185
|
-
end
|
186
|
-
|
187
|
-
def end_draw()
|
188
|
-
@after_draw&.call
|
189
|
-
@canvas_painter.__send__ :end_paint
|
190
|
-
end
|
191
|
-
|
192
|
-
def call_block(block, event, *args)
|
193
|
-
@events.push event
|
194
|
-
block.call event, *args if block && !@error
|
195
|
-
rescue Exception => e
|
196
|
-
@error = e
|
197
|
-
$stderr.puts e.full_message
|
198
|
-
ensure
|
199
|
-
@events.pop
|
200
|
-
end
|
201
|
-
|
202
|
-
end# Window
|
203
|
-
|
204
|
-
|
205
|
-
end# RubySketch
|
data/lib/rubysketch-glsl.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'rubysketch'
|
2
|
-
|
3
|
-
|
4
|
-
def (RubySketch::GLSL).run(
|
5
|
-
shader_source,
|
6
|
-
title: 'RubySketch',
|
7
|
-
width: 500, height: 500)
|
8
|
-
w = RubySketch::Window.new(title: title, w: width, h: height) {start}
|
9
|
-
RubySketch::GLSL::Context.new w, shader_source
|
10
|
-
at_exit {RubySketch::App.new {w.show}.start unless $!}
|
11
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'rubysketch'
|
2
|
-
|
3
|
-
|
4
|
-
begin
|
5
|
-
window = RubySketch::Window.new {start}
|
6
|
-
context = RubySketch::Processing::Context.new window
|
7
|
-
|
8
|
-
(context.methods - Object.instance_methods).each do |method|
|
9
|
-
define_method method do |*args, **kwargs, &block|
|
10
|
-
context.__send__ method, *args, **kwargs, &block
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context.class.constants.each do |const|
|
15
|
-
self.class.const_set const, context.class.const_get(const)
|
16
|
-
end
|
17
|
-
|
18
|
-
window.__send__ :begin_draw
|
19
|
-
at_exit do
|
20
|
-
window.__send__ :end_draw
|
21
|
-
RubySketch::App.new {window.show}.start unless $!
|
22
|
-
end
|
23
|
-
|
24
|
-
RUBYSKETCH_WINDOW = window
|
25
|
-
end
|
data/src/RubySketch.mm
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
#import <CRuby.h>
|
2
|
-
#import "RubySketch.h"
|
3
|
-
#include "../src/ios/view_controller.h"
|
4
|
-
|
5
|
-
|
6
|
-
static ReflexViewController* active_reflex_view_controller = nil;
|
7
|
-
|
8
|
-
static ReflexViewController*
|
9
|
-
ReflexViewController_create()
|
10
|
-
{
|
11
|
-
return active_reflex_view_controller;
|
12
|
-
}
|
13
|
-
|
14
|
-
static void
|
15
|
-
ReflexViewController_show (UIViewController*, ReflexViewController*)
|
16
|
-
{
|
17
|
-
}
|
18
|
-
|
19
|
-
|
20
|
-
@implementation RubySketch
|
21
|
-
|
22
|
-
+ (void) setup
|
23
|
-
{
|
24
|
-
static BOOL done = NO;
|
25
|
-
if (done) return;
|
26
|
-
done = YES;
|
27
|
-
|
28
|
-
[CRuby addLibrary:@"RubySketch" bundle:[NSBundle bundleForClass:RubySketch.class]];
|
29
|
-
|
30
|
-
ReflexViewController_set_create_fun(ReflexViewController_create);
|
31
|
-
ReflexViewController_set_show_fun(ReflexViewController_show);
|
32
|
-
}
|
33
|
-
|
34
|
-
+ (void) start: (NSString*) path
|
35
|
-
{
|
36
|
-
[CRuby evaluate:[NSString stringWithFormat:@
|
37
|
-
"raise 'already started' unless require 'rubysketch-processing'\n"
|
38
|
-
"load '%@'\n"
|
39
|
-
"RUBYSKETCH_WINDOW.__send__ :end_draw\n"
|
40
|
-
"RUBYSKETCH_WINDOW.show",
|
41
|
-
path
|
42
|
-
]];
|
43
|
-
}
|
44
|
-
|
45
|
-
+ (void) setActiveReflexViewController: (id) reflexViewController
|
46
|
-
{
|
47
|
-
active_reflex_view_controller = reflexViewController;
|
48
|
-
}
|
49
|
-
|
50
|
-
+ (void) resetActiveReflexViewController
|
51
|
-
{
|
52
|
-
active_reflex_view_controller = nil;
|
53
|
-
}
|
54
|
-
|
55
|
-
@end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
|
-
require_relative '../helper'
|
5
|
-
|
6
|
-
|
7
|
-
class TestProcessingUtility < Test::Unit::TestCase
|
8
|
-
|
9
|
-
def context()
|
10
|
-
RubySketch::Processing::Context.new RubySketch::Window.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_random()
|
14
|
-
c = context
|
15
|
-
|
16
|
-
assert_equal Float, c.random(1).class
|
17
|
-
assert_equal Float, c.random(1.0).class
|
18
|
-
assert_equal Symbol, c.random((:a..:z).to_a).class
|
19
|
-
|
20
|
-
assert_not_equal c.random, c.random
|
21
|
-
|
22
|
-
10000.times do
|
23
|
-
n = c.random
|
24
|
-
assert 0 <= n && n < 1
|
25
|
-
|
26
|
-
n = c.random 1
|
27
|
-
assert 0 <= n && n < 1
|
28
|
-
|
29
|
-
n = c.random 1, 2
|
30
|
-
assert 1.0 <= n && n < 2.0
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
end# TestProcessingUtility
|