open_gpui_canvas/tool/
action.rs1use 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}