picrate 2.4.1-java → 2.5.2-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.mvn/wrapper/maven-wrapper.properties +1 -1
- data/CHANGELOG.md +9 -1
- data/Gemfile +1 -1
- data/README.md +2 -2
- data/Rakefile +1 -1
- data/docs/.gitignore +1 -0
- data/docs/_classes/{app_render → gfx_render}/app_render.md +5 -5
- data/docs/_classes/vec2d/vec2d.md +2 -2
- data/docs/_methods/{noise_mode.md → noise_modes.md} +9 -21
- data/docs/_posts/2018-05-06-install_jruby.md +5 -5
- data/docs/_posts/2019-11-11-getting_started_buster.md +2 -2
- data/docs/_posts/2020-05-11-getting_started_manjaro.md +13 -4
- data/docs/about.md +1 -1
- data/lib/picrate/app.rb +2 -8
- data/lib/picrate/helper_methods.rb +6 -6
- data/lib/picrate/version.rb +1 -1
- data/lib/picrate-2.5.2.jar +0 -0
- data/picrate.gemspec +1 -1
- data/pom.rb +4 -4
- data/pom.xml +6 -9
- data/src/main/java/monkstone/vecmath/GfxRender.java +10 -11
- data/src/main/java/monkstone/vecmath/JRender.java +7 -7
- data/src/main/java/monkstone/vecmath/ShapeRender.java +3 -4
- data/src/main/java/monkstone/vecmath/vec2/Vec2.java +40 -43
- data/src/main/java/monkstone/vecmath/vec3/Vec3.java +30 -45
- data/src/main/java/processing/awt/PImageAWT.java +1 -1
- data/src/main/java/processing/awt/ShimAWT.java +1 -1
- data/src/main/java/processing/core/PApplet.java +1 -1
- data/src/main/java/processing/core/PImage.java +14 -14
- data/src/main/java/processing/opengl/PGraphicsOpenGL.java +13 -13
- data/src/main/java/processing/opengl/PShader.java +0 -6
- data/src/main/java/processing/opengl/PSurfaceJOGL.java +4 -4
- data/src/main/{java/processing/opengl → resources}/cursors/arrow.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/cross.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/hand.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/license.txt +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/move.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/text.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/wait.png +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/ColorFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/ColorVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/LightFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/LightVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/LineFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/LineVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/MaskFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/PointFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/PointVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/TexFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/TexLightFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/TexLightVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/TexVert.glsl +0 -0
- data/test/noise_test.rb +17 -0
- data/test/test_helper.rb +1 -1
- data/test/vecmath_spec_test.rb +3 -3
- data/vendors/Rakefile +1 -1
- metadata +30 -41
- data/lib/picrate-2.4.1.jar +0 -0
- data/src/main/java/japplemenubar/JAppleMenuBar.java +0 -96
- data/src/main/java/japplemenubar/libjAppleMenuBar.jnilib +0 -0
- data/src/main/java/monkstone/complex/JComplex.java +0 -252
- data/src/main/java/monkstone/vecmath/AppRender.java +0 -88
- data/src/main/java/monkstone/vecmath/package-info.java +0 -20
- data/src/main/java/monkstone/vecmath/vec2/package-info.java +0 -6
- data/src/main/java/monkstone/vecmath/vec3/package-info.java +0 -6
@@ -20,7 +20,8 @@ package monkstone.vecmath.vec2;
|
|
20
20
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
21
|
*
|
22
22
|
* fastAtan2 algorithm from https://github.com/libgdx/libgdx (Apache 2.0 license)
|
23
|
-
*/
|
23
|
+
*/
|
24
|
+
import java.util.logging.Logger;
|
24
25
|
import org.jruby.Ruby;
|
25
26
|
import org.jruby.RubyArray;
|
26
27
|
import org.jruby.RubyClass;
|
@@ -40,7 +41,7 @@ import monkstone.vecmath.JRender;
|
|
40
41
|
* @author Martin Prout
|
41
42
|
*/
|
42
43
|
@JRubyClass(name = "Vec2D")
|
43
|
-
public class Vec2 extends RubyObject {
|
44
|
+
public final class Vec2 extends RubyObject {
|
44
45
|
|
45
46
|
static final double EPSILON = 9.999999747378752e-05; // matches processing.org EPSILON
|
46
47
|
private static final long serialVersionUID = -2950154560223211646L;
|
@@ -57,18 +58,10 @@ public class Vec2 extends RubyObject {
|
|
57
58
|
vec2Cls.defineAnnotatedMethods(Vec2.class);
|
58
59
|
}
|
59
60
|
|
60
|
-
/**
|
61
|
-
*
|
62
|
-
* @return x value :double
|
63
|
-
*/
|
64
61
|
public double javax() {
|
65
62
|
return jx;
|
66
63
|
}
|
67
64
|
|
68
|
-
/**
|
69
|
-
*
|
70
|
-
* @return y value :double
|
71
|
-
*/
|
72
65
|
public double javay() {
|
73
66
|
return jy;
|
74
67
|
}
|
@@ -81,7 +74,7 @@ public class Vec2 extends RubyObject {
|
|
81
74
|
* @return new Vec2 object (ruby)
|
82
75
|
*/
|
83
76
|
@JRubyMethod(name = "new", meta = true, rest = true)
|
84
|
-
public static
|
77
|
+
public static IRubyObject rbNew(ThreadContext context, IRubyObject klazz, IRubyObject... args) {
|
85
78
|
Vec2 vec2 = (Vec2) ((RubyClass) klazz).allocate();
|
86
79
|
vec2.init(context, args);
|
87
80
|
return vec2;
|
@@ -99,16 +92,16 @@ public class Vec2 extends RubyObject {
|
|
99
92
|
void init(ThreadContext context, IRubyObject... args) {
|
100
93
|
int count = args.length;
|
101
94
|
if (count == 2) {
|
102
|
-
jx =
|
103
|
-
jy =
|
95
|
+
jx = args[0] instanceof RubyFloat ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
|
96
|
+
jy = args[1] instanceof RubyFloat ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
104
97
|
} // allow ruby ducktyping in constructor
|
105
98
|
if (count == 1) {
|
106
99
|
if (!(args[0].respondsTo("x"))) {
|
107
100
|
throw context.runtime.newTypeError(args[0].getType() + " doesn't respond_to :x & :y");
|
108
101
|
}
|
109
|
-
jx =
|
102
|
+
jx = args[0].callMethod(context, "x") instanceof RubyFloat
|
110
103
|
? ((RubyFloat) args[0].callMethod(context, "x")).getValue() : ((RubyFixnum) args[0].callMethod(context, "x")).getDoubleValue();
|
111
|
-
jy =
|
104
|
+
jy = args[0].callMethod(context, "y") instanceof RubyFloat
|
112
105
|
? ((RubyFloat) args[0].callMethod(context, "y")).getValue() : ((RubyFixnum) args[0].callMethod(context, "y")).getDoubleValue();
|
113
106
|
}
|
114
107
|
}
|
@@ -170,10 +163,10 @@ public class Vec2 extends RubyObject {
|
|
170
163
|
Ruby runtime = context.runtime;
|
171
164
|
if (key instanceof RubySymbol) {
|
172
165
|
if (key == RubySymbol.newSymbol(runtime, "x")) {
|
173
|
-
jx =
|
166
|
+
jx = value instanceof RubyFloat
|
174
167
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
175
168
|
} else if (key == RubySymbol.newSymbol(runtime, "y")) {
|
176
|
-
jy =
|
169
|
+
jy = value instanceof RubyFloat
|
177
170
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
178
171
|
}
|
179
172
|
} else {
|
@@ -232,23 +225,31 @@ public class Vec2 extends RubyObject {
|
|
232
225
|
} else {
|
233
226
|
throw runtime.newTypeError("argument should be Vec2D");
|
234
227
|
}
|
235
|
-
double result = Math.hypot(
|
228
|
+
double result = Math.hypot(jx - b.jx, jy - b.jy);
|
236
229
|
return runtime.newFloat(result);
|
237
230
|
}
|
238
231
|
|
232
|
+
@Deprecated
|
233
|
+
@JRubyMethod(name = "cross", required = 1)
|
234
|
+
public IRubyObject cross(ThreadContext context, IRubyObject other) {
|
235
|
+
Logger log = Logger.getGlobal();
|
236
|
+
log.warning("prefer ^ operator");
|
237
|
+
return op_wedge(context, other);
|
238
|
+
}
|
239
|
+
|
239
240
|
/**
|
240
241
|
*
|
241
242
|
* @param context ThreadContext
|
242
243
|
* @param other IRubyObject
|
243
|
-
* @return
|
244
|
+
* @return wedge product IRubyObject
|
244
245
|
*/
|
245
|
-
@JRubyMethod(name = "
|
246
|
+
@JRubyMethod(name = "^", required = 1)
|
246
247
|
|
247
|
-
public IRubyObject
|
248
|
+
public IRubyObject op_wedge(ThreadContext context, IRubyObject other) {
|
248
249
|
Vec2 b = null;
|
249
250
|
Ruby runtime = context.runtime;
|
250
251
|
if (other instanceof Vec2) {
|
251
|
-
b =
|
252
|
+
b = other.toJava(Vec2.class);
|
252
253
|
} else {
|
253
254
|
throw runtime.newTypeError("argument should be Vec2D");
|
254
255
|
}
|
@@ -326,7 +327,7 @@ public class Vec2 extends RubyObject {
|
|
326
327
|
|
327
328
|
public IRubyObject op_mul(ThreadContext context, IRubyObject other) {
|
328
329
|
Ruby runtime = context.runtime;
|
329
|
-
double scalar =
|
330
|
+
double scalar = other instanceof RubyFloat
|
330
331
|
? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
331
332
|
return Vec2.rbNew(context, this.getMetaClass(),
|
332
333
|
new IRubyObject[]{runtime.newFloat(jx * scalar),
|
@@ -343,7 +344,7 @@ public class Vec2 extends RubyObject {
|
|
343
344
|
|
344
345
|
public IRubyObject op_div(ThreadContext context, IRubyObject other) {
|
345
346
|
Ruby runtime = context.runtime;
|
346
|
-
double scalar =
|
347
|
+
double scalar = other instanceof RubyFloat
|
347
348
|
? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
348
349
|
if (Math.abs(scalar) < Vec2.EPSILON) {
|
349
350
|
return this;
|
@@ -408,10 +409,8 @@ public class Vec2 extends RubyObject {
|
|
408
409
|
|
409
410
|
public IRubyObject set_mag(ThreadContext context, IRubyObject scalar, Block block) {
|
410
411
|
double new_mag = scalar.toJava(Double.class);
|
411
|
-
if (block.isGiven()) {
|
412
|
-
|
413
|
-
return this;
|
414
|
-
}
|
412
|
+
if (block.isGiven() && !block.yield(context, scalar).toJava(Boolean.class)) {
|
413
|
+
return this;
|
415
414
|
}
|
416
415
|
double current = 0;
|
417
416
|
if (Math.abs(jx) > EPSILON && Math.abs(jy) > EPSILON) {
|
@@ -497,7 +496,7 @@ public class Vec2 extends RubyObject {
|
|
497
496
|
@JRubyMethod(name = "from_angle", meta = true)
|
498
497
|
public static IRubyObject from_angle(ThreadContext context, IRubyObject klazz, IRubyObject scalar) {
|
499
498
|
Ruby runtime = context.runtime;
|
500
|
-
double angle =
|
499
|
+
double angle = scalar instanceof RubyFloat
|
501
500
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
502
501
|
return Vec2.rbNew(context, klazz, new IRubyObject[]{
|
503
502
|
runtime.newFloat(Math.cos(angle)),
|
@@ -528,10 +527,10 @@ public class Vec2 extends RubyObject {
|
|
528
527
|
*/
|
529
528
|
@JRubyMethod(name = "rotate!")
|
530
529
|
public IRubyObject rotate_bang(ThreadContext context, IRubyObject scalar) {
|
531
|
-
double theta =
|
530
|
+
double theta = scalar instanceof RubyFloat
|
532
531
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
533
|
-
double x =
|
534
|
-
double y =
|
532
|
+
double x = jx * Math.cos(theta) - jy * Math.sin(theta);
|
533
|
+
double y = jx * Math.sin(theta) + jy * Math.cos(theta);
|
535
534
|
jx = x;
|
536
535
|
jy = y;
|
537
536
|
return this;
|
@@ -546,7 +545,7 @@ public class Vec2 extends RubyObject {
|
|
546
545
|
@JRubyMethod(name = "rotate")
|
547
546
|
public IRubyObject rotate(ThreadContext context, IRubyObject scalar) {
|
548
547
|
Ruby runtime = context.runtime;
|
549
|
-
double theta =
|
548
|
+
double theta = scalar instanceof RubyFloat
|
550
549
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
551
550
|
IRubyObject[] ary = new IRubyObject[]{
|
552
551
|
runtime.newFloat(jx * Math.cos(theta) - jy * Math.sin(theta)),
|
@@ -567,9 +566,9 @@ public class Vec2 extends RubyObject {
|
|
567
566
|
throw runtime.newSyntaxError("Check syntax");
|
568
567
|
}
|
569
568
|
Vec2 vec = (Vec2) args[0].toJava(Vec2.class);
|
570
|
-
double scalar =
|
569
|
+
double scalar = args[1] instanceof RubyFloat
|
571
570
|
? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
572
|
-
assert
|
571
|
+
assert scalar >= 0 && scalar < 1.0 :
|
573
572
|
"Lerp value " + scalar + " out of range 0..1.0";
|
574
573
|
return Vec2.rbNew(context, this.getMetaClass(), new IRubyObject[]{
|
575
574
|
runtime.newFloat(jx + (vec.jx - jx) * scalar),
|
@@ -589,9 +588,9 @@ public class Vec2 extends RubyObject {
|
|
589
588
|
throw runtime.newSyntaxError("Check syntax");
|
590
589
|
}
|
591
590
|
Vec2 vec = (Vec2) args[0].toJava(Vec2.class);
|
592
|
-
double scalar =
|
591
|
+
double scalar = args[1] instanceof RubyFloat
|
593
592
|
? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
594
|
-
assert
|
593
|
+
assert scalar >= 0 && scalar < 1.0 :
|
595
594
|
"Lerp value " + scalar + " out of range 0..1.0";
|
596
595
|
jx += (vec.jx - jx) * scalar;
|
597
596
|
jy += (vec.jy - jy) * scalar;
|
@@ -752,10 +751,8 @@ public class Vec2 extends RubyObject {
|
|
752
751
|
}
|
753
752
|
if (obj instanceof Vec2) {
|
754
753
|
final Vec2 other = (Vec2) obj;
|
755
|
-
|
756
|
-
&&
|
757
|
-
return true;
|
758
|
-
}
|
754
|
+
return Double.compare(jx, (Double) other.jx) == 0
|
755
|
+
&& Double.compare(jy, (Double) other.jy) == 0;
|
759
756
|
}
|
760
757
|
return false;
|
761
758
|
}
|
@@ -774,8 +771,8 @@ public class Vec2 extends RubyObject {
|
|
774
771
|
}
|
775
772
|
if (other instanceof Vec2) {
|
776
773
|
Vec2 v = (Vec2) other.toJava(Vec2.class);
|
777
|
-
if (
|
778
|
-
&&
|
774
|
+
if (Double.compare(jx, (Double) v.jx) == 0
|
775
|
+
&& Double.compare(jy, (Double) v.jy) == 0) {
|
779
776
|
return runtime.newBoolean(true);
|
780
777
|
}
|
781
778
|
}
|
@@ -1,12 +1,12 @@
|
|
1
1
|
package monkstone.vecmath.vec3;
|
2
2
|
|
3
3
|
/*
|
4
|
-
* Copyright (c)
|
4
|
+
* Copyright (c) 2015-20 Martin Prout
|
5
5
|
*
|
6
6
|
* This library is free software; you can redistribute it and/or
|
7
|
-
* modify it under the terms of the GNU General Public
|
7
|
+
* modify it under the terms of the GNU Lesser General Public
|
8
8
|
* License as published by the Free Software Foundation; either
|
9
|
-
* version
|
9
|
+
* version 2.1 of the License, or (at your option) any later version.
|
10
10
|
*
|
11
11
|
* http://creativecommons.org/licenses/LGPL/2.1/
|
12
12
|
*
|
@@ -15,7 +15,7 @@ package monkstone.vecmath.vec3;
|
|
15
15
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
16
|
* Lesser General Public License for more details.
|
17
17
|
*
|
18
|
-
* You should have received a copy of the GNU General Public
|
18
|
+
* You should have received a copy of the GNU Lesser General Public
|
19
19
|
* License along with this library; if not, write to the Free Software
|
20
20
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
21
|
*/
|
@@ -35,7 +35,6 @@ import monkstone.vecmath.JRender;
|
|
35
35
|
import monkstone.vecmath.vec2.Vec2;
|
36
36
|
|
37
37
|
/**
|
38
|
-
*
|
39
38
|
*
|
40
39
|
* @author Martin Prout
|
41
40
|
*/
|
@@ -66,7 +65,7 @@ public final class Vec3 extends RubyObject {
|
|
66
65
|
* @return new Vec3 object (ruby)
|
67
66
|
*/
|
68
67
|
@JRubyMethod(name = "new", meta = true, rest = true)
|
69
|
-
public
|
68
|
+
public static IRubyObject rbNew(ThreadContext context, IRubyObject klazz, IRubyObject... args) {
|
70
69
|
Vec3 vec = (Vec3) ((RubyClass) klazz).allocate();
|
71
70
|
vec.init(context, args);
|
72
71
|
return vec;
|
@@ -84,27 +83,27 @@ public final class Vec3 extends RubyObject {
|
|
84
83
|
void init(ThreadContext context, IRubyObject... args) {
|
85
84
|
int count = args.length;
|
86
85
|
if (count >= 2) {
|
87
|
-
jx =
|
86
|
+
jx = args[0] instanceof RubyFloat
|
88
87
|
? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
|
89
|
-
jy =
|
88
|
+
jy = args[1] instanceof RubyFloat
|
90
89
|
? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
91
90
|
}
|
92
91
|
if (count == 3) {
|
93
|
-
jz =
|
92
|
+
jz = args[2] instanceof RubyFloat
|
94
93
|
? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
|
95
94
|
} // allow ruby ducktyping in constructor
|
96
95
|
if (count == 1) {
|
97
96
|
if (!(args[0].respondsTo("x"))) {
|
98
97
|
throw context.runtime.newTypeError(args[0].getType() + " doesn't respond_to :x & :y");
|
99
98
|
}
|
100
|
-
jx = (
|
99
|
+
jx = (args[0].callMethod(context, "x")) instanceof RubyFloat
|
101
100
|
? ((RubyFloat) args[0].callMethod(context, "x")).getValue() : ((RubyFixnum) args[0].callMethod(context, "x")).getDoubleValue();
|
102
|
-
jy = (
|
101
|
+
jy = (args[0].callMethod(context, "y")) instanceof RubyFloat
|
103
102
|
? ((RubyFloat) args[0].callMethod(context, "y")).getValue() : ((RubyFixnum) args[0].callMethod(context, "y")).getDoubleValue();
|
104
103
|
if (!(args[0].respondsTo("z"))) {
|
105
104
|
return;
|
106
105
|
} // allow promotion from 2D to 3D, sets jz = 0
|
107
|
-
jz = (
|
106
|
+
jz = (args[0].callMethod(context, "z")) instanceof RubyFloat ? ((RubyFloat) args[0].callMethod(context, "z")).getValue() : ((RubyFixnum) args[0].callMethod(context, "z")).getDoubleValue();
|
108
107
|
}
|
109
108
|
}
|
110
109
|
|
@@ -148,11 +147,7 @@ public final class Vec3 extends RubyObject {
|
|
148
147
|
*/
|
149
148
|
@JRubyMethod(name = "x=")
|
150
149
|
public IRubyObject setX(ThreadContext context, IRubyObject other) {
|
151
|
-
|
152
|
-
jx = ((RubyFloat) other).getValue();
|
153
|
-
} else {
|
154
|
-
jx = ((RubyFixnum) other).getDoubleValue();
|
155
|
-
}
|
150
|
+
jx = other instanceof RubyFloat ? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
156
151
|
return other;
|
157
152
|
}
|
158
153
|
|
@@ -164,11 +159,7 @@ public final class Vec3 extends RubyObject {
|
|
164
159
|
*/
|
165
160
|
@JRubyMethod(name = "y=")
|
166
161
|
public IRubyObject setY(ThreadContext context, IRubyObject other) {
|
167
|
-
|
168
|
-
jy = ((RubyFloat) other).getValue();
|
169
|
-
} else {
|
170
|
-
jy = ((RubyFixnum) other).getDoubleValue();
|
171
|
-
}
|
162
|
+
jy = other instanceof RubyFloat ? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
172
163
|
return other;
|
173
164
|
}
|
174
165
|
|
@@ -180,11 +171,7 @@ public final class Vec3 extends RubyObject {
|
|
180
171
|
*/
|
181
172
|
@JRubyMethod(name = "z=")
|
182
173
|
public IRubyObject setZ(ThreadContext context, IRubyObject other) {
|
183
|
-
|
184
|
-
jz = ((RubyFloat) other).getValue();
|
185
|
-
} else {
|
186
|
-
jz = ((RubyFixnum) other).getDoubleValue();
|
187
|
-
}
|
174
|
+
jz = other instanceof RubyFloat ? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
188
175
|
return other;
|
189
176
|
}
|
190
177
|
|
@@ -223,13 +210,13 @@ public final class Vec3 extends RubyObject {
|
|
223
210
|
Ruby runtime = context.runtime;
|
224
211
|
if (key instanceof RubySymbol) {
|
225
212
|
if (key == RubySymbol.newSymbol(runtime, "x")) {
|
226
|
-
jx =
|
213
|
+
jx = value instanceof RubyFloat
|
227
214
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
228
215
|
} else if (key == RubySymbol.newSymbol(runtime, "y")) {
|
229
|
-
jy =
|
216
|
+
jy = value instanceof RubyFloat
|
230
217
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
231
218
|
} else if (key == RubySymbol.newSymbol(runtime, "z")) {
|
232
|
-
jz =
|
219
|
+
jz = value instanceof RubyFloat
|
233
220
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
234
221
|
} else {
|
235
222
|
throw runtime.newIndexError("invalid key");
|
@@ -369,7 +356,7 @@ public final class Vec3 extends RubyObject {
|
|
369
356
|
@JRubyMethod(name = "*", required = 1)
|
370
357
|
public IRubyObject op_mul(ThreadContext context, IRubyObject scalar) {
|
371
358
|
Ruby runtime = context.runtime;
|
372
|
-
double multi =
|
359
|
+
double multi = scalar instanceof RubyFloat
|
373
360
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
374
361
|
return Vec3.rbNew(context, this.getMetaClass(), new IRubyObject[]{
|
375
362
|
runtime.newFloat(jx * multi),
|
@@ -386,7 +373,7 @@ public final class Vec3 extends RubyObject {
|
|
386
373
|
@JRubyMethod(name = "/", required = 1)
|
387
374
|
public IRubyObject op_div(ThreadContext context, IRubyObject scalar) {
|
388
375
|
Ruby runtime = context.runtime;
|
389
|
-
double divisor =
|
376
|
+
double divisor = scalar instanceof RubyFloat
|
390
377
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
391
378
|
if (Math.abs(divisor) < Vec3.EPSILON) {
|
392
379
|
return this;
|
@@ -428,12 +415,10 @@ public final class Vec3 extends RubyObject {
|
|
428
415
|
*/
|
429
416
|
@JRubyMethod(name = "set_mag")
|
430
417
|
public IRubyObject set_mag(ThreadContext context, IRubyObject scalar, Block block) {
|
431
|
-
if (block.isGiven()) {
|
432
|
-
|
433
|
-
return this;
|
434
|
-
}
|
418
|
+
if (block.isGiven() && !block.yield(context, scalar).toJava(Boolean.class)) {
|
419
|
+
return this;
|
435
420
|
}
|
436
|
-
double new_mag =
|
421
|
+
double new_mag = scalar instanceof RubyFloat
|
437
422
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
438
423
|
double current = Math.sqrt(jx * jx + jy * jy + jz * jz);
|
439
424
|
if (current > EPSILON) {
|
@@ -599,9 +584,9 @@ public final class Vec3 extends RubyObject {
|
|
599
584
|
double u = 0;
|
600
585
|
double v = 0;
|
601
586
|
if (count == 3) {
|
602
|
-
u =
|
587
|
+
u = args[1] instanceof RubyFloat
|
603
588
|
? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
604
|
-
v =
|
589
|
+
v = args[2] instanceof RubyFloat
|
605
590
|
? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
|
606
591
|
}
|
607
592
|
if (count == 2) {
|
@@ -663,9 +648,9 @@ public final class Vec3 extends RubyObject {
|
|
663
648
|
}
|
664
649
|
if (obj instanceof Vec3) {
|
665
650
|
final Vec3 other = (Vec3) obj;
|
666
|
-
if (
|
667
|
-
&&
|
668
|
-
&&
|
651
|
+
if (Double.compare(jx, (Double) other.jx) == 0
|
652
|
+
&& Double.compare(jy, (Double) other.jy) == 0
|
653
|
+
&& Double.compare(jz, (Double) other.jz) == 0) {
|
669
654
|
return true;
|
670
655
|
}
|
671
656
|
|
@@ -687,9 +672,9 @@ public final class Vec3 extends RubyObject {
|
|
687
672
|
}
|
688
673
|
if (other instanceof Vec3) {
|
689
674
|
Vec3 v = (Vec3) other.toJava(Vec3.class);
|
690
|
-
if (
|
691
|
-
&&
|
692
|
-
&&
|
675
|
+
if (Double.compare(jx, (Double) v.jx) == 0
|
676
|
+
&& Double.compare(jy, (Double) v.jy) == 0
|
677
|
+
&& Double.compare(jz, (Double) v.jz) == 0) {
|
693
678
|
return runtime.newBoolean(true);
|
694
679
|
}
|
695
680
|
|
@@ -262,7 +262,7 @@ public class PImageAWT extends PImage {
|
|
262
262
|
* Use ImageIO functions from Java 1.4 and later to handle image save.
|
263
263
|
* Various formats are supported, typically jpeg, png, bmp, and wbmp.
|
264
264
|
* To get a list of the supported formats for writing, use: <BR>
|
265
|
-
* <
|
265
|
+
* <code>println(javax.imageio.ImageIO.getReaderFormatNames())</code>
|
266
266
|
*
|
267
267
|
* @path The path to which the file should be written.
|
268
268
|
*/
|
@@ -354,7 +354,7 @@ public class ShimAWT implements PConstants {
|
|
354
354
|
* Use ImageIO functions from Java 1.4 and later to handle image save.
|
355
355
|
* Various formats are supported, typically jpeg, png, bmp, and wbmp.
|
356
356
|
* To get a list of the supported formats for writing, use: <BR>
|
357
|
-
* <
|
357
|
+
* <code>println(javax.imageio.ImageIO.getReaderFormatNames())</code>
|
358
358
|
*/
|
359
359
|
static protected boolean saveImageIO(PImage image, String path) throws IOException {
|
360
360
|
try {
|
@@ -167,8 +167,8 @@ public class PApplet implements PConstants {
|
|
167
167
|
* that people use the sketchPath() method and it's inited properly. Call
|
168
168
|
* sketchPath() once to set the default.
|
169
169
|
*/
|
170
|
+
|
170
171
|
private String sketchPath;
|
171
|
-
// public String sketchPath;
|
172
172
|
|
173
173
|
static final boolean DEBUG = false;
|
174
174
|
// static final boolean DEBUG = true;
|
@@ -1523,24 +1523,24 @@ public class PImage implements PConstants, Cloneable {
|
|
1523
1523
|
* Sometimes called "Normal" or "Copy" in other software.
|
1524
1524
|
*
|
1525
1525
|
* <LI>BLEND - linear interpolation of colours:
|
1526
|
-
* <
|
1526
|
+
* <code>C = A*factor + B</code>
|
1527
1527
|
*
|
1528
1528
|
* <LI>ADD - additive blending with white clip:
|
1529
|
-
* <
|
1529
|
+
* <code>C = min(A*factor + B, 255)</code>.
|
1530
1530
|
* Clipped to 0..255, Photoshop calls this "Linear Burn",
|
1531
1531
|
* and Director calls it "Add Pin".
|
1532
1532
|
*
|
1533
1533
|
* <LI>SUBTRACT - subtractive blend with black clip:
|
1534
|
-
* <
|
1534
|
+
* <code>C = max(B - A*factor, 0)</code>.
|
1535
1535
|
* Clipped to 0..255, Photoshop calls this "Linear Dodge",
|
1536
1536
|
* and Director calls it "Subtract Pin".
|
1537
1537
|
*
|
1538
1538
|
* <LI>DARKEST - only the darkest colour succeeds:
|
1539
|
-
* <
|
1539
|
+
* <code>C = min(A*factor, B)</code>.
|
1540
1540
|
* Illustrator calls this "Darken".
|
1541
1541
|
*
|
1542
1542
|
* <LI>LIGHTEST - only the lightest colour succeeds:
|
1543
|
-
* <
|
1543
|
+
* <code>C = max(A*factor, B)</code>.
|
1544
1544
|
* Illustrator calls this "Lighten".
|
1545
1545
|
*
|
1546
1546
|
* <LI>DIFFERENCE - subtract colors from underlying image.
|
@@ -1571,12 +1571,12 @@ public class PImage implements PConstants, Cloneable {
|
|
1571
1571
|
* <P>It is important to note that Processing uses "fast" code, not
|
1572
1572
|
* necessarily "correct" code. No biggie, most software does. A nitpicker
|
1573
1573
|
* can find numerous "off by 1 division" problems in the blend code where
|
1574
|
-
* <
|
1575
|
-
* <
|
1574
|
+
* <code>>>8</code> or <code>>>7</code> is used when strictly speaking
|
1575
|
+
* <code>/255.0</T> or <code>/127.0</code> should have been used.</P>
|
1576
1576
|
* <P>For instance, exclusion (not intended for real-time use) reads
|
1577
|
-
* <
|
1578
|
-
* not <
|
1579
|
-
* the same as <
|
1577
|
+
* <code>r1 + r2 - ((2 * r1 * r2) / 255)</code> because <code>255 == 1.0</code>
|
1578
|
+
* not <code>256 == 1.0</code>. In other words, <code>(255*255)>>8</code> is not
|
1579
|
+
* the same as <code>(255*255)/255</code>. But for real-time use the shifts
|
1580
1580
|
* are preferable, and the difference is insignificant for applications
|
1581
1581
|
* built with Processing.</P>
|
1582
1582
|
*
|
@@ -3104,9 +3104,9 @@ int testFunction(int dst, int src) {
|
|
3104
3104
|
* </p>
|
3105
3105
|
* Starting with revision 0092, the format setting is taken into account:
|
3106
3106
|
* <UL>
|
3107
|
-
* <LI><
|
3108
|
-
* <LI><
|
3109
|
-
* <LI><
|
3107
|
+
* <LI><code>ALPHA</code> images written as 8bit grayscale (uses lowest byte)
|
3108
|
+
* <LI><code>RGB</code> → 24 bits
|
3109
|
+
* <LI><code>ARGB</code> → 32 bits
|
3110
3110
|
* </UL>
|
3111
3111
|
* All versions are RLE compressed.
|
3112
3112
|
* </p>
|
@@ -3278,7 +3278,7 @@ int testFunction(int dst, int src) {
|
|
3278
3278
|
* and the extension used is supported (usually png, jpg, jpeg, bmp,
|
3279
3279
|
* and tiff), then those methods will be used to write the image.
|
3280
3280
|
* To get a list of the supported formats for writing, use: <BR>
|
3281
|
-
* <
|
3281
|
+
* <code>println(javax.imageio.ImageIO.getReaderFormatNames())</code>
|
3282
3282
|
* <p>
|
3283
3283
|
* To use the original built-in image writers, use .tga or .tif as the
|
3284
3284
|
* extension, or don't include an extension. When no extension is used,
|
@@ -181,32 +181,32 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
181
181
|
// Shaders
|
182
182
|
|
183
183
|
static protected URL defColorShaderVertURL =
|
184
|
-
PGraphicsOpenGL.class.getResource("/
|
184
|
+
PGraphicsOpenGL.class.getResource("/shaders/ColorVert.glsl");
|
185
185
|
static protected URL defTextureShaderVertURL =
|
186
|
-
PGraphicsOpenGL.class.getResource("/
|
186
|
+
PGraphicsOpenGL.class.getResource("/shaders/TexVert.glsl");
|
187
187
|
static protected URL defLightShaderVertURL =
|
188
|
-
PGraphicsOpenGL.class.getResource("/
|
188
|
+
PGraphicsOpenGL.class.getResource("/shaders/LightVert.glsl");
|
189
189
|
static protected URL defTexlightShaderVertURL =
|
190
|
-
PGraphicsOpenGL.class.getResource("/
|
190
|
+
PGraphicsOpenGL.class.getResource("/shaders/TexLightVert.glsl");
|
191
191
|
static protected URL defColorShaderFragURL =
|
192
|
-
PGraphicsOpenGL.class.getResource("/
|
192
|
+
PGraphicsOpenGL.class.getResource("/shaders/ColorFrag.glsl");
|
193
193
|
static protected URL defTextureShaderFragURL =
|
194
|
-
PGraphicsOpenGL.class.getResource("/
|
194
|
+
PGraphicsOpenGL.class.getResource("/shaders/TexFrag.glsl");
|
195
195
|
static protected URL defLightShaderFragURL =
|
196
|
-
PGraphicsOpenGL.class.getResource("/
|
196
|
+
PGraphicsOpenGL.class.getResource("/shaders/LightFrag.glsl");
|
197
197
|
static protected URL defTexlightShaderFragURL =
|
198
|
-
PGraphicsOpenGL.class.getResource("/
|
198
|
+
PGraphicsOpenGL.class.getResource("/shaders/TexLightFrag.glsl");
|
199
199
|
|
200
200
|
static protected URL defLineShaderVertURL =
|
201
|
-
PGraphicsOpenGL.class.getResource("/
|
201
|
+
PGraphicsOpenGL.class.getResource("/shaders/LineVert.glsl");
|
202
202
|
static protected URL defLineShaderFragURL =
|
203
|
-
PGraphicsOpenGL.class.getResource("/
|
203
|
+
PGraphicsOpenGL.class.getResource("/shaders/LineFrag.glsl");
|
204
204
|
static protected URL defPointShaderVertURL =
|
205
|
-
PGraphicsOpenGL.class.getResource("/
|
205
|
+
PGraphicsOpenGL.class.getResource("/shaders/PointVert.glsl");
|
206
206
|
static protected URL defPointShaderFragURL =
|
207
|
-
PGraphicsOpenGL.class.getResource("/
|
207
|
+
PGraphicsOpenGL.class.getResource("/shaders/PointFrag.glsl");
|
208
208
|
static protected URL maskShaderFragURL =
|
209
|
-
PGraphicsOpenGL.class.getResource("/
|
209
|
+
PGraphicsOpenGL.class.getResource("/shaders/MaskFrag.glsl");
|
210
210
|
|
211
211
|
protected PShader defColorShader;
|
212
212
|
protected PShader defTextureShader;
|
@@ -1757,16 +1757,10 @@ public class PShader implements PConstants {
|
|
1757
1757
|
colorLoc = getAttributeLoc("color");
|
1758
1758
|
texCoordLoc = getAttributeLoc("texCoord");
|
1759
1759
|
normalLoc = getAttributeLoc("normal");
|
1760
|
-
|
1761
1760
|
ambientLoc = getAttributeLoc("ambient");
|
1762
1761
|
specularLoc = getAttributeLoc("specular");
|
1763
1762
|
emissiveLoc = getAttributeLoc("emissive");
|
1764
1763
|
shininessLoc = getAttributeLoc("shininess");
|
1765
|
-
|
1766
|
-
directionLoc = getAttributeLoc("direction");
|
1767
|
-
|
1768
|
-
offsetLoc = getAttributeLoc("offset");
|
1769
|
-
|
1770
1764
|
directionLoc = getAttributeLoc("direction");
|
1771
1765
|
offsetLoc = getAttributeLoc("offset");
|
1772
1766
|
|
@@ -944,10 +944,10 @@ public class PSurfaceJOGL implements PSurface {
|
|
944
944
|
boolean hide = (sketch != null) &&
|
945
945
|
(PApplet.platform == PConstants.WINDOWS);
|
946
946
|
if (hide) setVisible(false);
|
947
|
-
|
947
|
+
|
948
948
|
ShimAWT.selectFolderImpl(prompt, callbackMethod, file,
|
949
949
|
callbackObject, null);
|
950
|
-
|
950
|
+
|
951
951
|
if (hide) setVisible(true);
|
952
952
|
});
|
953
953
|
}
|
@@ -963,7 +963,7 @@ public class PSurfaceJOGL implements PSurface {
|
|
963
963
|
String name = cursorNames.get(kind);
|
964
964
|
if (name != null) {
|
965
965
|
ImageIcon icon =
|
966
|
-
new ImageIcon(getClass().getResource("cursors/" + name + ".png"));
|
966
|
+
new ImageIcon(getClass().getResource("/cursors/" + name + ".png"));
|
967
967
|
PImage img = new PImageAWT(icon.getImage());
|
968
968
|
// Most cursors just use the center as the hotspot...
|
969
969
|
int x = img.width / 2;
|
@@ -1538,7 +1538,7 @@ public class PSurfaceJOGL implements PSurface {
|
|
1538
1538
|
// String name = cursorNames.get(kind);
|
1539
1539
|
// if (name != null) {
|
1540
1540
|
// ImageIcon icon
|
1541
|
-
// = new ImageIcon(getClass().getResource("cursors/" + name + ".png"));
|
1541
|
+
// = new ImageIcon(getClass().getResource("/cursors/" + name + ".png"));
|
1542
1542
|
// PImage img = new PImage(icon.getImage());
|
1543
1543
|
// // Most cursors just use the center as the hotspot...
|
1544
1544
|
// int x = img.width / 2;
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|