mirror of
https://github.com/penpot/penpot.git
synced 2026-05-14 20:43:55 +00:00
🐛 Use extrect to capture component's thumbnail
This commit is contained in:
parent
847d55bfb4
commit
76e3df5836
@ -63,8 +63,9 @@
|
||||
(try
|
||||
(let [objects (dsh/lookup-page-objects @st/state file-id page-id)]
|
||||
(if-let [frame (get objects frame-id)]
|
||||
(let [{:keys [width height]} (:selrect frame)
|
||||
max-size (mth/max width height)
|
||||
(let [{ext-w :width ext-h :height} (wasm.api/get-shape-extrect frame-id)
|
||||
{sel-w :width sel-h :height} (:selrect frame)
|
||||
max-size (mth/max (or ext-w sel-w) (or ext-h sel-h))
|
||||
scale (mth/max 1 (/ target-size max-size))
|
||||
png-bytes (wasm.api/render-shape-pixels frame-id scale)]
|
||||
(if (or (nil? png-bytes) (zero? (.-length png-bytes)))
|
||||
|
||||
@ -2172,6 +2172,24 @@
|
||||
(mem/free)
|
||||
result))
|
||||
|
||||
(defn get-shape-extrect
|
||||
[shape-id]
|
||||
(let [buffer (uuid/get-u32 shape-id)
|
||||
offset (h/call wasm/internal-module "_get_shape_extrect"
|
||||
(aget buffer 0)
|
||||
(aget buffer 1)
|
||||
(aget buffer 2)
|
||||
(aget buffer 3))]
|
||||
(when (and (number? offset) (pos? offset))
|
||||
(let [heapf32 (mem/get-heap-f32)
|
||||
base (mem/->offset-32 offset)
|
||||
x (aget heapf32 base)
|
||||
y (aget heapf32 (+ base 1))
|
||||
w (aget heapf32 (+ base 2))
|
||||
h (aget heapf32 (+ base 3))]
|
||||
(mem/free)
|
||||
{:x x :y y :width w :height h}))))
|
||||
|
||||
(defn init-wasm-module
|
||||
[module]
|
||||
(let [default-fn (unchecked-get module "default")
|
||||
|
||||
@ -878,6 +878,25 @@ pub extern "C" fn end_temp_objects() -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
#[wasm_error]
|
||||
pub extern "C" fn get_shape_extrect(a: u32, b: u32, c: u32, d: u32) -> Result<*mut u8> {
|
||||
let id = uuid_from_u32_quartet(a, b, c, d);
|
||||
|
||||
with_state!(state, {
|
||||
let Some(shape) = state.shapes.get(&id) else {
|
||||
return Err(Error::CriticalError("Shape not found".to_string()));
|
||||
};
|
||||
let extrect = get_render_state().get_cached_extrect(shape, &state.shapes, 1.0);
|
||||
let mut buf = Vec::with_capacity(16);
|
||||
buf.extend_from_slice(&extrect.x().to_le_bytes());
|
||||
buf.extend_from_slice(&extrect.y().to_le_bytes());
|
||||
buf.extend_from_slice(&extrect.width().to_le_bytes());
|
||||
buf.extend_from_slice(&extrect.height().to_le_bytes());
|
||||
Ok(mem::write_bytes(buf))
|
||||
})
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
#[wasm_error]
|
||||
pub extern "C" fn render_shape_pixels(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user