imagine

a simple image editor
git clone git://source.orangerot.dev:/university/imagine.git
Log | Files | Refs | README | LICENSE

commit f41f1ea4b2cf9e4698a2ce67ef9a7ea74d1bf058
parent e1dd8faaa5a4ace2854a71c10695105a7e07cf49
Author: Orangerot <purple@orangerot.dev>
Date:   Thu, 12 Dec 2024 05:12:38 +0100

feat: enable lensflare in ui and control with mouse position

Diffstat:
Mindex.html | 28+++++++++++++++++++++-------
Mmain.js | 28+++++++++++++++++++++++++++-
2 files changed, 48 insertions(+), 8 deletions(-)

diff --git a/index.html b/index.html @@ -71,13 +71,27 @@ <!-- autocomplete off prevents browsers from remebering the value on page reloads --> <form autocomplete="off"> - <button id="save" class="button is-primary"> - Save Image - </button> - <button id="share" class="button is-secondary"> - <i class="fa-solid fa-share-from-square fa-fw mr-1"></i> - Share - </button> + <div class="buttons"> + <button id="save" class="button is-primary"> + Save Image + </button> + <button id="share" class="button is-secondary"> + <i class="fa-solid fa-share-from-square fa-fw mr-1"></i> + Share + </button> + </div> + + <div class="field"> + <!-- + <label class="label"> + Use Gyroscope + <input type="checkbox" class="is-pulled-right"> + </label> + --> + <button id="lensflare" class="button is-medium is-fullwidth"> + Lensflare + </button> + </div> <p class="menu-label"> Color Correction diff --git a/main.js b/main.js @@ -12,6 +12,11 @@ let settings = { "blur": { filter: value => value * canvas.width / 100 + 'px' } }; const img = new Image(); +let lensflare_active = false; +let cursor = { + x: 0, + y: 0 +}; // wait for site to be parsed so element can be found document.addEventListener("DOMContentLoaded", function() { @@ -30,6 +35,25 @@ document.addEventListener("DOMContentLoaded", function() { document.getElementById("save").addEventListener("click", save_image) document.getElementById("share").addEventListener("click", share_image) + document.getElementById("lensflare").addEventListener("click", function(event) { + lensflare_active = !lensflare_active; + if (lensflare_active) { + event.target.classList.add("is-primary"); + } else { + event.target.classList.remove("is-primary"); + } + draw(true); + }); + + document.getElementById("viewport").addEventListener("mousemove", function(event) { + if (event.buttons === 1 && lensflare_active) { + cursor.x = (event.clientX - canvas.offsetLeft) / canvas.clientWidth - 0.5; + cursor.y = (event.clientY - canvas.offsetTop) / canvas.clientWidth - 0.5; + console.log(cursor); + draw(true); + } + }); + window.addEventListener("resize", () => draw(true)) video.addEventListener("canplay", function() { @@ -246,6 +270,8 @@ function draw(viewport_scale) { ctx.drawImage(img, 0, 0, canvas.width, canvas.height); ctx.filter = ''; - // lensflare(.3,.3); + if (lensflare_active) { + lensflare(cursor.x, cursor.y); + } }