mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-25 13:08:12 +08:00
Rename Crop tool to Artboard tool
This commit is contained in:
+41
-41
@@ -18,15 +18,15 @@ use glam::{DVec2, Vec2Swizzles};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct CropTool {
|
||||
fsm_state: CropToolFsmState,
|
||||
data: CropToolData,
|
||||
pub struct ArtboardTool {
|
||||
fsm_state: ArtboardToolFsmState,
|
||||
data: ArtboardToolData,
|
||||
}
|
||||
|
||||
#[remain::sorted]
|
||||
#[impl_message(Message, ToolMessage, Crop)]
|
||||
#[impl_message(Message, ToolMessage, Artboard)]
|
||||
#[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)]
|
||||
pub enum CropToolMessage {
|
||||
pub enum ArtboardToolMessage {
|
||||
// Standard messages
|
||||
#[remain::unsorted]
|
||||
Abort,
|
||||
@@ -43,7 +43,7 @@ pub enum CropToolMessage {
|
||||
PointerUp,
|
||||
}
|
||||
|
||||
impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for CropTool {
|
||||
impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for ArtboardTool {
|
||||
fn process_action(&mut self, action: ToolMessage, data: ToolActionHandlerData<'a>, responses: &mut VecDeque<Message>) {
|
||||
if action == ToolMessage::UpdateHints {
|
||||
self.fsm_state.update_hints(responses);
|
||||
@@ -63,27 +63,27 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for CropTool {
|
||||
}
|
||||
}
|
||||
|
||||
advertise_actions!(CropToolMessageDiscriminant; PointerDown, PointerUp, PointerMove, DeleteSelected, Abort);
|
||||
advertise_actions!(ArtboardToolMessageDiscriminant; PointerDown, PointerUp, PointerMove, DeleteSelected, Abort);
|
||||
}
|
||||
|
||||
impl PropertyHolder for CropTool {}
|
||||
impl PropertyHolder for ArtboardTool {}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
enum CropToolFsmState {
|
||||
enum ArtboardToolFsmState {
|
||||
Ready,
|
||||
Drawing,
|
||||
ResizingBounds,
|
||||
Dragging,
|
||||
}
|
||||
|
||||
impl Default for CropToolFsmState {
|
||||
impl Default for ArtboardToolFsmState {
|
||||
fn default() -> Self {
|
||||
CropToolFsmState::Ready
|
||||
ArtboardToolFsmState::Ready
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default)]
|
||||
struct CropToolData {
|
||||
struct ArtboardToolData {
|
||||
bounding_box_overlays: Option<BoundingBoxOverlays>,
|
||||
selected_board: Option<LayerId>,
|
||||
snap_handler: SnapHandler,
|
||||
@@ -92,8 +92,8 @@ struct CropToolData {
|
||||
drag_current: DVec2,
|
||||
}
|
||||
|
||||
impl Fsm for CropToolFsmState {
|
||||
type ToolData = CropToolData;
|
||||
impl Fsm for ArtboardToolFsmState {
|
||||
type ToolData = ArtboardToolData;
|
||||
type ToolOptions = ();
|
||||
|
||||
fn transition(
|
||||
@@ -106,9 +106,9 @@ impl Fsm for CropToolFsmState {
|
||||
input: &InputPreprocessorMessageHandler,
|
||||
responses: &mut VecDeque<Message>,
|
||||
) -> Self {
|
||||
if let ToolMessage::Crop(event) = event {
|
||||
if let ToolMessage::Artboard(event) = event {
|
||||
match (self, event) {
|
||||
(CropToolFsmState::Ready | CropToolFsmState::ResizingBounds | CropToolFsmState::Dragging, CropToolMessage::DocumentIsDirty) => {
|
||||
(ArtboardToolFsmState::Ready | ArtboardToolFsmState::ResizingBounds | ArtboardToolFsmState::Dragging, ArtboardToolMessage::DocumentIsDirty) => {
|
||||
let mut buffer = Vec::new();
|
||||
match (
|
||||
data.selected_board.map(|path| document.artboard_bounding_box_and_transform(&[path])).unwrap_or(None),
|
||||
@@ -139,7 +139,7 @@ impl Fsm for CropToolFsmState {
|
||||
buffer.into_iter().rev().for_each(|message| responses.push_front(message));
|
||||
self
|
||||
}
|
||||
(CropToolFsmState::Ready, CropToolMessage::PointerDown) => {
|
||||
(ArtboardToolFsmState::Ready, ArtboardToolMessage::PointerDown) => {
|
||||
data.drag_start = input.mouse.position;
|
||||
data.drag_current = input.mouse.position;
|
||||
|
||||
@@ -164,7 +164,7 @@ impl Fsm for CropToolFsmState {
|
||||
data.snap_handler
|
||||
.start_snap(document, document.bounding_boxes(None, Some(data.selected_board.unwrap())), snap_x, snap_y);
|
||||
|
||||
CropToolFsmState::ResizingBounds
|
||||
ArtboardToolFsmState::ResizingBounds
|
||||
} else {
|
||||
let tolerance = DVec2::splat(SELECTION_TOLERANCE);
|
||||
let quad = Quad::from_box([input.mouse.position - tolerance, input.mouse.position + tolerance]);
|
||||
@@ -184,7 +184,7 @@ impl Fsm for CropToolFsmState {
|
||||
.into(),
|
||||
);
|
||||
|
||||
CropToolFsmState::Dragging
|
||||
ArtboardToolFsmState::Dragging
|
||||
} else {
|
||||
let id = generate_uuid();
|
||||
data.selected_board = Some(id);
|
||||
@@ -202,11 +202,11 @@ impl Fsm for CropToolFsmState {
|
||||
|
||||
responses.push_back(PropertiesPanelMessage::ClearSelection.into());
|
||||
|
||||
CropToolFsmState::Drawing
|
||||
ArtboardToolFsmState::Drawing
|
||||
}
|
||||
}
|
||||
}
|
||||
(CropToolFsmState::ResizingBounds, CropToolMessage::PointerMove { constrain_axis_or_aspect, center }) => {
|
||||
(ArtboardToolFsmState::ResizingBounds, ArtboardToolMessage::PointerMove { constrain_axis_or_aspect, center }) => {
|
||||
if let Some(bounds) = &data.bounding_box_overlays {
|
||||
if let Some(movement) = &bounds.selected_edges {
|
||||
let from_center = input.keyboard.get(center as usize);
|
||||
@@ -230,9 +230,9 @@ impl Fsm for CropToolFsmState {
|
||||
responses.push_back(ToolMessage::DocumentIsDirty.into());
|
||||
}
|
||||
}
|
||||
CropToolFsmState::ResizingBounds
|
||||
ArtboardToolFsmState::ResizingBounds
|
||||
}
|
||||
(CropToolFsmState::Dragging, CropToolMessage::PointerMove { constrain_axis_or_aspect, .. }) => {
|
||||
(ArtboardToolFsmState::Dragging, ArtboardToolMessage::PointerMove { constrain_axis_or_aspect, .. }) => {
|
||||
if let Some(bounds) = &data.bounding_box_overlays {
|
||||
let axis_align = input.keyboard.get(constrain_axis_or_aspect as usize);
|
||||
|
||||
@@ -259,9 +259,9 @@ impl Fsm for CropToolFsmState {
|
||||
|
||||
data.drag_current = mouse_position + closest_move;
|
||||
}
|
||||
CropToolFsmState::Dragging
|
||||
ArtboardToolFsmState::Dragging
|
||||
}
|
||||
(CropToolFsmState::Drawing, CropToolMessage::PointerMove { constrain_axis_or_aspect, center }) => {
|
||||
(ArtboardToolFsmState::Drawing, ArtboardToolMessage::PointerMove { constrain_axis_or_aspect, center }) => {
|
||||
let mouse_position = input.mouse.position;
|
||||
let snapped_mouse_position = data.snap_handler.snap_position(responses, input.viewport_bounds.size(), document, mouse_position);
|
||||
|
||||
@@ -303,9 +303,9 @@ impl Fsm for CropToolFsmState {
|
||||
|
||||
responses.push_back(ToolMessage::DocumentIsDirty.into());
|
||||
|
||||
CropToolFsmState::Drawing
|
||||
ArtboardToolFsmState::Drawing
|
||||
}
|
||||
(CropToolFsmState::Ready, CropToolMessage::PointerMove { .. }) => {
|
||||
(ArtboardToolFsmState::Ready, ArtboardToolMessage::PointerMove { .. }) => {
|
||||
let cursor = data.bounding_box_overlays.as_ref().map_or(MouseCursorIcon::Default, |bounds| bounds.get_cursor(input, false));
|
||||
|
||||
if data.cursor != cursor {
|
||||
@@ -313,18 +313,18 @@ impl Fsm for CropToolFsmState {
|
||||
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor }.into());
|
||||
}
|
||||
|
||||
CropToolFsmState::Ready
|
||||
ArtboardToolFsmState::Ready
|
||||
}
|
||||
(CropToolFsmState::ResizingBounds, CropToolMessage::PointerUp) => {
|
||||
(ArtboardToolFsmState::ResizingBounds, ArtboardToolMessage::PointerUp) => {
|
||||
data.snap_handler.cleanup(responses);
|
||||
|
||||
if let Some(bounds) = &mut data.bounding_box_overlays {
|
||||
bounds.original_transforms.clear();
|
||||
}
|
||||
|
||||
CropToolFsmState::Ready
|
||||
ArtboardToolFsmState::Ready
|
||||
}
|
||||
(CropToolFsmState::Drawing, CropToolMessage::PointerUp) => {
|
||||
(ArtboardToolFsmState::Drawing, ArtboardToolMessage::PointerUp) => {
|
||||
data.snap_handler.cleanup(responses);
|
||||
|
||||
if let Some(bounds) = &mut data.bounding_box_overlays {
|
||||
@@ -333,25 +333,25 @@ impl Fsm for CropToolFsmState {
|
||||
|
||||
responses.push_back(ToolMessage::DocumentIsDirty.into());
|
||||
|
||||
CropToolFsmState::Ready
|
||||
ArtboardToolFsmState::Ready
|
||||
}
|
||||
(CropToolFsmState::Dragging, CropToolMessage::PointerUp) => {
|
||||
(ArtboardToolFsmState::Dragging, ArtboardToolMessage::PointerUp) => {
|
||||
data.snap_handler.cleanup(responses);
|
||||
|
||||
if let Some(bounds) = &mut data.bounding_box_overlays {
|
||||
bounds.original_transforms.clear();
|
||||
}
|
||||
|
||||
CropToolFsmState::Ready
|
||||
ArtboardToolFsmState::Ready
|
||||
}
|
||||
(_, CropToolMessage::DeleteSelected) => {
|
||||
(_, ArtboardToolMessage::DeleteSelected) => {
|
||||
if let Some(artboard) = data.selected_board.take() {
|
||||
responses.push_back(ArtboardMessage::DeleteArtboard { artboard }.into());
|
||||
responses.push_back(ToolMessage::DocumentIsDirty.into());
|
||||
}
|
||||
CropToolFsmState::Ready
|
||||
ArtboardToolFsmState::Ready
|
||||
}
|
||||
(_, CropToolMessage::Abort) => {
|
||||
(_, ArtboardToolMessage::Abort) => {
|
||||
if let Some(bounding_box_overlays) = data.bounding_box_overlays.take() {
|
||||
bounding_box_overlays.delete(responses);
|
||||
}
|
||||
@@ -366,7 +366,7 @@ impl Fsm for CropToolFsmState {
|
||||
);
|
||||
|
||||
data.snap_handler.cleanup(responses);
|
||||
CropToolFsmState::Ready
|
||||
ArtboardToolFsmState::Ready
|
||||
}
|
||||
_ => self,
|
||||
}
|
||||
@@ -377,7 +377,7 @@ impl Fsm for CropToolFsmState {
|
||||
|
||||
fn update_hints(&self, responses: &mut VecDeque<Message>) {
|
||||
let hint_data = match self {
|
||||
CropToolFsmState::Ready => HintData(vec![
|
||||
ArtboardToolFsmState::Ready => HintData(vec![
|
||||
HintGroup(vec![HintInfo {
|
||||
key_groups: vec![],
|
||||
mouse: Some(MouseMotion::LmbDrag),
|
||||
@@ -397,13 +397,13 @@ impl Fsm for CropToolFsmState {
|
||||
plus: false,
|
||||
}]),
|
||||
]),
|
||||
CropToolFsmState::Dragging => HintData(vec![HintGroup(vec![HintInfo {
|
||||
ArtboardToolFsmState::Dragging => HintData(vec![HintGroup(vec![HintInfo {
|
||||
key_groups: vec![KeysGroup(vec![Key::KeyShift])],
|
||||
mouse: None,
|
||||
label: String::from("Constrain to Axis"),
|
||||
plus: false,
|
||||
}])]),
|
||||
CropToolFsmState::Drawing | CropToolFsmState::ResizingBounds => HintData(vec![HintGroup(vec![
|
||||
ArtboardToolFsmState::Drawing | ArtboardToolFsmState::ResizingBounds => HintData(vec![HintGroup(vec![
|
||||
HintInfo {
|
||||
key_groups: vec![KeysGroup(vec![Key::KeyShift])],
|
||||
mouse: None,
|
||||
@@ -1,4 +1,4 @@
|
||||
pub mod crop_tool;
|
||||
pub mod artboard_tool;
|
||||
pub mod ellipse_tool;
|
||||
pub mod eyedropper_tool;
|
||||
pub mod fill_tool;
|
||||
|
||||
Reference in New Issue
Block a user