20
20
21
21
#include < components/cursor.hpp>
22
22
#include < events/event_processor.hpp>
23
- #include < ghostuser/tasking/lock.hpp>
24
23
#include < input/input_receiver.hpp>
25
24
#include < interface/component_registry.hpp>
26
25
26
+ #include < ghostuser/tasking/lock.hpp>
27
+ #include < ghostuser/ui/interface_specification.hpp>
28
+
27
29
#include < windowserver.hpp>
28
30
#include < components/window.hpp>
29
31
#include < components/button.hpp>
30
32
#include < components/text/text_field.hpp>
31
33
#include < components/label.hpp>
34
+ #include < components/canvas.hpp>
32
35
33
36
#include < events/event.hpp>
34
37
#include < events/mouse_event.hpp>
@@ -83,7 +86,7 @@ void event_processor_t::process() {
83
86
buf_response.message = 0 ;
84
87
85
88
// process the actual action
86
- process_command ((g_ui_message_header*) G_MESSAGE_CONTENT (request_buffer), buf_response);
89
+ process_command (message-> sender , (g_ui_message_header*) G_MESSAGE_CONTENT (request_buffer), buf_response);
87
90
88
91
// add generated response to queue
89
92
if (buf_response.message != 0 ) {
@@ -98,7 +101,7 @@ void event_processor_t::process() {
98
101
/* *
99
102
*
100
103
*/
101
- void event_processor_t::process_command (g_ui_message_header* request_header, command_message_response_t & response_out) {
104
+ void event_processor_t::process_command (g_tid sender_tid, g_ui_message_header* request_header, command_message_response_t & response_out) {
102
105
103
106
if (request_header->id == G_UI_PROTOCOL_CREATE_COMPONENT) {
104
107
component_t * component = 0 ;
@@ -112,16 +115,24 @@ void event_processor_t::process_command(g_ui_message_header* request_header, com
112
115
component = new window_t ();
113
116
windowserver_t::instance ()->screen ->addChild (component);
114
117
break ;
118
+
115
119
case G_UI_COMPONENT_TYPE_LABEL:
116
120
component = new label_t ();
117
121
break ;
122
+
118
123
case G_UI_COMPONENT_TYPE_BUTTON:
119
124
component = new button_t ();
120
125
break ;
126
+
121
127
case G_UI_COMPONENT_TYPE_TEXTFIELD:
122
128
component = new text_field_t ();
123
129
break ;
124
130
131
+ case G_UI_COMPONENT_TYPE_CANVAS: {
132
+ component = new canvas_t (sender_tid);
133
+ break ;
134
+ }
135
+
125
136
default :
126
137
klog (" don't know how to create a component of type %i" , create_request->type );
127
138
break ;
@@ -130,6 +141,7 @@ void event_processor_t::process_command(g_ui_message_header* request_header, com
130
141
// register the component
131
142
if (component != 0 ) {
132
143
component_id = component_registry_t::add (component);
144
+
133
145
// apply default properties
134
146
component->setBounds (g_rectangle (100 , 100 , 200 , 80 ));
135
147
}
@@ -319,6 +331,39 @@ void event_processor_t::process_command(g_ui_message_header* request_header, com
319
331
response_out.message = response;
320
332
response_out.length = sizeof (g_ui_component_get_title_response);
321
333
334
+ } else if (request_header->id == G_UI_PROTOCOL_CANVAS_ACK_BUFFER_REQUEST) {
335
+ g_ui_component_canvas_ack_buffer_request* request = (g_ui_component_canvas_ack_buffer_request*) request_header;
336
+ component_t * component = component_registry_t::get (request->id );
337
+
338
+ canvas_t * canvas = (canvas_t *) component;
339
+ canvas->acknowledgeCurrentBuffer ();
340
+
341
+ } else if (request_header->id == G_UI_PROTOCOL_CANVAS_BLIT) {
342
+ g_ui_component_canvas_ack_buffer_request* request = (g_ui_component_canvas_ack_buffer_request*) request_header;
343
+ component_t * component = component_registry_t::get (request->id );
344
+
345
+ canvas_t * canvas = (canvas_t *) component;
346
+ canvas->blit ();
347
+
348
+ } else if (request_header->id == G_UI_PROTOCOL_REGISTER_DESKTOP_CANVAS) {
349
+ g_ui_register_desktop_canvas_request* request = (g_ui_register_desktop_canvas_request*) request_header;
350
+ component_t * component = component_registry_t::get (request->canvas_id );
351
+
352
+ // create response message
353
+ g_ui_register_desktop_canvas_response* response = new g_ui_register_desktop_canvas_response;
354
+ if (component == 0 ) {
355
+ response->status = G_UI_PROTOCOL_FAIL;
356
+ } else {
357
+ response->status = G_UI_PROTOCOL_SUCCESS;
358
+
359
+ canvas_t * canvas = (canvas_t *) component;
360
+ screen_t * screen = windowserver_t::instance ()->screen ;
361
+ screen->addChild (canvas);
362
+ canvas->setBounds (screen->getBounds ());
363
+ }
364
+
365
+ response_out.message = response;
366
+ response_out.length = sizeof (g_ui_register_desktop_canvas_response);
322
367
}
323
368
324
369
}
0 commit comments