summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guide-src/outline.txt3
-rw-r--r--guide-src/widget-inputs/builtins.html21
-rw-r--r--guide-src/widget-inputs/constants.html3
-rw-r--r--guide-src/widget-inputs/syntax.html16
-rw-r--r--guide-src/widget-inputs/vectors.html3
-rw-r--r--pugl.js51
-rw-r--r--style.css12
7 files changed, 76 insertions, 33 deletions
diff --git a/guide-src/outline.txt b/guide-src/outline.txt
index d59b039..5ded64c 100644
--- a/guide-src/outline.txt
+++ b/guide-src/outline.txt
@@ -1,7 +1,6 @@
widget-inputs: Widget inputs
-/constants.html
+/syntax.html
/builtins.html
-/vectors.html
development: Development
/index.html
/js-features.html
diff --git a/guide-src/widget-inputs/builtins.html b/guide-src/widget-inputs/builtins.html
index 6434921..32cb3b1 100644
--- a/guide-src/widget-inputs/builtins.html
+++ b/guide-src/widget-inputs/builtins.html
@@ -1,3 +1,20 @@
---- Built-in values
+--- built-in values
-<h1 style="color:red">TODO</h1>
+all of pugl's built-in values begin with a <code>.</code> to distinguish
+them from your widgets.
+here they all are.
+below, <code>float</code> refers to a plain old number,
+<code>vec2</code> is a 2-component vector, etc.
+
+<table>
+<tbody>
+<tr><th>built‑in</th><th>type</th><th>description</th></tr>
+<tr><td><code>.pos</code></td><td><code>vec2</code><td>the position of the pixel, with (−1, −1) being the bottom-left corner, and (+1, +1) being the top-right corner.</td></tr>
+<tr><td><code>.pos01</code></td><td><code>vec2</code><td>the position of the pixel, with (0, 0) being the bottom-left corner, and (+1, +1) being the top-right corner.</td></tr>
+<tr><td><code>.time</code></td><td><code>float</code><td>the amount of time that has passed (wraps around every hour to prevent imprecision issues).</td></tr>
+<tr><td><code>.mouse</code></td><td><code>vec2</code><td>the position of the mouse ranging from (−1, −1) to (+1, +1).</td></tr>
+<tr><td><code>.mouse01</code></td><td><code>vec2</code><td>the position of the mouse ranging from (0, 0) to (+1, +1).</td></tr>
+<tr><td><code>.pi</code></td><td><code>float</code><td>π (3.1415…).</td></tr>
+<tr><td><code>.2pi</code></td><td><code>float</code><td>2π (6.2831…).</td></tr>
+</tbody>
+</table>
diff --git a/guide-src/widget-inputs/constants.html b/guide-src/widget-inputs/constants.html
deleted file mode 100644
index a2a89ac..0000000
--- a/guide-src/widget-inputs/constants.html
+++ /dev/null
@@ -1,3 +0,0 @@
---- Constants
-
-<h1 style="color:red">TODO</h1>
diff --git a/guide-src/widget-inputs/syntax.html b/guide-src/widget-inputs/syntax.html
new file mode 100644
index 0000000..8026b33
--- /dev/null
+++ b/guide-src/widget-inputs/syntax.html
@@ -0,0 +1,16 @@
+--- syntax
+<p>
+here are the various ways of specifying widget inputs:
+</p>
+<table>
+<tbody>
+<tr><th style="min-width:10em;">format</th><th>example</th><th>description</th></tr>
+<tr><td><code>&lt;number&gt;</code></td><td><code>5.3</code></td><td>a number</td></tr>
+<tr><td><code>#RRGGBB</code></td><td><code>#ff831c</code></td><td>a 3-component vector whose values are taken from the given color code. a color picker will be shown next to the input.</td></tr>
+<tr><td><code>#RRGGBBAA</code></td><td><code>#ff831c22</code></td><td>a 4-component vector whose values are taken from the color code.</td></tr>
+<tr><td><code>&lt;widget name&gt;</code></td><td><code>add1</code></td><td>the output from another widget</td></tr>
+<tr><td><code>&lt;input&gt;,&lt;input&gt;</code></td><td><code>.pos,0</code></td><td>a vector composed of <code>a</code> and <code>b</code> (which can themselves be vectors)</td></tr>
+<tr><td><code>&lt;input&gt;.&lt;component&gt;</code></td><td><code>.pos.x</code></td><td>extract a single component from a vector</td></tr>
+<tr><td><code>&lt;input&gt;.&lt;swizzle&gt;</code></td><td><code>.pos.yxy</code></td><td>reorder vector components (this example is equivalent to <code>.pos.y, .pos.x, .pos.y</code>)</td></tr>
+</tbody>
+</table>
diff --git a/guide-src/widget-inputs/vectors.html b/guide-src/widget-inputs/vectors.html
deleted file mode 100644
index 33bbea1..0000000
--- a/guide-src/widget-inputs/vectors.html
+++ /dev/null
@@ -1,3 +0,0 @@
---- Vectors
-
-<h1 style="color:red">TODO</h1>
diff --git a/pugl.js b/pugl.js
index b182480..c6b63f8 100644
--- a/pugl.js
+++ b/pugl.js
@@ -1907,12 +1907,35 @@ ${this.code.join('')}
}
const dot = input.lastIndexOf('.');
- const field = dot === -1 ? 'out' : input.substring(dot + 1);
-
- if (field.length === 0) {
+ if (dot === input.length - 1) {
return { error: 'inputs should not end in .' };
}
+ if (dot === 0) {
+ switch (input) {
+ case '.pos':
+ return { code: '_pos', type: 'vec2' };
+ case '.pos01':
+ return { code: '(0.5+0.5*_pos)', type: 'vec2' };
+ case '.time':
+ return { code: '_time', type: 'float' };
+ case '.mouse':
+ return { code: '_mouse', type: 'vec2' };
+ case '.mouse01':
+ return { code: '(0.5+0.5*_mouse)', type: 'vec2' };
+ case '.π':
+ case '.pi':
+ return { code: '(3.1415927)', type: 'float' };
+ case '.2π':
+ case '.2pi':
+ return { code: '(6.2831853)', type: 'float' };
+ default:
+ return { error: `no such builtin: ${input}` };
+ }
+ }
+
+ const field = dot === -1 ? '' : input.substring(dot + 1);
+
if (
field.length >= 1 &&
field.length <= 4 &&
@@ -1937,28 +1960,10 @@ ${this.code.join('')}
code: `(${vector.code}).${field}`,
type: type_vec(base, field.length),
};
- }
-
- if (dot === 0) {
- switch (input) {
- case '.pos':
- return { code: '_pos', type: 'vec2' };
- case '.pos01':
- return { code: '(0.5+0.5*_pos)', type: 'vec2' };
- case '.time':
- return { code: '_time', type: 'float' };
- case '.mouse':
- return { code: '_mouse', type: 'vec2' };
- case '.mouse01':
- return { code: '(0.5+0.5*_mouse)', type: 'vec2' };
- default:
- return { error: `no such builtin: ${input}` };
- }
- }
-
- if (field !== 'out') {
+ } else if (field) {
return { error: `no such field: ${field}` };
}
+
const widget = this.widgets.get(input);
if (widget === undefined) {
return { error: `cannot find widget '${input}'` };
diff --git a/style.css b/style.css
index 7697264..816d95d 100644
--- a/style.css
+++ b/style.css
@@ -301,3 +301,15 @@ input[type='number'] {
.overflow-hidden {
overflow: hidden;
}
+
+table {
+ border-collapse: collapse;
+ margin: 0.5em;
+}
+
+td,
+th {
+ border: 2px solid white;
+ margin: 0;
+ padding: 0.2em;
+}