summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fractiform.js28
-rw-r--r--index.html97
2 files changed, 89 insertions, 36 deletions
diff --git a/fractiform.js b/fractiform.js
index 9fe9681..0e9eb81 100644
--- a/fractiform.js
+++ b/fractiform.js
@@ -72,6 +72,7 @@ function on_key_press(e) {
if (e.target.tagName === 'INPUT') {
return;
}
+ console.log('key press', code);
switch (code) {
case 32: // space
@@ -82,6 +83,9 @@ function on_key_press(e) {
set_ui_shown(!ui_shown);
e.preventDefault();
break;
+ case 13: // return
+ get_shader_source();
+ break;
}
}
@@ -107,6 +111,22 @@ function on_click(e) {
}
}
+function get_shader_source() {
+ let widgets = [];
+ for (let widget of document.getElementsByClassName('widget')) {
+ let names = widget.getElementsByClassName('name');
+ console.assert(names.length <= 1, 'multiple name inputs for widget');
+ let name = names.length > 0 ? names[0].value : null;
+ let func = widget.dataset.func;
+ let inputs = {};
+ for (let input of widget.getElementsByClassName('in')) {
+ let name = input.getElementsByTagName('label')[0].innerText;
+ inputs[name] = input.getElementsByTagName('input')[0].value;
+ }
+ console.log(name, func, inputs);
+ }
+}
+
function startup() {
page = document.getElementById('page');
canvas = document.getElementById('canvas');
@@ -160,9 +180,9 @@ function startup() {
function frame(time) {
current_time = time * 1e-3;
-
- let page_width = page.offsetWidth;
- let page_height = page.offsetHeight;
+ let ui_width = ui_shown ? ui_div.offsetWidth : 0;
+ let page_width = page.offsetWidth - ui_width;
+ let page_height = page.offsetHeight;
let aspect_ratio = width / height;
let canvas_x = 0, canvas_y = 0;
@@ -180,7 +200,7 @@ function frame(time) {
canvas.width = viewport_width;
canvas.height = viewport_height;
- canvas.style.left = canvas_x + 'px';
+ canvas.style.left = ui_width + canvas_x + 'px';
canvas.style.top = canvas_y + 'px';
let step = true;
diff --git a/index.html b/index.html
index 70c0554..4e0f4a7 100644
--- a/index.html
+++ b/index.html
@@ -21,21 +21,14 @@
#page {
width: 100vw;
- position: relative;
- }
- #page[data-ui-shown="1"] {
- top: var(--ui-height);
- height: calc(100vh - var(--ui-height));
- }
- #page[data-ui-shown="0"] {
- top: 0;
height: 100vh;
+ position: relative;
}
- #canvas, #ui-canvas {
+ #canvas {
position: absolute;
left: 0;
- top: 0;
+ bottom: 0;
}
#ui-canvas {
@@ -68,32 +61,39 @@
outline: 2px solid #0a0;
}
#ui {
- display: block;
- width: 100vw;
- height: var(--ui-height);
- background-color: #111;
- border-bottom: 2px solid var(--ui-border);
position: absolute;
top: 0;
left: 0;
- vertical-align:middle;
+ width: 20vw;
+ height: 100vh;
+ resize: horizontal;
+ overflow: scroll;
+ border-right: 2px solid white;
+ padding: 0.2em;
}
input, button {
vertical-align: middle;
display: inline-block;
- height: 2.0em;
margin: 0.3em 0 0.3em 0.3em;
border: 2px solid var(--ui-border);
- background-color: black;
+ background-color: transparent;
color: white;
}
+ button {
+ height: 2.0em;
+ }
+ input {
+ height: 1.5em;
+ font-size: inherit;
+ }
#ui input[type=color] {
padding: 0;
}
- #ui input[type=text], #ui input[type=number] {
- width: 3em;
- font-size: inherit;
- height: 1.5em;
+ .in input {
+ width: 5em;
+ }
+ .out {
+ font-weight: bold;
}
input[type=number] {
/* disable increment/decrement buttons (firefox) */
@@ -103,15 +103,27 @@
/* disable increment/decrement buttons (webkit) */
-webkit-appearance: none;
}
- #ui label {
- margin-right: 0.5em;
- }
- #ui div {
- display: inline-block;
- }
img.icon {
height: 1.5em;
}
+ .widget {
+ border: 2px solid white;
+ border-radius: 5px;
+ padding: 5px;
+ margin: 0.5em;
+ background: #111;
+ position: relative;
+ }
+ .outs {
+ position: absolute;
+ bottom: 0.2em;
+ right: 0.2em;
+ }
+ .widget-title {
+ font-weight: bold;
+ margin: 2px;
+ display: block;
+ }
</style>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1" name="viewport">
@@ -170,13 +182,37 @@ void main() {
<body>
<script src="fractiform.js" type="text/javascript"></script>
-<div id="page" data-ui-shown="1">
+<div id="page">
<noscript>
<p>
This page requires JavaScript to function.<br>
Try using a modern browser such as <em>Netscape Navigator</em>&reg;.
</p>
</noscript>
+ <div id="ui">
+ <div class="widget" data-func="mix">
+ <div class="widget-title">Mix <input placeholder="name" class="name" type="text"></div>
+ <div class="in"><input type="text" id="src1"> <label for="src1">src1</label></div>
+ <div class="in"><input type="text" id="src2"> <label for="src2">src2</label></div>
+ <div class="in"><input type="text" id="mix"> <label for="mix">mix</label></div>
+ <div class="outs">
+ <div class="out">out</div>
+ </div>
+ </div>
+ <div class="widget" data-func="mix">
+ <div class="widget-title">Mix <input placeholder="name" class="name" type="text"></div>
+ <div class="in"><input type="text" id="asrc1"> <label for="asrc1">src1</label></div>
+ <div class="in"><input type="text" id="asrc2"> <label for="asrc2">src2</label></div>
+ <div class="in"><input type="text" id="amix"> <label for="amix">mix</label></div>
+ <div class="outs">
+ <div class="out">out</div>
+ </div>
+ </div>
+ <div class="widget" data-func="output">
+ <div class="widget-title">Output Color</div>
+ <div class="in"><input type="text" id="out"> <label for="out">value</label></div>
+ </div>
+ </div>
<canvas id="canvas">
<p>
Your browser doesn't support HTML5 &lt;canvas&gt;.<br>
@@ -184,9 +220,6 @@ void main() {
</p>
</canvas>
</div>
-<div id="ui">
- a
-</div>
<dialog id="error-dialog">
<pre id="error-message" class="error"></pre>