Automatically fit to screen.

This commit is contained in:
Michael Jumper 2012-10-23 01:38:10 -07:00
parent 3251976799
commit 4d007e7e78
3 changed files with 41 additions and 36 deletions

View File

@ -194,7 +194,9 @@ typedef struct ssh_guac_terminal_color {
extern const ssh_guac_terminal_color ssh_guac_terminal_palette[16]; extern const ssh_guac_terminal_color ssh_guac_terminal_palette[16];
ssh_guac_terminal* ssh_guac_terminal_create(guac_client* client); ssh_guac_terminal* ssh_guac_terminal_create(guac_client* client,
int width, int height);
void ssh_guac_terminal_free(ssh_guac_terminal* term); void ssh_guac_terminal_free(ssh_guac_terminal* term);
int ssh_guac_terminal_write(ssh_guac_terminal* term, const char* c, int size); int ssh_guac_terminal_write(ssh_guac_terminal* term, const char* c, int size);

View File

@ -109,7 +109,8 @@ int guac_client_init(guac_client* client, int argc, char** argv) {
guac_socket* socket = client->socket; guac_socket* socket = client->socket;
ssh_guac_client_data* client_data = malloc(sizeof(ssh_guac_client_data)); ssh_guac_client_data* client_data = malloc(sizeof(ssh_guac_client_data));
ssh_guac_terminal* term = ssh_guac_terminal_create(client); ssh_guac_terminal* term = ssh_guac_terminal_create(client,
client->info.optimal_width, client->info.optimal_height);
/* Init client data */ /* Init client data */
client->data = client_data; client->data = client_data;

View File

@ -73,7 +73,8 @@ const ssh_guac_terminal_color ssh_guac_terminal_palette[16] = {
}; };
ssh_guac_terminal* ssh_guac_terminal_create(guac_client* client) { ssh_guac_terminal* ssh_guac_terminal_create(guac_client* client,
int width, int height) {
int row, col; int row, col;
@ -95,39 +96,6 @@ ssh_guac_terminal* ssh_guac_terminal_create(guac_client* client) {
term->glyph_stroke = guac_client_alloc_buffer(client); term->glyph_stroke = guac_client_alloc_buffer(client);
term->filled_glyphs = guac_client_alloc_buffer(client); term->filled_glyphs = guac_client_alloc_buffer(client);
term->cursor_row = 0;
term->cursor_col = 0;
term->cursor_layer = guac_client_alloc_layer(client);
term->term_width = 100;
term->term_height = 37;
term->char_handler = ssh_guac_terminal_echo;
term->scroll_start = 0;
term->scroll_end = term->term_height - 1;
/* Create scrollback buffer */
term->scrollback = malloc(term->term_height * sizeof(ssh_guac_terminal_char*));
/* Init buffer */
for (row = 0; row < term->term_height; row++) {
/* Create row */
ssh_guac_terminal_char* current_row =
term->scrollback[row] = malloc(term->term_width * sizeof(ssh_guac_terminal_char));
/* Init row */
for (col = 0; col < term->term_width; col++) {
/* Empty character, default colors */
current_row[col].value = '\0';
current_row[col].foreground = term->default_foreground;
current_row[col].background = term->default_background;
}
}
/* Get font */ /* Get font */
term->font_desc = pango_font_description_new(); term->font_desc = pango_font_description_new();
pango_font_description_set_family(term->font_desc, "monospace"); pango_font_description_set_family(term->font_desc, "monospace");
@ -156,6 +124,40 @@ ssh_guac_terminal* ssh_guac_terminal_create(guac_client* client) {
(pango_font_metrics_get_descent(metrics) (pango_font_metrics_get_descent(metrics)
+ pango_font_metrics_get_ascent(metrics)) / PANGO_SCALE; + pango_font_metrics_get_ascent(metrics)) / PANGO_SCALE;
term->cursor_row = 0;
term->cursor_col = 0;
term->cursor_layer = guac_client_alloc_layer(client);
term->term_width = width / term->char_width;
term->term_height = height / term->char_height;
term->char_handler = ssh_guac_terminal_echo;
term->scroll_start = 0;
term->scroll_end = term->term_height - 1;
/* Create scrollback buffer */
term->scrollback = malloc(term->term_height * sizeof(ssh_guac_terminal_char*));
/* Init buffer */
for (row = 0; row < term->term_height; row++) {
/* Create row */
ssh_guac_terminal_char* current_row =
term->scrollback[row] = malloc(term->term_width * sizeof(ssh_guac_terminal_char));
/* Init row */
for (col = 0; col < term->term_width; col++) {
/* Empty character, default colors */
current_row[col].value = '\0';
current_row[col].foreground = term->default_foreground;
current_row[col].background = term->default_background;
}
}
/* Clear with background color */ /* Clear with background color */
ssh_guac_terminal_clear(term, ssh_guac_terminal_clear(term,
0, 0, term->term_height, term->term_width, 0, 0, term->term_height, term->term_width,