From b2aa1817b6316bd2b7002231bee6390f07361aa9 Mon Sep 17 00:00:00 2001 From: pommicket Date: Thu, 24 Aug 2023 22:04:16 -0400 Subject: controls --- index.html | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- pugl.js | 41 +++++++++++++++++++++++++++++++++-------- 2 files changed, 85 insertions(+), 13 deletions(-) diff --git a/index.html b/index.html index dd8853c..9c5a189 100644 --- a/index.html +++ b/index.html @@ -85,6 +85,13 @@ input[type=submit]:active, button:active { background-color: #fff9; } + input[type=submit][disabled]:hover, + input[type=submit][disabled]:active, + button[disabled]:hover, + button[disabled]:active { + background-color: transparent; + cursor: not-allowed; + } input:focus, [contenteditable]:focus, button:focus { outline: 2px solid #77f; } @@ -207,6 +214,26 @@ input[type=number] { -moz-appearance: textfield; } + .img-button img, .img-button svg { + height: 2em; + display: block; + } + .img-button[disabled] img, + .img-button[disabled] svg { + filter: brightness(50%); + } + .ui-section { + margin: 0.3em; + } + .ui-section label { + margin: auto; + } + .inline-block { + display: inline-block; + } + .no-wrap { + whitespace: no-wrap; + } @@ -227,19 +254,39 @@
pugl
-
+
-
+ ×
- Add -
-
+
+
+ + + +
+   +
+ + +
+
+
+ Add +
+
+
diff --git a/pugl.js b/pugl.js index f200a19..6de9dd5 100644 --- a/pugl.js +++ b/pugl.js @@ -2,11 +2,9 @@ /* TODO: +- reset button +- guide - about dialog -- pause -- settings: - - enable/disable auto-update - - resolution */ const APP_ID = 'dh3YgVZQdX1Q'; @@ -34,11 +32,12 @@ let widgets_container; let code_input; let error_element; let parsed_widgets; +let paused = false; const mouse_pos_ndc = Object.preventExtensions({ x: 0, y: 0 }); -let render_width = 1080, - render_height = 1080; +let render_width = 1080; +let render_height = 1080; const GLSL_FLOAT_TYPES = ['float', 'vec2', 'vec3', 'vec4']; const GLSL_FLOAT_TYPE_PAIRS = GLSL_FLOAT_TYPES.flatMap((x) => GLSL_FLOAT_TYPES.map((y) => [x, y]), @@ -910,7 +909,7 @@ float worley(vec3 p, vec3 freq) { ]; function auto_update_enabled() { - return true; + return document.getElementById('auto-update').checked; } function is_input(element) { @@ -2367,6 +2366,30 @@ function startup() { import_widgets(code_input.value); }); + const pause_element = document.getElementById('pause'); + const play_element = document.getElementById('play'); + const step_element = document.getElementById('step'); + function update_step_buttons() { + play_element.disabled = !paused; + pause_element.disabled = paused; + step_element.disabled = !paused; + } + + // ideally we would just put the initial state into the HTML + // but fucking firefox https://bugzilla.mozilla.org/show_bug.cgi?id=654072 + update_step_buttons(); + pause_element.addEventListener('click', () => { + paused = true; + update_step_buttons(); + }); + play_element.addEventListener('click', () => { + paused = false; + update_step_buttons(); + }); + step_element.addEventListener('click', () => { + perform_step(); + }); + gl = canvas.getContext('webgl2'); if (gl === null) { // support for very-old-but-not-ancient browsers @@ -2518,7 +2541,9 @@ function frame(time) { canvas.style.left = canvas_x + 'px'; canvas.style.top = canvas_y + 'px'; - perform_step(); + if (!paused) { + perform_step(); + } gl.bindFramebuffer(gl.FRAMEBUFFER, null); gl.viewport(0, 0, viewport_width, viewport_height); -- cgit v1.2.3