GUAC-803: It's a handle, not a box. Well, OK, it is a technically also a box... but that's not the point.

This commit is contained in:
Michael Jumper 2015-01-28 15:41:12 -08:00
parent 65e0265fa0
commit 1218a18bf4
2 changed files with 40 additions and 39 deletions

View File

@ -53,7 +53,7 @@ guac_terminal_scrollbar* guac_terminal_scrollbar_alloc(guac_client* client,
/* Allocate and init layers */ /* Allocate and init layers */
scrollbar->container = guac_client_alloc_layer(client); scrollbar->container = guac_client_alloc_layer(client);
scrollbar->box = guac_client_alloc_layer(client); scrollbar->handle = guac_client_alloc_layer(client);
/* Reposition and resize to fit parent */ /* Reposition and resize to fit parent */
guac_terminal_scrollbar_parent_resized(scrollbar, guac_terminal_scrollbar_parent_resized(scrollbar,
@ -66,7 +66,7 @@ guac_terminal_scrollbar* guac_terminal_scrollbar_alloc(guac_client* client,
void guac_terminal_scrollbar_free(guac_terminal_scrollbar* scrollbar) { void guac_terminal_scrollbar_free(guac_terminal_scrollbar* scrollbar) {
/* Free layers */ /* Free layers */
guac_client_free_layer(scrollbar->client, scrollbar->box); guac_client_free_layer(scrollbar->client, scrollbar->handle);
guac_client_free_layer(scrollbar->client, scrollbar->container); guac_client_free_layer(scrollbar->client, scrollbar->container);
/* Free scrollbar */ /* Free scrollbar */
@ -75,13 +75,13 @@ void guac_terminal_scrollbar_free(guac_terminal_scrollbar* scrollbar) {
} }
/** /**
* Updates the position and size of the scrollbar inner box relative to the * Updates the position and size of the scrollbar handle relative to the
* current scrollbar value, bounds, and parent layer dimensions. * current scrollbar value, bounds, and parent layer dimensions.
* *
* @param scrollbar * @param scrollbar
* The scrollbar whose inner box should be updated. * The scrollbar whose handle should be updated.
*/ */
static void __update_box(guac_terminal_scrollbar* scrollbar) { static void __update_handle(guac_terminal_scrollbar* scrollbar) {
guac_socket* socket = scrollbar->client->socket; guac_socket* socket = scrollbar->client->socket;
@ -91,35 +91,35 @@ static void __update_box(guac_terminal_scrollbar* scrollbar) {
int region_size = scrollbar->max - scrollbar->min; int region_size = scrollbar->max - scrollbar->min;
/* Calculate box dimensions */ /* Calculate handle dimensions */
int box_width = GUAC_TERMINAL_SCROLLBAR_WIDTH - GUAC_TERMINAL_SCROLLBAR_PADDING*2; int handle_width = GUAC_TERMINAL_SCROLLBAR_WIDTH - GUAC_TERMINAL_SCROLLBAR_PADDING*2;
int box_height = GUAC_TERMINAL_SCROLLBAR_MIN_HEIGHT; int handle_height = GUAC_TERMINAL_SCROLLBAR_MIN_HEIGHT;
/* Size box relative to visible area */ /* Size handle relative to visible area */
int padded_container_height = (scrollbar->parent_height - GUAC_TERMINAL_SCROLLBAR_PADDING*2); int padded_container_height = (scrollbar->parent_height - GUAC_TERMINAL_SCROLLBAR_PADDING*2);
int proportional_height = padded_container_height * scrollbar->visible_area / (region_size + scrollbar->visible_area); int proportional_height = padded_container_height * scrollbar->visible_area / (region_size + scrollbar->visible_area);
if (proportional_height > box_height) if (proportional_height > handle_height)
box_height = proportional_height; handle_height = proportional_height;
/* Calculate box position and dimensions */ /* Calculate handle position and dimensions */
int box_x = GUAC_TERMINAL_SCROLLBAR_PADDING; int handle_x = GUAC_TERMINAL_SCROLLBAR_PADDING;
int box_y = GUAC_TERMINAL_SCROLLBAR_PADDING int handle_y = GUAC_TERMINAL_SCROLLBAR_PADDING
+ (padded_container_height - box_height) * (scrollbar->value - scrollbar->min) / region_size; + (padded_container_height - handle_height) * (scrollbar->value - scrollbar->min) / region_size;
/* Reposition box relative to container and current value */ /* Reposition handle relative to container and current value */
guac_protocol_send_move(socket, guac_protocol_send_move(socket,
scrollbar->box, scrollbar->container, scrollbar->handle, scrollbar->container,
box_x, box_y, 0); handle_x, handle_y, 0);
/* Resize box relative to scrollable area */ /* Resize handle relative to scrollable area */
guac_protocol_send_size(socket, scrollbar->box, guac_protocol_send_size(socket, scrollbar->handle,
box_width, box_height); handle_width, handle_height);
/* Fill box with solid color */ /* Fill handle with solid color */
guac_protocol_send_rect(socket, scrollbar->box, 0, 0, box_width, box_height); guac_protocol_send_rect(socket, scrollbar->handle, 0, 0, handle_width, handle_height);
guac_protocol_send_cfill(socket, GUAC_COMP_SRC, scrollbar->box, guac_protocol_send_cfill(socket, GUAC_COMP_SRC, scrollbar->handle,
0x80, 0x80, 0x80, 0xFF); 0x80, 0x80, 0x80, 0xFF);
guac_protocol_send_cstroke(socket, GUAC_COMP_OVER, scrollbar->box, guac_protocol_send_cstroke(socket, GUAC_COMP_OVER, scrollbar->handle,
GUAC_LINE_CAP_SQUARE, GUAC_LINE_JOIN_MITER, 2, GUAC_LINE_CAP_SQUARE, GUAC_LINE_JOIN_MITER, 2,
0xA0, 0xA0, 0xA0, 0xFF); 0xA0, 0xA0, 0xA0, 0xFF);
@ -138,8 +138,8 @@ void guac_terminal_scrollbar_set_bounds(guac_terminal_scrollbar* scrollbar,
scrollbar->min = min; scrollbar->min = min;
scrollbar->max = max; scrollbar->max = max;
/* Update box position and size */ /* Update handle position and size */
__update_box(scrollbar); __update_handle(scrollbar);
} }
@ -155,8 +155,8 @@ void guac_terminal_scrollbar_set_value(guac_terminal_scrollbar* scrollbar,
/* Update value */ /* Update value */
scrollbar->value = value; scrollbar->value = value;
/* Update box position and size */ /* Update handle position and size */
__update_box(scrollbar); __update_handle(scrollbar);
} }
@ -191,8 +191,8 @@ void guac_terminal_scrollbar_parent_resized(guac_terminal_scrollbar* scrollbar,
scrollbar->parent_height = parent_height; scrollbar->parent_height = parent_height;
scrollbar->visible_area = visible_area; scrollbar->visible_area = visible_area;
/* Update box position and size */ /* Update handle position and size */
__update_box(scrollbar); __update_handle(scrollbar);
} }

View File

@ -34,19 +34,20 @@
#define GUAC_TERMINAL_SCROLLBAR_WIDTH 16 #define GUAC_TERMINAL_SCROLLBAR_WIDTH 16
/** /**
* The number of pixels between the inner box of the scrollbar and the outer * The number of pixels between the draggable handle of the scrollbar and the
* box. * boundary of the containing layer.
*/ */
#define GUAC_TERMINAL_SCROLLBAR_PADDING 2 #define GUAC_TERMINAL_SCROLLBAR_PADDING 2
/** /**
* The minimum height of the inner box of the scrollbar, in pixels. * The minimum height of the draggable handle of the scrollbar, in pixels.
*/ */
#define GUAC_TERMINAL_SCROLLBAR_MIN_HEIGHT 64 #define GUAC_TERMINAL_SCROLLBAR_MIN_HEIGHT 64
/** /**
* A scrollbar, made up of an outer and inner box, which represents its value * A scrollbar, made up of a containing layer and inner draggable handle. The
* graphically by the relative position and size of the inner box. * position of the handle within the layer represents the value of the
* scrollbar.
*/ */
typedef struct guac_terminal_scrollbar { typedef struct guac_terminal_scrollbar {
@ -76,10 +77,10 @@ typedef struct guac_terminal_scrollbar {
guac_layer* container; guac_layer* container;
/** /**
* The movable box within the scrollbar, representing the current scroll * The draggable handle within the scrollbar, representing the current
* value. * scroll value.
*/ */
guac_layer* box; guac_layer* handle;
/** /**
* The minimum scroll value. * The minimum scroll value.