Restructured code to resolve scrollbar resizing bug where the scrollbar would clip off the side of the terminal. This fix also resolves the issue where the text would blur at certain intervals of resizing the window.
@@ -377,15 +377,13 @@ static void calculate_rows_and_columns(guac_terminal* term,
*columns = available_width / char_width;
/* Keep height within predefined maximum */
- if (*rows > GUAC_TERMINAL_MAX_ROWS) {
+ if (*rows > GUAC_TERMINAL_MAX_ROWS)
*rows = GUAC_TERMINAL_MAX_ROWS;
- }
/* Keep width within predefined maximum */
- if (*columns > GUAC_TERMINAL_MAX_COLUMNS) {
+ if (*columns > GUAC_TERMINAL_MAX_COLUMNS)
*columns = GUAC_TERMINAL_MAX_COLUMNS;
}
-}
/**
* Calculate the available height and width in pixels of the terminal for text
@@ -415,8 +413,17 @@ static void calculate_height_and_width(guac_terminal* term,
int char_width = term->display->char_width;
int char_height = term->display->char_height;
- *height = rows * char_height + 2 * margin;
- *width = columns * char_width + GUAC_TERMINAL_SCROLLBAR_WIDTH + 2 * margin;
+ /* Recalculate height if max rows reached */
+ if (rows == GUAC_TERMINAL_MAX_ROWS) {
+ int available_height = GUAC_TERMINAL_MAX_ROWS * char_height;
+ *height = available_height + 2 * margin;
+ }
+
+ /* Recalculate width if max columns reached */
+ if (columns == GUAC_TERMINAL_MAX_COLUMNS) {
+ int available_width = GUAC_TERMINAL_MAX_COLUMNS * char_width;
+ *width = available_width + GUAC_TERMINAL_SCROLLBAR_WIDTH + 2 * margin;
+ }
}
guac_terminal* guac_terminal_create(guac_client* client,
@@ -504,10 +511,11 @@ guac_terminal* guac_terminal_create(guac_client* client,
int rows, columns;
calculate_rows_and_columns(term, height, width, &rows, &columns);
- /* Calculate available text display area in pixels */
- int available_height, available_width;
+ /* Calculate available display area in pixels */
+ int adjusted_height = height;
+ int adjusted_width = width;
calculate_height_and_width(term, rows, columns,
- &available_height, &available_width);
+ &adjusted_height, &adjusted_width);
/* Set size of available screen area */
term->outer_height = height;
@@ -518,8 +526,8 @@ guac_terminal* guac_terminal_create(guac_client* client,
term->term_width = columns;
/* Set pixel size */
- term->height = available_height;
- term->width = available_width;
+ term->height = adjusted_height;
+ term->width = adjusted_width;
/* Open STDIN pipe */
if (pipe(term->stdin_pipe_fd)) {
@@ -1462,18 +1470,19 @@ int guac_terminal_resize(guac_terminal* terminal, int width, int height) {
int rows, columns;
calculate_rows_and_columns(terminal, height, width, &rows, &columns);
- /* Calculate available text display area in pixels */
- int available_height, available_width;
+ /* Calculate available display area in pixels */
+ int adjusted_height = height;
+ int adjusted_width = width;
calculate_height_and_width(terminal, rows, columns,
- &available_height, &available_width);
+ &adjusted_height, &adjusted_width);
/* Set size of available screen area */
terminal->outer_height = height;
terminal->outer_width = width;
/* Set pixel size */
- terminal->height = available_height;
- terminal->width = available_width;
+ terminal->height = adjusted_height;
+ terminal->width = adjusted_width;
/* Resize default layer to given pixel dimensions */
guac_terminal_repaint_default_layer(terminal, client->socket);
