2020
2121#include < components/cursor.hpp>
2222#include < events/event_processor.hpp>
23- #include < ghostuser/tasking/lock.hpp>
2423#include < input/input_receiver.hpp>
2524#include < interface/component_registry.hpp>
2625
26+ #include < ghostuser/tasking/lock.hpp>
27+ #include < ghostuser/ui/interface_specification.hpp>
28+
2729#include < windowserver.hpp>
2830#include < components/window.hpp>
2931#include < components/button.hpp>
3032#include < components/text/text_field.hpp>
3133#include < components/label.hpp>
34+ #include < components/canvas.hpp>
3235
3336#include < events/event.hpp>
3437#include < events/mouse_event.hpp>
@@ -83,7 +86,7 @@ void event_processor_t::process() {
8386 buf_response.message = 0 ;
8487
8588 // 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);
8790
8891 // add generated response to queue
8992 if (buf_response.message != 0 ) {
@@ -98,7 +101,7 @@ void event_processor_t::process() {
98101/* *
99102 *
100103 */
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) {
102105
103106 if (request_header->id == G_UI_PROTOCOL_CREATE_COMPONENT ) {
104107 component_t * component = 0 ;
@@ -112,16 +115,24 @@ void event_processor_t::process_command(g_ui_message_header* request_header, com
112115 component = new window_t ();
113116 windowserver_t::instance ()->screen ->addChild (component);
114117 break ;
118+
115119 case G_UI_COMPONENT_TYPE_LABEL :
116120 component = new label_t ();
117121 break ;
122+
118123 case G_UI_COMPONENT_TYPE_BUTTON :
119124 component = new button_t ();
120125 break ;
126+
121127 case G_UI_COMPONENT_TYPE_TEXTFIELD :
122128 component = new text_field_t ();
123129 break ;
124130
131+ case G_UI_COMPONENT_TYPE_CANVAS : {
132+ component = new canvas_t (sender_tid);
133+ break ;
134+ }
135+
125136 default :
126137 klog (" don't know how to create a component of type %i" , create_request->type );
127138 break ;
@@ -130,6 +141,7 @@ void event_processor_t::process_command(g_ui_message_header* request_header, com
130141 // register the component
131142 if (component != 0 ) {
132143 component_id = component_registry_t::add (component);
144+
133145 // apply default properties
134146 component->setBounds (g_rectangle (100 , 100 , 200 , 80 ));
135147 }
@@ -319,6 +331,39 @@ void event_processor_t::process_command(g_ui_message_header* request_header, com
319331 response_out.message = response;
320332 response_out.length = sizeof (g_ui_component_get_title_response);
321333
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);
322367 }
323368
324369}
0 commit comments