Skip to content

Commit

Permalink
GUACAMOLE-377: Restore good ol' guac_common_surface and guac_common_c…
Browse files Browse the repository at this point in the history
…ursor for use by terminal.
  • Loading branch information
mike-jumper committed Sep 18, 2024
1 parent 04becb0 commit 0197863
Show file tree
Hide file tree
Showing 22 changed files with 4,687 additions and 2 deletions.
18 changes: 16 additions & 2 deletions src/common/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,34 @@ SUBDIRS = . tests

noinst_HEADERS = \
common/io.h \
common/blank_cursor.h \
common/clipboard.h \
common/cursor.h \
common/defaults.h \
common/dot_cursor.h \
common/ibar_cursor.h \
common/iconv.h \
common/json.h \
common/list.h \
common/string.h
common/pointer_cursor.h \
common/rect.h \
common/string.h \
common/surface.h

libguac_common_la_SOURCES = \
io.c \
blank_cursor.c \
clipboard.c \
cursor.c \
dot_cursor.c \
ibar_cursor.c \
iconv.c \
json.c \
list.c \
string.c
pointer_cursor.c \
rect.c \
string.c \
surface.c

libguac_common_la_CFLAGS = \
-Werror -Wall -pedantic \
Expand Down
75 changes: 75 additions & 0 deletions src/common/blank_cursor.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

#include "config.h"

#include <cairo/cairo.h>
#include <guacamole/client.h>
#include <guacamole/layer.h>
#include <guacamole/protocol.h>
#include <guacamole/socket.h>
#include <guacamole/user.h>

/* Dimensions */
const int guac_common_blank_cursor_width = 1;
const int guac_common_blank_cursor_height = 1;

/* Format */
const cairo_format_t guac_common_blank_cursor_format = CAIRO_FORMAT_ARGB32;
const int guac_common_blank_cursor_stride = 4;

/* Embedded blank cursor graphic */
unsigned char guac_common_blank_cursor[] = {

0x00,0x00,0x00,0x00

};

void guac_common_set_blank_cursor(guac_user* user) {

guac_client* client = user->client;
guac_socket* socket = user->socket;

/* Draw to buffer */
guac_layer* cursor = guac_client_alloc_buffer(client);

cairo_surface_t* graphic = cairo_image_surface_create_for_data(
guac_common_blank_cursor,
guac_common_blank_cursor_format,
guac_common_blank_cursor_width,
guac_common_blank_cursor_height,
guac_common_blank_cursor_stride);

guac_user_stream_png(user, 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_common_blank_cursor_width,
guac_common_blank_cursor_height);

/* Free buffer */
guac_client_free_buffer(client, cursor);

guac_client_log(client, GUAC_LOG_DEBUG,
"Client cursor image set to generic transparent (blank) cursor.");

}

64 changes: 64 additions & 0 deletions src/common/common/blank_cursor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

#ifndef GUAC_COMMON_BLANK_CURSOR_H
#define GUAC_COMMON_BLANK_CURSOR_H

#include "config.h"

#include <cairo/cairo.h>
#include <guacamole/user.h>

/**
* Width of the embedded transparent (blank) mouse cursor graphic.
*/
extern const int guac_common_blank_cursor_width;

/**
* Height of the embedded transparent (blank) mouse cursor graphic.
*/
extern const int guac_common_blank_cursor_height;

/**
* Number of bytes in each row of the embedded transparent (blank) mouse cursor
* graphic.
*/
extern const int guac_common_blank_cursor_stride;

/**
* The Cairo grapic format of the transparent (blank) mouse cursor graphic.
*/
extern const cairo_format_t guac_common_blank_cursor_format;

/**
* Embedded transparent (blank) mouse cursor graphic.
*/
extern unsigned char guac_common_blank_cursor[];

/**
* Sets the cursor of the remote display to the embedded transparent (blank)
* cursor graphic.
*
* @param user
* The guac_user to send the cursor to.
*/
void guac_common_set_blank_cursor(guac_user* user);

#endif

Loading

0 comments on commit 0197863

Please sign in to comment.