propane 3.7.1-java → 3.11.0-java
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/.mvn/extensions.xml +1 -1
- data/.mvn/wrapper/maven-wrapper.properties +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +7 -1
- data/README.md +8 -15
- data/Rakefile +6 -5
- data/lib/propane/app.rb +11 -15
- data/lib/propane/helper_methods.rb +6 -6
- data/lib/propane/version.rb +1 -1
- data/lib/{propane-3.7.1.jar → propane-3.11.0.jar} +0 -0
- data/library/pdf/itextpdf-5.5.13.2.jar +0 -0
- data/library/pdf/pdf.rb +7 -0
- data/library/svg/batik-all-1.14.jar +0 -0
- data/library/svg/svg.rb +7 -0
- data/mvnw +3 -3
- data/mvnw.cmd +2 -2
- data/pom.rb +32 -5
- data/pom.xml +58 -7
- data/propane.gemspec +9 -5
- data/src/main/java/monkstone/FastNoiseModuleJava.java +127 -0
- data/src/main/java/monkstone/MathToolModule.java +30 -30
- data/src/main/java/monkstone/PropaneLibrary.java +2 -0
- data/src/main/java/monkstone/SmoothNoiseModuleJava.java +127 -0
- data/src/main/java/monkstone/fastmath/DegLutTables.java +111 -0
- data/src/main/java/monkstone/fastmath/Deglut.java +6 -56
- data/src/main/java/monkstone/filechooser/Chooser.java +1 -1
- data/src/main/java/monkstone/noise/OpenSimplex2F.java +914 -0
- data/src/main/java/monkstone/noise/OpenSimplex2S.java +1138 -0
- data/src/main/java/monkstone/slider/WheelHandler.java +1 -1
- data/src/main/java/monkstone/vecmath/JRender.java +6 -6
- data/src/main/java/monkstone/vecmath/vec2/Vec2.java +27 -31
- data/src/main/java/monkstone/vecmath/vec3/Vec3.java +26 -40
- data/src/main/java/processing/awt/PGraphicsJava2D.java +11 -3
- data/src/main/java/processing/awt/PImageAWT.java +6 -4
- data/src/main/java/processing/core/PApplet.java +13259 -13379
- data/src/main/java/processing/core/PConstants.java +155 -163
- data/src/main/java/processing/core/PGraphics.java +118 -111
- 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/PJOGL.java +6 -5
- data/src/main/java/processing/opengl/PShader.java +1 -6
- data/src/main/java/processing/opengl/PSurfaceJOGL.java +6 -6
- data/src/main/java/processing/pdf/PGraphicsPDF.java +581 -0
- data/src/main/java/processing/svg/PGraphicsSVG.java +378 -0
- 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/deglut_spec_test.rb +2 -2
- data/test/test_helper.rb +1 -0
- data/vendors/Rakefile +1 -1
- metadata +49 -46
- data/library/simplex_noise/simplex_noise.rb +0 -5
- data/src/main/java/monkstone/noise/SimplexNoise.java +0 -436
@@ -11,14 +11,14 @@ public interface JRender {
|
|
11
11
|
* @param x double
|
12
12
|
* @param y double
|
13
13
|
*/
|
14
|
-
|
14
|
+
void vertex(double x, double y);
|
15
15
|
|
16
16
|
/**
|
17
17
|
*
|
18
18
|
* @param x double
|
19
19
|
* @param y double
|
20
20
|
*/
|
21
|
-
|
21
|
+
void curveVertex(double x, double y);
|
22
22
|
|
23
23
|
/**
|
24
24
|
*
|
@@ -26,7 +26,7 @@ public interface JRender {
|
|
26
26
|
* @param y double
|
27
27
|
* @param z double
|
28
28
|
*/
|
29
|
-
|
29
|
+
void vertex(double x, double y, double z);
|
30
30
|
|
31
31
|
/**
|
32
32
|
*
|
@@ -36,7 +36,7 @@ public interface JRender {
|
|
36
36
|
* @param u double
|
37
37
|
* @param v double
|
38
38
|
*/
|
39
|
-
|
39
|
+
void vertex(double x, double y, double z, double u, double v);
|
40
40
|
|
41
41
|
/**
|
42
42
|
*
|
@@ -44,7 +44,7 @@ public interface JRender {
|
|
44
44
|
* @param y double
|
45
45
|
* @param z double
|
46
46
|
*/
|
47
|
-
|
47
|
+
void curveVertex(double x, double y, double z);
|
48
48
|
|
49
49
|
/**
|
50
50
|
*
|
@@ -52,5 +52,5 @@ public interface JRender {
|
|
52
52
|
* @param y double
|
53
53
|
* @param z double
|
54
54
|
*/
|
55
|
-
|
55
|
+
void normal(double x, double y, double z);
|
56
56
|
}
|
@@ -40,7 +40,7 @@ import monkstone.vecmath.JRender;
|
|
40
40
|
* @author Martin Prout
|
41
41
|
*/
|
42
42
|
@JRubyClass(name = "Vec2D")
|
43
|
-
public class Vec2 extends RubyObject {
|
43
|
+
public final class Vec2 extends RubyObject {
|
44
44
|
|
45
45
|
static final double EPSILON = 9.999999747378752e-05; // matches processing.org EPSILON
|
46
46
|
private static final long serialVersionUID = -2950154560223211646L;
|
@@ -73,7 +73,7 @@ public class Vec2 extends RubyObject {
|
|
73
73
|
* @return new Vec2 object (ruby)
|
74
74
|
*/
|
75
75
|
@JRubyMethod(name = "new", meta = true, rest = true)
|
76
|
-
public static
|
76
|
+
public static IRubyObject rbNew(ThreadContext context, IRubyObject klazz, IRubyObject... args) {
|
77
77
|
Vec2 vec2 = (Vec2) ((RubyClass) klazz).allocate();
|
78
78
|
vec2.init(context, args);
|
79
79
|
return vec2;
|
@@ -91,16 +91,16 @@ public class Vec2 extends RubyObject {
|
|
91
91
|
void init(ThreadContext context, IRubyObject... args) {
|
92
92
|
int count = args.length;
|
93
93
|
if (count == 2) {
|
94
|
-
jx =
|
95
|
-
jy =
|
94
|
+
jx = args[0] instanceof RubyFloat ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
|
95
|
+
jy = args[1] instanceof RubyFloat ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
96
96
|
} // allow ruby ducktyping in constructor
|
97
97
|
if (count == 1) {
|
98
98
|
if (!(args[0].respondsTo("x"))) {
|
99
99
|
throw context.runtime.newTypeError(args[0].getType() + " doesn't respond_to :x & :y");
|
100
100
|
}
|
101
|
-
jx =
|
101
|
+
jx = args[0].callMethod(context, "x") instanceof RubyFloat
|
102
102
|
? ((RubyFloat) args[0].callMethod(context, "x")).getValue() : ((RubyFixnum) args[0].callMethod(context, "x")).getDoubleValue();
|
103
|
-
jy =
|
103
|
+
jy = args[0].callMethod(context, "y") instanceof RubyFloat
|
104
104
|
? ((RubyFloat) args[0].callMethod(context, "y")).getValue() : ((RubyFixnum) args[0].callMethod(context, "y")).getDoubleValue();
|
105
105
|
}
|
106
106
|
}
|
@@ -162,10 +162,10 @@ public class Vec2 extends RubyObject {
|
|
162
162
|
Ruby runtime = context.runtime;
|
163
163
|
if (key instanceof RubySymbol) {
|
164
164
|
if (key == RubySymbol.newSymbol(runtime, "x")) {
|
165
|
-
jx =
|
165
|
+
jx = value instanceof RubyFloat
|
166
166
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
167
167
|
} else if (key == RubySymbol.newSymbol(runtime, "y")) {
|
168
|
-
jy =
|
168
|
+
jy = value instanceof RubyFloat
|
169
169
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
170
170
|
}
|
171
171
|
} else {
|
@@ -224,7 +224,7 @@ public class Vec2 extends RubyObject {
|
|
224
224
|
} else {
|
225
225
|
throw runtime.newTypeError("argument should be Vec2D");
|
226
226
|
}
|
227
|
-
double result = Math.hypot(
|
227
|
+
double result = Math.hypot(jx - b.jx, jy - b.jy);
|
228
228
|
return runtime.newFloat(result);
|
229
229
|
}
|
230
230
|
|
@@ -318,7 +318,7 @@ public class Vec2 extends RubyObject {
|
|
318
318
|
|
319
319
|
public IRubyObject op_mul(ThreadContext context, IRubyObject other) {
|
320
320
|
Ruby runtime = context.runtime;
|
321
|
-
double scalar =
|
321
|
+
double scalar = other instanceof RubyFloat
|
322
322
|
? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
323
323
|
return Vec2.rbNew(context, this.getMetaClass(),
|
324
324
|
new IRubyObject[]{runtime.newFloat(jx * scalar),
|
@@ -335,7 +335,7 @@ public class Vec2 extends RubyObject {
|
|
335
335
|
|
336
336
|
public IRubyObject op_div(ThreadContext context, IRubyObject other) {
|
337
337
|
Ruby runtime = context.runtime;
|
338
|
-
double scalar =
|
338
|
+
double scalar = other instanceof RubyFloat
|
339
339
|
? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
340
340
|
if (Math.abs(scalar) < Vec2.EPSILON) {
|
341
341
|
return this;
|
@@ -400,10 +400,8 @@ public class Vec2 extends RubyObject {
|
|
400
400
|
|
401
401
|
public IRubyObject set_mag(ThreadContext context, IRubyObject scalar, Block block) {
|
402
402
|
double new_mag = scalar.toJava(Double.class);
|
403
|
-
if (block.isGiven()) {
|
404
|
-
|
405
|
-
return this;
|
406
|
-
}
|
403
|
+
if (block.isGiven() && !block.yield(context, scalar).toJava(Boolean.class)) {
|
404
|
+
return this;
|
407
405
|
}
|
408
406
|
double current = 0;
|
409
407
|
if (Math.abs(jx) > EPSILON && Math.abs(jy) > EPSILON) {
|
@@ -489,7 +487,7 @@ public class Vec2 extends RubyObject {
|
|
489
487
|
@JRubyMethod(name = "from_angle", meta = true)
|
490
488
|
public static IRubyObject from_angle(ThreadContext context, IRubyObject klazz, IRubyObject scalar) {
|
491
489
|
Ruby runtime = context.runtime;
|
492
|
-
double angle =
|
490
|
+
double angle = scalar instanceof RubyFloat
|
493
491
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
494
492
|
return Vec2.rbNew(context, klazz, new IRubyObject[]{
|
495
493
|
runtime.newFloat(Math.cos(angle)),
|
@@ -520,10 +518,10 @@ public class Vec2 extends RubyObject {
|
|
520
518
|
*/
|
521
519
|
@JRubyMethod(name = "rotate!")
|
522
520
|
public IRubyObject rotate_bang(ThreadContext context, IRubyObject scalar) {
|
523
|
-
double theta =
|
521
|
+
double theta = scalar instanceof RubyFloat
|
524
522
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
525
|
-
double x =
|
526
|
-
double y =
|
523
|
+
double x = jx * Math.cos(theta) - jy * Math.sin(theta);
|
524
|
+
double y = jx * Math.sin(theta) + jy * Math.cos(theta);
|
527
525
|
jx = x;
|
528
526
|
jy = y;
|
529
527
|
return this;
|
@@ -538,7 +536,7 @@ public class Vec2 extends RubyObject {
|
|
538
536
|
@JRubyMethod(name = "rotate")
|
539
537
|
public IRubyObject rotate(ThreadContext context, IRubyObject scalar) {
|
540
538
|
Ruby runtime = context.runtime;
|
541
|
-
double theta =
|
539
|
+
double theta = scalar instanceof RubyFloat
|
542
540
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
543
541
|
IRubyObject[] ary = new IRubyObject[]{
|
544
542
|
runtime.newFloat(jx * Math.cos(theta) - jy * Math.sin(theta)),
|
@@ -559,9 +557,9 @@ public class Vec2 extends RubyObject {
|
|
559
557
|
throw runtime.newSyntaxError("Check syntax");
|
560
558
|
}
|
561
559
|
Vec2 vec = (Vec2) args[0].toJava(Vec2.class);
|
562
|
-
double scalar =
|
560
|
+
double scalar = args[1] instanceof RubyFloat
|
563
561
|
? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
564
|
-
assert
|
562
|
+
assert scalar >= 0 && scalar < 1.0 :
|
565
563
|
"Lerp value " + scalar + " out of range 0..1.0";
|
566
564
|
return Vec2.rbNew(context, this.getMetaClass(), new IRubyObject[]{
|
567
565
|
runtime.newFloat(jx + (vec.jx - jx) * scalar),
|
@@ -581,9 +579,9 @@ public class Vec2 extends RubyObject {
|
|
581
579
|
throw runtime.newSyntaxError("Check syntax");
|
582
580
|
}
|
583
581
|
Vec2 vec = (Vec2) args[0].toJava(Vec2.class);
|
584
|
-
double scalar =
|
582
|
+
double scalar = args[1] instanceof RubyFloat
|
585
583
|
? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
586
|
-
assert
|
584
|
+
assert scalar >= 0 && scalar < 1.0 :
|
587
585
|
"Lerp value " + scalar + " out of range 0..1.0";
|
588
586
|
jx += (vec.jx - jx) * scalar;
|
589
587
|
jy += (vec.jy - jy) * scalar;
|
@@ -744,10 +742,8 @@ public class Vec2 extends RubyObject {
|
|
744
742
|
}
|
745
743
|
if (obj instanceof Vec2) {
|
746
744
|
final Vec2 other = (Vec2) obj;
|
747
|
-
|
748
|
-
&&
|
749
|
-
return true;
|
750
|
-
}
|
745
|
+
return Double.compare(jx, (Double) other.jx) == 0
|
746
|
+
&& Double.compare(jy, (Double) other.jy) == 0;
|
751
747
|
}
|
752
748
|
return false;
|
753
749
|
}
|
@@ -766,8 +762,8 @@ public class Vec2 extends RubyObject {
|
|
766
762
|
}
|
767
763
|
if (other instanceof Vec2) {
|
768
764
|
Vec2 v = (Vec2) other.toJava(Vec2.class);
|
769
|
-
if (
|
770
|
-
&&
|
765
|
+
if (Double.compare(jx, (Double) v.jx) == 0
|
766
|
+
&& Double.compare(jy, (Double) v.jy) == 0) {
|
771
767
|
return runtime.newBoolean(true);
|
772
768
|
}
|
773
769
|
}
|
@@ -793,7 +789,7 @@ public class Vec2 extends RubyObject {
|
|
793
789
|
double diff = jx - v.jx;
|
794
790
|
if ((diff < 0 ? -diff : diff) > Vec2.EPSILON) {
|
795
791
|
return runtime.newBoolean(false);
|
796
|
-
}
|
792
|
+
}
|
797
793
|
diff = jy - v.jy;
|
798
794
|
return runtime.newBoolean((diff < 0 ? -diff : diff) < Vec2.EPSILON);
|
799
795
|
}
|
@@ -65,7 +65,7 @@ public final class Vec3 extends RubyObject {
|
|
65
65
|
* @return new Vec3 object (ruby)
|
66
66
|
*/
|
67
67
|
@JRubyMethod(name = "new", meta = true, rest = true)
|
68
|
-
public
|
68
|
+
public static IRubyObject rbNew(ThreadContext context, IRubyObject klazz, IRubyObject... args) {
|
69
69
|
Vec3 vec = (Vec3) ((RubyClass) klazz).allocate();
|
70
70
|
vec.init(context, args);
|
71
71
|
return vec;
|
@@ -83,27 +83,27 @@ public final class Vec3 extends RubyObject {
|
|
83
83
|
void init(ThreadContext context, IRubyObject... args) {
|
84
84
|
int count = args.length;
|
85
85
|
if (count >= 2) {
|
86
|
-
jx =
|
86
|
+
jx = args[0] instanceof RubyFloat
|
87
87
|
? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
|
88
|
-
jy =
|
88
|
+
jy = args[1] instanceof RubyFloat
|
89
89
|
? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
90
90
|
}
|
91
91
|
if (count == 3) {
|
92
|
-
jz =
|
92
|
+
jz = args[2] instanceof RubyFloat
|
93
93
|
? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
|
94
94
|
} // allow ruby ducktyping in constructor
|
95
95
|
if (count == 1) {
|
96
96
|
if (!(args[0].respondsTo("x"))) {
|
97
97
|
throw context.runtime.newTypeError(args[0].getType() + " doesn't respond_to :x & :y");
|
98
98
|
}
|
99
|
-
jx = (
|
99
|
+
jx = (args[0].callMethod(context, "x")) instanceof RubyFloat
|
100
100
|
? ((RubyFloat) args[0].callMethod(context, "x")).getValue() : ((RubyFixnum) args[0].callMethod(context, "x")).getDoubleValue();
|
101
|
-
jy = (
|
101
|
+
jy = (args[0].callMethod(context, "y")) instanceof RubyFloat
|
102
102
|
? ((RubyFloat) args[0].callMethod(context, "y")).getValue() : ((RubyFixnum) args[0].callMethod(context, "y")).getDoubleValue();
|
103
103
|
if (!(args[0].respondsTo("z"))) {
|
104
104
|
return;
|
105
105
|
} // allow promotion from 2D to 3D, sets jz = 0
|
106
|
-
jz = (
|
106
|
+
jz = (args[0].callMethod(context, "z")) instanceof RubyFloat ? ((RubyFloat) args[0].callMethod(context, "z")).getValue() : ((RubyFixnum) args[0].callMethod(context, "z")).getDoubleValue();
|
107
107
|
}
|
108
108
|
}
|
109
109
|
|
@@ -147,11 +147,7 @@ public final class Vec3 extends RubyObject {
|
|
147
147
|
*/
|
148
148
|
@JRubyMethod(name = "x=")
|
149
149
|
public IRubyObject setX(ThreadContext context, IRubyObject other) {
|
150
|
-
|
151
|
-
jx = ((RubyFloat) other).getValue();
|
152
|
-
} else {
|
153
|
-
jx = ((RubyFixnum) other).getDoubleValue();
|
154
|
-
}
|
150
|
+
jx = other instanceof RubyFloat ? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
155
151
|
return other;
|
156
152
|
}
|
157
153
|
|
@@ -163,11 +159,7 @@ public final class Vec3 extends RubyObject {
|
|
163
159
|
*/
|
164
160
|
@JRubyMethod(name = "y=")
|
165
161
|
public IRubyObject setY(ThreadContext context, IRubyObject other) {
|
166
|
-
|
167
|
-
jy = ((RubyFloat) other).getValue();
|
168
|
-
} else {
|
169
|
-
jy = ((RubyFixnum) other).getDoubleValue();
|
170
|
-
}
|
162
|
+
jy = other instanceof RubyFloat ? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
171
163
|
return other;
|
172
164
|
}
|
173
165
|
|
@@ -179,11 +171,7 @@ public final class Vec3 extends RubyObject {
|
|
179
171
|
*/
|
180
172
|
@JRubyMethod(name = "z=")
|
181
173
|
public IRubyObject setZ(ThreadContext context, IRubyObject other) {
|
182
|
-
|
183
|
-
jz = ((RubyFloat) other).getValue();
|
184
|
-
} else {
|
185
|
-
jz = ((RubyFixnum) other).getDoubleValue();
|
186
|
-
}
|
174
|
+
jz = other instanceof RubyFloat ? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
187
175
|
return other;
|
188
176
|
}
|
189
177
|
|
@@ -222,13 +210,13 @@ public final class Vec3 extends RubyObject {
|
|
222
210
|
Ruby runtime = context.runtime;
|
223
211
|
if (key instanceof RubySymbol) {
|
224
212
|
if (key == RubySymbol.newSymbol(runtime, "x")) {
|
225
|
-
jx =
|
213
|
+
jx = value instanceof RubyFloat
|
226
214
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
227
215
|
} else if (key == RubySymbol.newSymbol(runtime, "y")) {
|
228
|
-
jy =
|
216
|
+
jy = value instanceof RubyFloat
|
229
217
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
230
218
|
} else if (key == RubySymbol.newSymbol(runtime, "z")) {
|
231
|
-
jz =
|
219
|
+
jz = value instanceof RubyFloat
|
232
220
|
? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
|
233
221
|
} else {
|
234
222
|
throw runtime.newIndexError("invalid key");
|
@@ -368,7 +356,7 @@ public final class Vec3 extends RubyObject {
|
|
368
356
|
@JRubyMethod(name = "*", required = 1)
|
369
357
|
public IRubyObject op_mul(ThreadContext context, IRubyObject scalar) {
|
370
358
|
Ruby runtime = context.runtime;
|
371
|
-
double multi =
|
359
|
+
double multi = scalar instanceof RubyFloat
|
372
360
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
373
361
|
return Vec3.rbNew(context, this.getMetaClass(), new IRubyObject[]{
|
374
362
|
runtime.newFloat(jx * multi),
|
@@ -385,7 +373,7 @@ public final class Vec3 extends RubyObject {
|
|
385
373
|
@JRubyMethod(name = "/", required = 1)
|
386
374
|
public IRubyObject op_div(ThreadContext context, IRubyObject scalar) {
|
387
375
|
Ruby runtime = context.runtime;
|
388
|
-
double divisor =
|
376
|
+
double divisor = scalar instanceof RubyFloat
|
389
377
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
390
378
|
if (Math.abs(divisor) < Vec3.EPSILON) {
|
391
379
|
return this;
|
@@ -427,12 +415,10 @@ public final class Vec3 extends RubyObject {
|
|
427
415
|
*/
|
428
416
|
@JRubyMethod(name = "set_mag")
|
429
417
|
public IRubyObject set_mag(ThreadContext context, IRubyObject scalar, Block block) {
|
430
|
-
if (block.isGiven()) {
|
431
|
-
|
432
|
-
return this;
|
433
|
-
}
|
418
|
+
if (block.isGiven() && !block.yield(context, scalar).toJava(Boolean.class)) {
|
419
|
+
return this;
|
434
420
|
}
|
435
|
-
double new_mag =
|
421
|
+
double new_mag = scalar instanceof RubyFloat
|
436
422
|
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
437
423
|
double current = Math.sqrt(jx * jx + jy * jy + jz * jz);
|
438
424
|
if (current > EPSILON) {
|
@@ -598,9 +584,9 @@ public final class Vec3 extends RubyObject {
|
|
598
584
|
double u = 0;
|
599
585
|
double v = 0;
|
600
586
|
if (count == 3) {
|
601
|
-
u =
|
587
|
+
u = args[1] instanceof RubyFloat
|
602
588
|
? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
|
603
|
-
v =
|
589
|
+
v = args[2] instanceof RubyFloat
|
604
590
|
? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
|
605
591
|
}
|
606
592
|
if (count == 2) {
|
@@ -662,9 +648,9 @@ public final class Vec3 extends RubyObject {
|
|
662
648
|
}
|
663
649
|
if (obj instanceof Vec3) {
|
664
650
|
final Vec3 other = (Vec3) obj;
|
665
|
-
if (
|
666
|
-
&&
|
667
|
-
&&
|
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) {
|
668
654
|
return true;
|
669
655
|
}
|
670
656
|
|
@@ -686,9 +672,9 @@ public final class Vec3 extends RubyObject {
|
|
686
672
|
}
|
687
673
|
if (other instanceof Vec3) {
|
688
674
|
Vec3 v = (Vec3) other.toJava(Vec3.class);
|
689
|
-
if (
|
690
|
-
&&
|
691
|
-
&&
|
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) {
|
692
678
|
return runtime.newBoolean(true);
|
693
679
|
}
|
694
680
|
|
@@ -1564,6 +1564,15 @@ public class PGraphicsJava2D extends PGraphics {
|
|
1564
1564
|
|
1565
1565
|
/**
|
1566
1566
|
* Handle renderer-specific image drawing.
|
1567
|
+
* @param who
|
1568
|
+
* @param x1
|
1569
|
+
* @param y1
|
1570
|
+
* @param x2
|
1571
|
+
* @param y2
|
1572
|
+
* @param u1
|
1573
|
+
* @param v1
|
1574
|
+
* @param u2
|
1575
|
+
* @param v2
|
1567
1576
|
*/
|
1568
1577
|
@Override
|
1569
1578
|
protected void imageImpl(PImage who,
|
@@ -2575,7 +2584,7 @@ public class PGraphicsJava2D extends PGraphics {
|
|
2575
2584
|
// WritableRaster raster = ((BufferedImage) image).getRaster();
|
2576
2585
|
// WritableRaster raster = image.getRaster();
|
2577
2586
|
WritableRaster raster = getRaster();
|
2578
|
-
if (
|
2587
|
+
if (clearPixels == null || clearPixels.length < imageWidth) {
|
2579
2588
|
clearPixels = new int[imageWidth];
|
2580
2589
|
}
|
2581
2590
|
Arrays.fill(clearPixels, 0, imageWidth, backgroundColor);
|
@@ -2595,7 +2604,6 @@ public class PGraphicsJava2D extends PGraphics {
|
|
2595
2604
|
public void backgroundImpl() {
|
2596
2605
|
if (backgroundAlpha) {
|
2597
2606
|
clearPixels(backgroundColor);
|
2598
|
-
|
2599
2607
|
} else {
|
2600
2608
|
Color bgColor = new Color(backgroundColor);
|
2601
2609
|
// seems to fire an additional event that causes flickering,
|
@@ -2798,7 +2806,7 @@ public class PGraphicsJava2D extends PGraphics {
|
|
2798
2806
|
public void updatePixels(int x, int y, int c, int d) {
|
2799
2807
|
//if ((x == 0) && (y == 0) && (c == width) && (d == height)) {
|
2800
2808
|
// System.err.format("%d %d %d %d .. w/h = %d %d .. pw/ph = %d %d %n", x, y, c, d, width, height, pixelWidth, pixelHeight);
|
2801
|
-
if (
|
2809
|
+
if (x != 0 || y != 0 || c != pixelWidth || d != pixelHeight) {
|
2802
2810
|
// Show a warning message, but continue anyway.
|
2803
2811
|
showVariationWarning("updatePixels(x, y, w, h)");
|
2804
2812
|
// new Exception().printStackTrace(System.out);
|
@@ -118,6 +118,7 @@ public class PImageAWT extends PImage {
|
|
118
118
|
|
119
119
|
/**
|
120
120
|
* Returns a native BufferedImage from this PImage.
|
121
|
+
* @return
|
121
122
|
*/
|
122
123
|
@Override
|
123
124
|
public Object getNative() { // ignore
|
@@ -259,11 +260,12 @@ public class PImageAWT extends PImage {
|
|
259
260
|
|
260
261
|
|
261
262
|
/**
|
262
|
-
* Use ImageIO functions from Java 1.4 and later to handle image save.
|
263
|
-
|
264
|
-
* To get a list of the supported formats for writing, use: <BR>
|
265
|
-
* <TT>println(javax.imageio.ImageIO.getReaderFormatNames())</TT>
|
263
|
+
* Use ImageIO functions from Java 1.4 and later to handle image save.Various formats are supported, typically jpeg, png, bmp, and wbmp.To get a list of the supported formats for writing, use: <BR>
|
264
|
+
<code>println(javax.imageio.ImageIO.getReaderFormatNames())</code>
|
266
265
|
*
|
266
|
+
* @param path
|
267
|
+
* @return
|
268
|
+
* @throws java.io.IOException
|
267
269
|
* @path The path to which the file should be written.
|
268
270
|
*/
|
269
271
|
protected boolean saveImageIO(String path) throws IOException {
|