Embed format information along with default cursor image data. Refactor default curso...
[libguac-client-rdp.git] / src / default_pointer.c
index c63c149..b41ef2a 100644 (file)
  *
  * ***** END LICENSE BLOCK ***** */
 
+#include <cairo/cairo.h>
+#include <guacamole/client.h>
+#include <guacamole/protocol.h>
+#include <guacamole/socket.h>
+
 /* Macros for prettying up the embedded image. */
 #define X 0x00,0x00,0x00,0xFF
 #define O 0xFF,0xFF,0xFF,0xFF
 #define _ 0x00,0x00,0x00,0x00
 
+/* Dimensions */
+const int guac_rdp_default_pointer_width  = 11;
+const int guac_rdp_default_pointer_height = 16;
+
+/* Format */
+const cairo_format_t guac_rdp_default_pointer_format = CAIRO_FORMAT_ARGB32;
+const int guac_rdp_default_pointer_stride = 44;
+
 /* Embedded pointer graphic */
 unsigned char guac_rdp_default_pointer[] = {
 
@@ -62,3 +75,32 @@ unsigned char guac_rdp_default_pointer[] = {
 
 };
 
+
+void guac_rdp_pointer_set_default(guac_client* client) {
+
+    guac_socket* socket = client->socket;
+
+    /* Draw to buffer */
+    guac_layer* cursor = guac_client_alloc_buffer(client);
+
+    cairo_surface_t* graphic = cairo_image_surface_create_for_data(
+            guac_rdp_default_pointer,
+            guac_rdp_default_pointer_format,
+            guac_rdp_default_pointer_width,
+            guac_rdp_default_pointer_height,
+            guac_rdp_default_pointer_stride);
+
+    guac_protocol_send_png(socket, GUAC_COMP_SRC, cursor, 0, 0, graphic);
+    cairo_surface_destroy(graphic);
+
+    /* Set cursor */
+    guac_protocol_send_cursor(socket, 0, 0, cursor,
+            0, 0,
+            guac_rdp_default_pointer_width,
+            guac_rdp_default_pointer_height);
+
+    /* Free buffer */
+    guac_client_free_buffer(client, cursor);
+
+}
+