Skip to main content

open_gpui_canvas/tool/
action.rs

1use crate::session::{CanvasToolSessionEffect, ToolState};
2use crate::{
3    CanvasConnectionRelease, CanvasSelection, CanvasTool, CanvasTransaction, CanvasViewport,
4    HitTarget,
5};
6use open_gpui::{Pixels, Point};
7use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
10pub(crate) enum CanvasToolEffect {
11    ApplyTransaction(CanvasTransaction),
12    BeginGesture,
13    UpdateGesture(CanvasTransaction),
14    CommitGesture,
15    CancelGesture,
16    SetTool(CanvasTool),
17    SetSelection(CanvasSelection),
18    ReplaceSelection(HitTarget),
19    AddSelection(HitTarget),
20    RemoveSelection(HitTarget),
21    ToggleSelection(HitTarget),
22    ClearSelection,
23    SetConnectionRelease(Option<CanvasConnectionRelease>),
24    SetState(ToolState),
25    PanViewport(Point<Pixels>),
26    SetViewport(CanvasViewport),
27}
28
29#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
30pub enum CanvasToolIntent {
31    ApplyTransaction(CanvasTransaction),
32    CommitTransaction,
33    CancelTransaction,
34    SetTool(CanvasTool),
35    SetSelection(CanvasSelection),
36    ReplaceSelection(HitTarget),
37    AddSelection(HitTarget),
38    RemoveSelection(HitTarget),
39    ToggleSelection(HitTarget),
40    ClearSelection,
41    PanViewport(Point<Pixels>),
42    SetViewport(CanvasViewport),
43}
44
45#[derive(Clone, Debug, PartialEq)]
46pub(crate) enum CanvasEditorAction {
47    ApplyTransaction(CanvasTransaction),
48    BeginGesture,
49    UpdateGesture(CanvasTransaction),
50    CommitGesture,
51    CancelGesture,
52    SetTool(CanvasTool),
53    SetConnectionRelease(Option<CanvasConnectionRelease>),
54    Session(CanvasToolSessionEffect),
55}
56
57impl From<CanvasToolEffect> for CanvasEditorAction {
58    fn from(effect: CanvasToolEffect) -> Self {
59        match effect {
60            CanvasToolEffect::ApplyTransaction(transaction) => Self::ApplyTransaction(transaction),
61            CanvasToolEffect::BeginGesture => Self::BeginGesture,
62            CanvasToolEffect::UpdateGesture(transaction) => Self::UpdateGesture(transaction),
63            CanvasToolEffect::CommitGesture => Self::CommitGesture,
64            CanvasToolEffect::CancelGesture => Self::CancelGesture,
65            CanvasToolEffect::SetTool(tool) => Self::SetTool(tool),
66            CanvasToolEffect::SetSelection(selection) => {
67                Self::Session(CanvasToolSessionEffect::SetSelection(selection))
68            }
69            CanvasToolEffect::ReplaceSelection(target) => {
70                Self::Session(CanvasToolSessionEffect::ReplaceSelection(target))
71            }
72            CanvasToolEffect::AddSelection(target) => {
73                Self::Session(CanvasToolSessionEffect::AddSelection(target))
74            }
75            CanvasToolEffect::RemoveSelection(target) => {
76                Self::Session(CanvasToolSessionEffect::RemoveSelection(target))
77            }
78            CanvasToolEffect::ToggleSelection(target) => {
79                Self::Session(CanvasToolSessionEffect::ToggleSelection(target))
80            }
81            CanvasToolEffect::ClearSelection => {
82                Self::Session(CanvasToolSessionEffect::ClearSelection)
83            }
84            CanvasToolEffect::SetConnectionRelease(release) => Self::SetConnectionRelease(release),
85            CanvasToolEffect::SetState(state) => {
86                Self::Session(CanvasToolSessionEffect::SetState(state))
87            }
88            CanvasToolEffect::PanViewport(delta) => {
89                Self::Session(CanvasToolSessionEffect::PanViewport(delta))
90            }
91            CanvasToolEffect::SetViewport(viewport) => {
92                Self::Session(CanvasToolSessionEffect::SetViewport(viewport))
93            }
94        }
95    }
96}
97
98impl From<CanvasToolIntent> for CanvasEditorAction {
99    fn from(intent: CanvasToolIntent) -> Self {
100        match intent {
101            CanvasToolIntent::ApplyTransaction(transaction) => Self::ApplyTransaction(transaction),
102            CanvasToolIntent::CommitTransaction => Self::CommitGesture,
103            CanvasToolIntent::CancelTransaction => Self::CancelGesture,
104            CanvasToolIntent::SetTool(tool) => Self::SetTool(tool),
105            CanvasToolIntent::SetSelection(selection) => {
106                Self::Session(CanvasToolSessionEffect::SetSelection(selection))
107            }
108            CanvasToolIntent::ReplaceSelection(target) => {
109                Self::Session(CanvasToolSessionEffect::ReplaceSelection(target))
110            }
111            CanvasToolIntent::AddSelection(target) => {
112                Self::Session(CanvasToolSessionEffect::AddSelection(target))
113            }
114            CanvasToolIntent::RemoveSelection(target) => {
115                Self::Session(CanvasToolSessionEffect::RemoveSelection(target))
116            }
117            CanvasToolIntent::ToggleSelection(target) => {
118                Self::Session(CanvasToolSessionEffect::ToggleSelection(target))
119            }
120            CanvasToolIntent::ClearSelection => {
121                Self::Session(CanvasToolSessionEffect::ClearSelection)
122            }
123            CanvasToolIntent::PanViewport(delta) => {
124                Self::Session(CanvasToolSessionEffect::PanViewport(delta))
125            }
126            CanvasToolIntent::SetViewport(viewport) => {
127                Self::Session(CanvasToolSessionEffect::SetViewport(viewport))
128            }
129        }
130    }
131}