GUACAMOLE-470: Add support for configurable default palette.
Add support for configuring a default palette for a terminal display. When the default palette is specified during display creation, that palette is used instead of GUAC_TERMINAL_INITIAL_PALETTE when resetting the display palette.
This commit is contained in:
parent
b61a6ab758
commit
f8b35078fc
@ -246,7 +246,8 @@ int __guac_terminal_set(guac_terminal_display* display, int row, int col, int co
|
|||||||
|
|
||||||
guac_terminal_display* guac_terminal_display_alloc(guac_client* client,
|
guac_terminal_display* guac_terminal_display_alloc(guac_client* client,
|
||||||
const char* font_name, int font_size, int dpi,
|
const char* font_name, int font_size, int dpi,
|
||||||
guac_terminal_color* foreground, guac_terminal_color* background) {
|
guac_terminal_color* foreground, guac_terminal_color* background,
|
||||||
|
const guac_terminal_color (*palette)[256]) {
|
||||||
|
|
||||||
PangoFontMap* font_map;
|
PangoFontMap* font_map;
|
||||||
PangoFont* font;
|
PangoFont* font;
|
||||||
@ -294,6 +295,7 @@ guac_terminal_display* guac_terminal_display_alloc(guac_client* client,
|
|||||||
|
|
||||||
display->default_foreground = display->glyph_foreground = *foreground;
|
display->default_foreground = display->glyph_foreground = *foreground;
|
||||||
display->default_background = display->glyph_background = *background;
|
display->default_background = display->glyph_background = *background;
|
||||||
|
display->default_palette = palette;
|
||||||
|
|
||||||
/* Calculate character dimensions */
|
/* Calculate character dimensions */
|
||||||
display->char_width =
|
display->char_width =
|
||||||
@ -317,6 +319,9 @@ guac_terminal_display* guac_terminal_display_alloc(guac_client* client,
|
|||||||
|
|
||||||
void guac_terminal_display_free(guac_terminal_display* display) {
|
void guac_terminal_display_free(guac_terminal_display* display) {
|
||||||
|
|
||||||
|
/* Free default palette. */
|
||||||
|
free((void*) display->default_palette);
|
||||||
|
|
||||||
/* Free operations buffers */
|
/* Free operations buffers */
|
||||||
free(display->operations);
|
free(display->operations);
|
||||||
|
|
||||||
@ -328,6 +333,12 @@ void guac_terminal_display_free(guac_terminal_display* display) {
|
|||||||
void guac_terminal_display_reset_palette(guac_terminal_display* display) {
|
void guac_terminal_display_reset_palette(guac_terminal_display* display) {
|
||||||
|
|
||||||
/* Reinitialize palette with default values */
|
/* Reinitialize palette with default values */
|
||||||
|
if (display->default_palette) {
|
||||||
|
memcpy(display->palette, *display->default_palette,
|
||||||
|
sizeof(GUAC_TERMINAL_INITIAL_PALETTE));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(display->palette, GUAC_TERMINAL_INITIAL_PALETTE,
|
memcpy(display->palette, GUAC_TERMINAL_INITIAL_PALETTE,
|
||||||
sizeof(GUAC_TERMINAL_INITIAL_PALETTE));
|
sizeof(GUAC_TERMINAL_INITIAL_PALETTE));
|
||||||
|
|
||||||
|
@ -332,7 +332,7 @@ guac_terminal* guac_terminal_create(guac_client* client,
|
|||||||
term->display = guac_terminal_display_alloc(client,
|
term->display = guac_terminal_display_alloc(client,
|
||||||
font_name, font_size, dpi,
|
font_name, font_size, dpi,
|
||||||
&default_char.attributes.foreground,
|
&default_char.attributes.foreground,
|
||||||
&default_char.attributes.background);
|
&default_char.attributes.background, NULL);
|
||||||
|
|
||||||
/* Fail if display init failed */
|
/* Fail if display init failed */
|
||||||
if (term->display == NULL) {
|
if (term->display == NULL) {
|
||||||
|
@ -138,6 +138,12 @@ typedef struct guac_terminal_display {
|
|||||||
*/
|
*/
|
||||||
guac_terminal_color palette[256];
|
guac_terminal_color palette[256];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default palette. Use GUAC_TERMINAL_INITIAL_PALETTE if null.
|
||||||
|
* Must free on destruction if not null.
|
||||||
|
*/
|
||||||
|
const guac_terminal_color (*default_palette)[256];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default foreground color for all glyphs.
|
* Default foreground color for all glyphs.
|
||||||
*/
|
*/
|
||||||
@ -215,7 +221,8 @@ typedef struct guac_terminal_display {
|
|||||||
*/
|
*/
|
||||||
guac_terminal_display* guac_terminal_display_alloc(guac_client* client,
|
guac_terminal_display* guac_terminal_display_alloc(guac_client* client,
|
||||||
const char* font_name, int font_size, int dpi,
|
const char* font_name, int font_size, int dpi,
|
||||||
guac_terminal_color* foreground, guac_terminal_color* background);
|
guac_terminal_color* foreground, guac_terminal_color* background,
|
||||||
|
const guac_terminal_color (*palette)[256]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Frees the given display.
|
* Frees the given display.
|
||||||
@ -224,7 +231,7 @@ void guac_terminal_display_free(guac_terminal_display* display);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Resets the palette of the given display to the initial, default color
|
* Resets the palette of the given display to the initial, default color
|
||||||
* values, as defined by GUAC_TERMINAL_INITIAL_PALETTE.
|
* values, as defined by default_palette or GUAC_TERMINAL_INITIAL_PALETTE.
|
||||||
*
|
*
|
||||||
* @param display
|
* @param display
|
||||||
* The display to reset.
|
* The display to reset.
|
||||||
|
Loading…
Reference in New Issue
Block a user