mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-27 05:08:12 +08:00
Add a Select tool overlay for the layer origin (#3471)
* Add blue layer origin cross overlay * Apply suggestion from @Keavon * Skip layers without local transforms * Disable the Custom Pivot by default --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
co-authored by
Keavon Chambers
parent
20a595db39
commit
c46060db44
@@ -1262,6 +1262,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
|
||||
OverlaysType::TransformCage => visibility_settings.transform_cage = visible,
|
||||
OverlaysType::HoverOutline => visibility_settings.hover_outline = visible,
|
||||
OverlaysType::SelectionOutline => visibility_settings.selection_outline = visible,
|
||||
OverlaysType::LayerOriginCross => visibility_settings.layer_origin_cross = visible,
|
||||
OverlaysType::Pivot => visibility_settings.pivot = visible,
|
||||
OverlaysType::Origin => visibility_settings.origin = visible,
|
||||
OverlaysType::Path => visibility_settings.path = visible,
|
||||
@@ -2394,6 +2395,24 @@ impl DocumentMessageHandler {
|
||||
]
|
||||
},
|
||||
},
|
||||
LayoutGroup::Row {
|
||||
widgets: {
|
||||
let checkbox_id = CheckboxId::new();
|
||||
vec![
|
||||
CheckboxInput::new(self.overlays_visibility_settings.layer_origin_cross)
|
||||
.on_update(|optional_input: &CheckboxInput| {
|
||||
DocumentMessage::SetOverlaysVisibility {
|
||||
visible: optional_input.checked,
|
||||
overlays_type: Some(OverlaysType::LayerOriginCross),
|
||||
}
|
||||
.into()
|
||||
})
|
||||
.for_label(checkbox_id)
|
||||
.widget_instance(),
|
||||
TextLabel::new("Layer Origin".to_string()).for_checkbox(checkbox_id).widget_instance(),
|
||||
]
|
||||
},
|
||||
},
|
||||
LayoutGroup::Row {
|
||||
widgets: vec![TextLabel::new("Pen & Path Tools").widget_instance()],
|
||||
},
|
||||
|
||||
@@ -25,12 +25,15 @@ use std::sync::{Arc, Mutex, MutexGuard};
|
||||
use vello::Scene;
|
||||
use vello::peniko;
|
||||
|
||||
// TODO Remove duplicated definition of this in `utility_types_web.rs`
|
||||
pub type OverlayProvider = fn(OverlayContext) -> Message;
|
||||
|
||||
// TODO Remove duplicated definition of this in `utility_types_web.rs`
|
||||
pub fn empty_provider() -> OverlayProvider {
|
||||
|_| Message::NoOp
|
||||
}
|
||||
|
||||
// TODO Remove duplicated definition of this in `utility_types_web.rs`
|
||||
/// Types of overlays used by DocumentMessage to enable/disable the selected set of viewport overlays.
|
||||
#[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)]
|
||||
pub enum OverlaysType {
|
||||
@@ -41,6 +44,7 @@ pub enum OverlaysType {
|
||||
TransformCage,
|
||||
HoverOutline,
|
||||
SelectionOutline,
|
||||
LayerOriginCross,
|
||||
Pivot,
|
||||
Origin,
|
||||
Path,
|
||||
@@ -48,6 +52,7 @@ pub enum OverlaysType {
|
||||
Handles,
|
||||
}
|
||||
|
||||
// TODO Remove duplicated definition of this in `utility_types_web.rs`
|
||||
#[derive(PartialEq, Copy, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)]
|
||||
#[serde(default)]
|
||||
pub struct OverlaysVisibilitySettings {
|
||||
@@ -59,6 +64,7 @@ pub struct OverlaysVisibilitySettings {
|
||||
pub transform_cage: bool,
|
||||
pub hover_outline: bool,
|
||||
pub selection_outline: bool,
|
||||
pub layer_origin_cross: bool,
|
||||
pub pivot: bool,
|
||||
pub origin: bool,
|
||||
pub path: bool,
|
||||
@@ -66,6 +72,7 @@ pub struct OverlaysVisibilitySettings {
|
||||
pub handles: bool,
|
||||
}
|
||||
|
||||
// TODO Remove duplicated definition of this in `utility_types_web.rs`
|
||||
impl Default for OverlaysVisibilitySettings {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
@@ -77,6 +84,7 @@ impl Default for OverlaysVisibilitySettings {
|
||||
transform_cage: true,
|
||||
hover_outline: true,
|
||||
selection_outline: true,
|
||||
layer_origin_cross: true,
|
||||
pivot: true,
|
||||
origin: true,
|
||||
path: true,
|
||||
@@ -86,6 +94,7 @@ impl Default for OverlaysVisibilitySettings {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Remove duplicated definition of this in `utility_types_web.rs`
|
||||
impl OverlaysVisibilitySettings {
|
||||
pub fn all(&self) -> bool {
|
||||
self.all
|
||||
@@ -119,6 +128,10 @@ impl OverlaysVisibilitySettings {
|
||||
self.all && self.selection_outline
|
||||
}
|
||||
|
||||
pub fn layer_origin_cross(&self) -> bool {
|
||||
self.all && self.layer_origin_cross
|
||||
}
|
||||
|
||||
pub fn pivot(&self) -> bool {
|
||||
self.all && self.pivot
|
||||
}
|
||||
@@ -391,12 +404,14 @@ impl OverlayContext {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Remove duplicated definition of this in `utility_types_web.rs`
|
||||
pub enum Pivot {
|
||||
Start,
|
||||
Middle,
|
||||
End,
|
||||
}
|
||||
|
||||
// TODO Remove duplicated definition of this in `utility_types_web.rs`
|
||||
pub enum DrawHandles {
|
||||
All,
|
||||
SelectedAnchors(HashMap<LayerNodeIdentifier, Vec<SegmentId>>),
|
||||
|
||||
@@ -37,6 +37,7 @@ pub enum OverlaysType {
|
||||
TransformCage,
|
||||
HoverOutline,
|
||||
SelectionOutline,
|
||||
LayerOriginCross,
|
||||
Pivot,
|
||||
Origin,
|
||||
Path,
|
||||
@@ -55,6 +56,7 @@ pub struct OverlaysVisibilitySettings {
|
||||
pub transform_cage: bool,
|
||||
pub hover_outline: bool,
|
||||
pub selection_outline: bool,
|
||||
pub layer_origin_cross: bool,
|
||||
pub pivot: bool,
|
||||
pub origin: bool,
|
||||
pub path: bool,
|
||||
@@ -73,6 +75,7 @@ impl Default for OverlaysVisibilitySettings {
|
||||
transform_cage: true,
|
||||
hover_outline: true,
|
||||
selection_outline: true,
|
||||
layer_origin_cross: true,
|
||||
pivot: true,
|
||||
origin: true,
|
||||
path: true,
|
||||
@@ -115,6 +118,10 @@ impl OverlaysVisibilitySettings {
|
||||
self.all && self.selection_outline
|
||||
}
|
||||
|
||||
pub fn layer_origin_cross(&self) -> bool {
|
||||
self.all && self.layer_origin_cross
|
||||
}
|
||||
|
||||
pub fn pivot(&self) -> bool {
|
||||
self.all && self.pivot
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user