propane 0.5.0-java → 0.6.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +3 -1
  4. data/README.md +1 -1
  5. data/Rakefile +1 -1
  6. data/examples/complete/bw_shader.rb +46 -0
  7. data/examples/complete/data/bwfrag.glsl +23 -0
  8. data/examples/complete/data/lachoy.jpg +0 -0
  9. data/examples/complete/data/landscape.glsl +352 -0
  10. data/examples/complete/data/monjori.glsl +30 -0
  11. data/examples/complete/data/moon.jpg +0 -0
  12. data/examples/complete/data/sea.jpg +0 -0
  13. data/examples/complete/edge_detection.rb +49 -0
  14. data/examples/complete/landscape.rb +32 -0
  15. data/examples/complete/linear_image.rb +51 -0
  16. data/examples/complete/monjori.rb +33 -0
  17. data/examples/regular/arcball_box.rb +3 -1
  18. data/examples/regular/arcball_constrain.rb +38 -0
  19. data/examples/regular/bezier_playground.rb +205 -0
  20. data/examples/regular/colors_two.rb +61 -0
  21. data/examples/regular/creating_colors.rb +10 -3
  22. data/examples/regular/elegant_ball.rb +1 -1
  23. data/examples/regular/fibonacci_sphere.rb +90 -0
  24. data/examples/regular/grapher.rb +39 -0
  25. data/examples/regular/gravity.rb +120 -0
  26. data/examples/regular/slider_demo.rb +60 -0
  27. data/examples/regular/slider_example.rb +53 -0
  28. data/examples/regular/slider_simple.rb +47 -0
  29. data/examples/regular/tree.rb +76 -0
  30. data/lib/propane/app.rb +1 -6
  31. data/lib/propane/helper_methods.rb +39 -10
  32. data/lib/propane/version.rb +1 -1
  33. data/library/slider/slider.rb +43 -0
  34. data/pom.rb +4 -4
  35. data/pom.xml +4 -4
  36. data/propane.gemspec +1 -1
  37. data/src/monkstone/ColorUtil.java +42 -9
  38. data/src/monkstone/slider/CustomHorizontalSlider.java +164 -0
  39. data/src/monkstone/slider/CustomVerticalSlider.java +178 -0
  40. data/src/monkstone/slider/SimpleHorizontalSlider.java +145 -0
  41. data/src/monkstone/slider/SimpleSlider.java +175 -0
  42. data/src/monkstone/slider/SimpleVerticalSlider.java +159 -0
  43. data/src/monkstone/slider/Slider.java +61 -0
  44. data/src/monkstone/slider/SliderBar.java +245 -0
  45. data/src/monkstone/slider/SliderGroup.java +56 -0
  46. data/src/monkstone/slider/WheelHandler.java +35 -0
  47. data/src/monkstone/vecmath/vec2/Vec2.java +3 -8
  48. data/src/monkstone/vecmath/vec3/Vec3.java +8 -13
  49. data/vendors/Rakefile +2 -2
  50. metadata +36 -6
  51. data/VERSION.txt +0 -4
@@ -0,0 +1,159 @@
1
+ /*
2
+ * Copyright (c) 2016 Martin Prout
3
+ *
4
+ * This library is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * http://creativecommons.org/licenses/LGPL/2.1/
10
+ *
11
+ * This library is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with this library; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+ package monkstone.slider;
21
+
22
+ import processing.core.PApplet;
23
+ import processing.core.PConstants;
24
+ import static processing.core.PConstants.HALF_PI;
25
+
26
+ public class SimpleVerticalSlider extends SimpleSlider {
27
+
28
+ final int SPACING = 20;
29
+ final int TOP_SPC = SPACING * 2;
30
+ final int BOTTOM_SPC = SPACING * 4;
31
+
32
+ /**
33
+ *
34
+ * @param outer
35
+ * @param beginRange start range
36
+ * @param endRange end range
37
+ * @param initial
38
+ * @param count
39
+ */
40
+ public SimpleVerticalSlider(final PApplet outer, float beginRange, float endRange, float initial, int count) {
41
+ this.applet = outer;
42
+ setActive(true);
43
+ pX = outer.width - (TOP_SPC + count * SPACING);
44
+ pY = TOP_SPC;
45
+ pW = outer.height - BOTTOM_SPC;
46
+ pH = 10;
47
+ ID = Integer.toString(count + 1);
48
+ limits(beginRange, endRange);
49
+
50
+ }
51
+
52
+ @Override
53
+ boolean mouseOver() {
54
+ return (applet.mouseX >= pX && applet.mouseX <= pX + pH && applet.mouseY >= pY && applet.mouseY <= pY + pW);
55
+ }
56
+
57
+ private void setActive(boolean active) {
58
+ if (active) {
59
+ applet.registerMethod("dispose", this);
60
+ applet.registerMethod("draw", this);
61
+ } else {
62
+ applet.unregisterMethod("draw", this);
63
+ }
64
+ }
65
+
66
+ @Override
67
+ void displayText() {
68
+ String lFormat = "%d";
69
+ if (displayLabel) {
70
+ applet.fill(labelColor);
71
+ applet.textSize(labelSize);
72
+ applet.textAlign(PConstants.CENTER);
73
+ applet.pushMatrix();
74
+ applet.translate(pX + pH / 2, pY + pW / 2);
75
+ applet.rotate(HALF_PI);
76
+ applet.text(Integer.toString((int) pValue), 0, 0 + labelSize / 2 - 2);
77
+ applet.popMatrix();
78
+ }
79
+ if (displayValue) {
80
+ applet.textSize(numberSize);
81
+ applet.fill(numbersColor);
82
+ applet.pushMatrix();
83
+ applet.textAlign(PConstants.RIGHT);
84
+ applet.translate(pX - numberSize / 2, pY);
85
+ applet.rotate(HALF_PI);
86
+ applet.text(String.format(lFormat, (int) vMax), 0, 0);
87
+ applet.popMatrix();
88
+ applet.pushMatrix();
89
+ applet.textAlign(PConstants.LEFT);
90
+ applet.translate(pX - numberSize / 2, pY + pW);
91
+ applet.rotate(HALF_PI);
92
+ applet.text(String.format(lFormat, (int) vMin), 0, 0);
93
+ applet.popMatrix();
94
+ }
95
+ }
96
+
97
+ @Override
98
+ void drawGui() {
99
+ if (backgroundVisible) {
100
+ applet.fill(sliderBack);
101
+ applet.rect(pX, pY, pH, pW);
102
+ }
103
+ applet.fill(sliderFill);
104
+ applet.ellipse(pX + pH / 2, pY + pScaled, 10, 10);
105
+ }
106
+
107
+
108
+
109
+ /**
110
+ *
111
+ * @param value
112
+ */
113
+ @Override
114
+ public void setValue(float value) {
115
+ if (value > vMax) {
116
+ value = vMax;
117
+ }
118
+ if (value < vMin) {
119
+ value = vMin;
120
+ }
121
+ pValue = value;
122
+ pScaled = map(pValue, vMin, vMax, pW, 0);
123
+ }
124
+
125
+ @Override
126
+ void checkKeyboard() {
127
+ if (mouseOver()) {
128
+ if (applet.mousePressed && applet.mouseButton == PConstants.LEFT) {
129
+ pValue = constrainMap(applet.mouseY - pY, pW, 0, vMin, vMax);
130
+ }
131
+ if (applet.keyPressed && pressOnlyOnce) {
132
+ if (applet.keyCode == PConstants.LEFT || applet.keyCode == PConstants.DOWN) {
133
+ pValue--;
134
+ }
135
+ if (applet.keyCode == PConstants.RIGHT || applet.keyCode == PConstants.UP) {
136
+ pValue++;
137
+ }
138
+ if (pValue > vMax) {
139
+ pValue = vMax;
140
+ } else {
141
+ pValue = (pValue < vMin) ? vMin : pValue;
142
+ }
143
+ pressOnlyOnce = false;
144
+ }
145
+ deBounce(5);
146
+ pScaled = map(pValue, vMin, vMax, pW, 0);
147
+ }
148
+ }
149
+
150
+ /**
151
+ *
152
+ * @return
153
+ */
154
+ @Override
155
+ public String toString() {
156
+ String geomF = "SimpleHSliderBar.new(%d, %d, %d, %.2f, %.2f, \"%s\")";
157
+ return String.format(geomF, pX, pY, pW, vMin, vMax, ID);
158
+ }
159
+ }
@@ -0,0 +1,61 @@
1
+ /*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+ package monkstone.slider;
7
+
8
+ /**
9
+ *
10
+ * @author tux
11
+ */
12
+ public interface Slider {
13
+
14
+ void dispose();
15
+
16
+ void draw();
17
+
18
+ /**
19
+ *
20
+ */
21
+ void hideBackground();
22
+
23
+ /**
24
+ *
25
+ */
26
+ void hideLabel();
27
+
28
+ /**
29
+ *
30
+ */
31
+ void hideNumbers();
32
+
33
+ /**
34
+ *
35
+ * @param s
36
+ */
37
+ void labelSize(int s);
38
+
39
+ /**
40
+ *
41
+ * @return
42
+ */
43
+ float readValue();
44
+
45
+ /**
46
+ *
47
+ * @param value
48
+ */
49
+ void setValue(float value);
50
+
51
+ /**
52
+ *
53
+ */
54
+ void showLabel();
55
+
56
+ /**
57
+ *
58
+ */
59
+ void showNumbers();
60
+
61
+ }
@@ -0,0 +1,245 @@
1
+ /*
2
+ * Copyright (c) 2016 Martin Prout
3
+ *
4
+ * This library is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * http://creativecommons.org/licenses/LGPL/2.1/
10
+ *
11
+ * This library is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with this library; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+ package monkstone.slider;
21
+
22
+ import processing.core.PApplet;
23
+ import processing.event.MouseEvent;
24
+
25
+ public abstract class SliderBar implements Slider {
26
+
27
+ int MIN_BAR_WIDTH = 10;
28
+ int MAX_BAR_WIDTH = 30;
29
+ int sliderBack = 0xff909090;
30
+ int sliderFill = 0xff696969;
31
+ int borderColor = 0;
32
+ int numbersColor = 0;
33
+ int labelColor = 0;
34
+ int externalBorder = 0;
35
+ boolean backgroundVisible = true;
36
+ int labelSize = 18;
37
+ int numberSize = 14;
38
+ boolean displayLabel = false;
39
+ boolean displayValue = true;
40
+ int pX;
41
+ int pY;
42
+ int pW;
43
+ int pH;
44
+ float pScaled = 0;
45
+ float pValue = 0;
46
+ String ID;
47
+ boolean pressOnlyOnce = true;
48
+ int deb = 0;
49
+ short wheelCount = 0;
50
+ float vMin = 0;
51
+ float vMax = 15;
52
+ PApplet applet;
53
+ WheelHandler scrollWheelHandler;
54
+
55
+ /**
56
+ *
57
+ * @return
58
+ */
59
+ public float value() {
60
+ return pValue;
61
+ }
62
+
63
+ /**
64
+ *
65
+ * @param w
66
+ */
67
+ public void barWidth(int w) {
68
+ if (w < MIN_BAR_WIDTH) {
69
+ pH = MIN_BAR_WIDTH;
70
+ } else {
71
+ pH = (w > MAX_BAR_WIDTH) ? MAX_BAR_WIDTH : w;
72
+ }
73
+ }
74
+
75
+ final void limits(float iv, float fv) {
76
+ vMin = iv;
77
+ vMax = fv;
78
+ SliderBar.this.setValue(iv);
79
+ }
80
+
81
+ /**
82
+ *
83
+ */
84
+ @Override
85
+ public void showLabel() {
86
+ displayLabel = true;
87
+ }
88
+
89
+ /**
90
+ *
91
+ */
92
+ @Override
93
+ public void hideLabel() {
94
+ displayLabel = false;
95
+ }
96
+
97
+ /**
98
+ *
99
+ */
100
+ @Override
101
+ public void showNumbers() {
102
+ displayValue = true;
103
+ }
104
+
105
+ /**
106
+ *
107
+ */
108
+ @Override
109
+ public void hideNumbers() {
110
+ displayValue = false;
111
+ }
112
+
113
+ /**
114
+ *
115
+ * @param b
116
+ */
117
+ public void externalBorder(int b) {
118
+ externalBorder = b;
119
+ }
120
+
121
+ /**
122
+ *
123
+ */
124
+ @Override
125
+ public void hideBackground() {
126
+ backgroundVisible = false;
127
+ }
128
+
129
+ /**
130
+ *
131
+ */
132
+ public void showBackground() {
133
+ backgroundVisible = true;
134
+ }
135
+
136
+ /**
137
+ *
138
+ * @param s
139
+ */
140
+ @Override
141
+ public void labelSize(int s) {
142
+ labelSize = (s < 4) ? 4 : s;
143
+ }
144
+
145
+ /**
146
+ * @param back color of the bar
147
+ * @param fill background color of the slider
148
+ */
149
+ public void widgetColors(int back, int fill) {
150
+ sliderBack = back;
151
+ sliderFill = fill;
152
+ }
153
+
154
+ abstract boolean mouseOver();
155
+
156
+ private void setActive(boolean active) {
157
+ if (active) {
158
+ applet.registerMethod("dispose", this);
159
+ applet.registerMethod("draw", this);
160
+ applet.registerMethod("mouseEvent", this);
161
+ } else {
162
+ applet.unregisterMethod("draw", this);
163
+ applet.unregisterMethod("mouseEvent", this);
164
+ }
165
+ }
166
+
167
+ abstract void displayText();
168
+
169
+ abstract void drawGui();
170
+
171
+ @Override
172
+ public void draw() {
173
+ applet.pushStyle();
174
+ applet.noStroke();
175
+ drawGui();
176
+ displayText();
177
+ applet.popStyle();
178
+ change();
179
+ }
180
+
181
+ public void mouseEvent(MouseEvent evt) {
182
+ if (evt.getAction() == MouseEvent.WHEEL) {
183
+ if (scrollWheelHandler != null) {
184
+ scrollWheelHandler.handleWheel((short) evt.getCount());
185
+ }
186
+ }
187
+ }
188
+
189
+ /**
190
+ *
191
+ * @param value
192
+ */
193
+ @Override
194
+ public abstract void setValue(float value);
195
+
196
+ abstract void checkKeyboard();
197
+
198
+ void change() {
199
+ checkKeyboard();
200
+ }
201
+
202
+ /**
203
+ *
204
+ * @return
205
+ */
206
+ @Override
207
+ public float readValue() {
208
+ return pValue;
209
+ }
210
+
211
+ /**
212
+ *
213
+ * @param delta
214
+ */
215
+ abstract void changeWithWheel(int delta);
216
+
217
+ void deBounce(int n) {
218
+ if (pressOnlyOnce) {
219
+ } else if (deb++ > n) {
220
+ deb = 0;
221
+ pressOnlyOnce = true;
222
+ }
223
+ }
224
+
225
+ protected float map(float val, float begIn, float endIn, float beginOut, float endOut) {
226
+ return (beginOut + (endOut - beginOut) * ((val - begIn) / (endIn - begIn)));
227
+ }
228
+
229
+ protected int constrainMap(double val, double begIn, double endIn, double beginOut, double endOut) {
230
+ double max = Math.max(begIn, endIn);
231
+ double min = Math.min(begIn, endIn);
232
+ if (val < min) {
233
+ val = min;
234
+ }
235
+ if (val > max) {
236
+ val = max;
237
+ }
238
+ return (int) ((beginOut + (endOut - beginOut) * ((val - begIn) / (endIn - begIn))));
239
+ }
240
+
241
+ @Override
242
+ public void dispose() {
243
+ setActive(false);
244
+ }
245
+ }