mirror of
https://github.com/penpot/penpot.git
synced 2025-05-27 21:46:13 +02:00
Merge pull request #6526 from penpot/superalex-improve-zoom-performance-and-behaviour
🐛 Fix zoom performance and behaviour
This commit is contained in:
commit
d54a7d0401
4 changed files with 60 additions and 30 deletions
|
@ -181,6 +181,18 @@ export function set_parent(id) {
|
|||
Module._set_parent(...buffer);
|
||||
}
|
||||
|
||||
function debounce(fn, delay) {
|
||||
let timeout;
|
||||
return (...args) => {
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(() => fn(...args), delay);
|
||||
};
|
||||
}
|
||||
|
||||
const debouncedRender = debounce(() => {
|
||||
Module._render(Date.now());
|
||||
}, 100);
|
||||
|
||||
export function setupInteraction(canvas) {
|
||||
canvas.addEventListener("wheel", (e) => {
|
||||
e.preventDefault();
|
||||
|
@ -191,7 +203,8 @@ export function setupInteraction(canvas) {
|
|||
offsetX -= (mouseX - offsetX) * (zoomFactor - 1);
|
||||
offsetY -= (mouseY - offsetY) * (zoomFactor - 1);
|
||||
Module._set_view(scale, offsetX, offsetY);
|
||||
Module._render(Date.now());
|
||||
Module._render_from_cache();
|
||||
debouncedRender();
|
||||
});
|
||||
|
||||
canvas.addEventListener("mousedown", (e) => {
|
||||
|
@ -209,7 +222,8 @@ export function setupInteraction(canvas) {
|
|||
lastX = e.offsetX;
|
||||
lastY = e.offsetY;
|
||||
Module._set_view(scale, offsetX, offsetY);
|
||||
Module._render(Date.now());
|
||||
Module._render_from_cache();
|
||||
debouncedRender();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -30,8 +30,8 @@
|
|||
[app.render-wasm.serializers.fills :as sr-fills]
|
||||
[app.render-wasm.wasm :as wasm]
|
||||
[app.util.debug :as dbg]
|
||||
[app.util.functions :as fns]
|
||||
[app.util.http :as http]
|
||||
[app.util.perf :as uperf]
|
||||
[app.util.webapi :as wapi]
|
||||
[beicon.v2.core :as rx]
|
||||
[promesa.core :as p]
|
||||
|
@ -101,6 +101,8 @@
|
|||
(h/call wasm/internal-module "_render" timestamp)
|
||||
(set! wasm/internal-frame-id nil))
|
||||
|
||||
(def debounce-render (fns/debounce render 100))
|
||||
|
||||
(defn cancel-render
|
||||
[_]
|
||||
(when wasm/internal-frame-id
|
||||
|
@ -662,7 +664,8 @@
|
|||
(defn set-view-box
|
||||
[zoom vbox]
|
||||
(h/call wasm/internal-module "_set_view" zoom (- (:x vbox)) (- (:y vbox)))
|
||||
(render (uperf/now)))
|
||||
(h/call wasm/internal-module "_render_from_cache")
|
||||
(debounce-render))
|
||||
|
||||
(defn clear-drawing-cache []
|
||||
(h/call wasm/internal-module "_clear_drawing_cache"))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue