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:
| M | index.html | | | 28 | +++++++++++++++++++++------- |
| M | main.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);
+ }
}