mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-30 03:08:12 +08:00
Desktop: Add Eyedropper tool support with native Vello (#3684)
* mostly done * fix * kinda works but tilt and flip broken * fix footprint Co-authored-by: James Lindsay <78500760+0HyperCube@users.noreply.github.com> * Code review * fix cursor hiding * Remove console.log --------- Co-authored-by: James Lindsay <78500760+0HyperCube@users.noreply.github.com> Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
co-authored by
James Lindsay
Keavon Chambers
parent
19e9af3d43
commit
5fd1a24f16
@@ -148,6 +148,7 @@ pub enum PortfolioMessage {
|
||||
document_id: DocumentId,
|
||||
ignore_hash: bool,
|
||||
},
|
||||
SubmitEyedropperPreviewRender,
|
||||
ToggleResetNodesToDefinitionsOnOpen,
|
||||
ToggleFocusDocument,
|
||||
ToggleDataPanelOpen,
|
||||
|
||||
@@ -1178,6 +1178,41 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageContext<'_>> for Portfolio
|
||||
Ok(message) => responses.add_front(message),
|
||||
}
|
||||
}
|
||||
#[cfg(not(target_family = "wasm"))]
|
||||
PortfolioMessage::SubmitEyedropperPreviewRender => {
|
||||
use crate::consts::EYEDROPPER_PREVIEW_AREA_RESOLUTION;
|
||||
|
||||
let Some(document_id) = self.active_document_id else { return };
|
||||
let Some(document) = self.documents.get_mut(&document_id) else { return };
|
||||
|
||||
let resolution = glam::UVec2::splat(EYEDROPPER_PREVIEW_AREA_RESOLUTION);
|
||||
|
||||
let preview_offset_in_viewport = ipp.mouse.position - (glam::DVec2::splat(EYEDROPPER_PREVIEW_AREA_RESOLUTION as f64 / 2.));
|
||||
let preview_offset_in_viewport = DAffine2::from_translation(preview_offset_in_viewport);
|
||||
|
||||
let document_to_viewport = document.metadata().document_to_viewport;
|
||||
|
||||
let preview_transform = preview_offset_in_viewport.inverse() * document_to_viewport;
|
||||
let pointer_position = document_to_viewport.inverse().transform_point2(ipp.mouse.position);
|
||||
|
||||
let result = self
|
||||
.executor
|
||||
.submit_eyedropper_preview(document_id, preview_transform, pointer_position, resolution, timing_information);
|
||||
|
||||
match result {
|
||||
Err(description) => {
|
||||
responses.add(DialogMessage::DisplayDialogError {
|
||||
title: "Unable to update node graph".to_string(),
|
||||
description,
|
||||
});
|
||||
}
|
||||
Ok(message) => responses.add_front(message),
|
||||
}
|
||||
}
|
||||
#[cfg(target_family = "wasm")]
|
||||
PortfolioMessage::SubmitEyedropperPreviewRender => {
|
||||
// TODO: Currently for Wasm, this is implemented through SVG rendering but the Eyedropper tool doesn't work at all when Vello is enabled as the renderer
|
||||
}
|
||||
PortfolioMessage::ToggleFocusDocument => {
|
||||
self.focus_document = !self.focus_document;
|
||||
responses.add(MenuBarMessage::SendLayout);
|
||||
|
||||
Reference in New Issue
Block a user