1
1
use crate :: messages:: debug:: utility_types:: MessageLoggingVerbosity ;
2
- use crate :: messages:: dialog:: DialogMessageData ;
3
- use crate :: messages:: portfolio :: document :: node_graph :: document_node_definitions ;
2
+ use crate :: messages:: dialog:: DialogMessageContext ;
3
+ use crate :: messages:: layout :: layout_message_handler :: LayoutMessageContext ;
4
4
use crate :: messages:: prelude:: * ;
5
5
6
6
#[ derive( Debug , Default ) ]
@@ -91,7 +91,7 @@ impl Dispatcher {
91
91
pub fn handle_message < T : Into < Message > > ( & mut self , message : T , process_after_all_current : bool ) {
92
92
let message = message. into ( ) ;
93
93
// Add all additional messages to the buffer if it exists (except from the end buffer message)
94
- if !matches ! ( message, Message :: EndBuffer ( _ ) ) {
94
+ if !matches ! ( message, Message :: EndBuffer { .. } ) {
95
95
if let Some ( buffered_queue) = & mut self . buffered_queue {
96
96
Self :: schedule_execution ( buffered_queue, true , [ message] ) ;
97
97
@@ -126,71 +126,19 @@ impl Dispatcher {
126
126
127
127
// Process the action by forwarding it to the relevant message handler, or saving the FrontendMessage to be sent to the frontend
128
128
match message {
129
- Message :: StartBuffer => {
130
- self . buffered_queue = Some ( std:: mem:: take ( & mut self . message_queues ) ) ;
131
- }
132
- Message :: EndBuffer ( render_metadata) => {
133
- // Assign the message queue to the currently buffered queue
134
- if let Some ( buffered_queue) = self . buffered_queue . take ( ) {
135
- self . cleanup_queues ( false ) ;
136
- assert ! ( self . message_queues. is_empty( ) , "message queues are always empty when ending a buffer" ) ;
137
- self . message_queues = buffered_queue;
138
- } ;
139
-
140
- let graphene_std:: renderer:: RenderMetadata {
141
- upstream_footprints : footprints,
142
- local_transforms,
143
- first_instance_source_id,
144
- click_targets,
145
- clip_targets,
146
- } = render_metadata;
147
-
148
- // Run these update state messages immediately
149
- let messages = [
150
- DocumentMessage :: UpdateUpstreamTransforms {
151
- upstream_footprints : footprints,
152
- local_transforms,
153
- first_instance_source_id,
154
- } ,
155
- DocumentMessage :: UpdateClickTargets { click_targets } ,
156
- DocumentMessage :: UpdateClipTargets { clip_targets } ,
157
- ] ;
158
- Self :: schedule_execution ( & mut self . message_queues , false , messages. map ( Message :: from) ) ;
159
- }
160
- Message :: NoOp => { }
161
- Message :: Init => {
162
- // Load persistent data from the browser database
163
- queue. add ( FrontendMessage :: TriggerLoadFirstAutoSaveDocument ) ;
164
- queue. add ( FrontendMessage :: TriggerLoadPreferences ) ;
165
-
166
- // Display the menu bar at the top of the window
167
- queue. add ( MenuBarMessage :: SendLayout ) ;
168
-
169
- // Send the information for tooltips and categories for each node/input.
170
- queue. add ( FrontendMessage :: SendUIMetadata {
171
- node_descriptions : document_node_definitions:: collect_node_descriptions ( ) ,
172
- node_types : document_node_definitions:: collect_node_types ( ) ,
173
- } ) ;
174
-
175
- // Finish loading persistent data from the browser database
176
- queue. add ( FrontendMessage :: TriggerLoadRestAutoSaveDocuments ) ;
177
- }
178
129
Message :: Animation ( message) => {
179
130
self . message_handlers . animation_message_handler . process_message ( message, & mut queue, ( ) ) ;
180
131
}
181
- Message :: Batched ( messages) => {
182
- messages. iter ( ) . for_each ( |message| self . handle_message ( message. to_owned ( ) , false ) ) ;
183
- }
184
132
Message :: Broadcast ( message) => self . message_handlers . broadcast_message_handler . process_message ( message, & mut queue, ( ) ) ,
185
133
Message :: Debug ( message) => {
186
134
self . message_handlers . debug_message_handler . process_message ( message, & mut queue, ( ) ) ;
187
135
}
188
136
Message :: Dialog ( message) => {
189
- let data = DialogMessageData {
137
+ let context = DialogMessageContext {
190
138
portfolio : & self . message_handlers . portfolio_message_handler ,
191
139
preferences : & self . message_handlers . preferences_message_handler ,
192
140
} ;
193
- self . message_handlers . dialog_message_handler . process_message ( message, & mut queue, data ) ;
141
+ self . message_handlers . dialog_message_handler . process_message ( message, & mut queue, context ) ;
194
142
}
195
143
Message :: Frontend ( message) => {
196
144
// Handle these messages immediately by returning early
@@ -213,20 +161,21 @@ impl Dispatcher {
213
161
214
162
self . message_handlers
215
163
. input_preprocessor_message_handler
216
- . process_message ( message, & mut queue, InputPreprocessorMessageData { keyboard_platform } ) ;
164
+ . process_message ( message, & mut queue, InputPreprocessorMessageContext { keyboard_platform } ) ;
217
165
}
218
166
Message :: KeyMapping ( message) => {
219
167
let input = & self . message_handlers . input_preprocessor_message_handler ;
220
168
let actions = self . collect_actions ( ) ;
221
169
222
170
self . message_handlers
223
171
. key_mapping_message_handler
224
- . process_message ( message, & mut queue, KeyMappingMessageData { input, actions } ) ;
172
+ . process_message ( message, & mut queue, KeyMappingMessageContext { input, actions } ) ;
225
173
}
226
174
Message :: Layout ( message) => {
227
175
let action_input_mapping = & |action_to_find : & MessageDiscriminant | self . message_handlers . key_mapping_message_handler . action_input_mapping ( action_to_find) ;
176
+ let context = LayoutMessageContext { action_input_mapping } ;
228
177
229
- self . message_handlers . layout_message_handler . process_message ( message, & mut queue, action_input_mapping ) ;
178
+ self . message_handlers . layout_message_handler . process_message ( message, & mut queue, context ) ;
230
179
}
231
180
Message :: Portfolio ( message) => {
232
181
let ipp = & self . message_handlers . input_preprocessor_message_handler ;
@@ -240,7 +189,7 @@ impl Dispatcher {
240
189
self . message_handlers . portfolio_message_handler . process_message (
241
190
message,
242
191
& mut queue,
243
- PortfolioMessageData {
192
+ PortfolioMessageContext {
244
193
ipp,
245
194
preferences,
246
195
current_tool,
@@ -261,7 +210,7 @@ impl Dispatcher {
261
210
return ;
262
211
} ;
263
212
264
- let data = ToolMessageData {
213
+ let context = ToolMessageContext {
265
214
document_id,
266
215
document,
267
216
input : & self . message_handlers . input_preprocessor_message_handler ,
@@ -270,11 +219,46 @@ impl Dispatcher {
270
219
preferences : & self . message_handlers . preferences_message_handler ,
271
220
} ;
272
221
273
- self . message_handlers . tool_message_handler . process_message ( message, & mut queue, data ) ;
222
+ self . message_handlers . tool_message_handler . process_message ( message, & mut queue, context ) ;
274
223
}
275
224
Message :: Workspace ( message) => {
276
225
self . message_handlers . workspace_message_handler . process_message ( message, & mut queue, ( ) ) ;
277
226
}
227
+ Message :: NoOp => { }
228
+ Message :: Batched { messages } => {
229
+ messages. iter ( ) . for_each ( |message| self . handle_message ( message. to_owned ( ) , false ) ) ;
230
+ }
231
+ Message :: StartBuffer => {
232
+ self . buffered_queue = Some ( std:: mem:: take ( & mut self . message_queues ) ) ;
233
+ }
234
+ Message :: EndBuffer { render_metadata } => {
235
+ // Assign the message queue to the currently buffered queue
236
+ if let Some ( buffered_queue) = self . buffered_queue . take ( ) {
237
+ self . cleanup_queues ( false ) ;
238
+ assert ! ( self . message_queues. is_empty( ) , "message queues are always empty when ending a buffer" ) ;
239
+ self . message_queues = buffered_queue;
240
+ } ;
241
+
242
+ let graphene_std:: renderer:: RenderMetadata {
243
+ upstream_footprints : footprints,
244
+ local_transforms,
245
+ first_instance_source_id,
246
+ click_targets,
247
+ clip_targets,
248
+ } = render_metadata;
249
+
250
+ // Run these update state messages immediately
251
+ let messages = [
252
+ DocumentMessage :: UpdateUpstreamTransforms {
253
+ upstream_footprints : footprints,
254
+ local_transforms,
255
+ first_instance_source_id,
256
+ } ,
257
+ DocumentMessage :: UpdateClickTargets { click_targets } ,
258
+ DocumentMessage :: UpdateClipTargets { clip_targets } ,
259
+ ] ;
260
+ Self :: schedule_execution ( & mut self . message_queues , false , messages. map ( Message :: from) ) ;
261
+ }
278
262
}
279
263
280
264
// If there are child messages, append the queue to the list of queues
0 commit comments