Commit 007c44c5c43d90d04c1b6e4e22fb56d74a5bbda2
1 parent
27a0ca65
Exists in
master
and in
1 other branch
Updating font-chooser widget.
Showing
1 changed file
with
81 additions
and
25 deletions
Show diff stats
src/dialogs/font/chooser.c
| @@ -37,6 +37,7 @@ | @@ -37,6 +37,7 @@ | ||
| 37 | #include "../private.h" | 37 | #include "../private.h" |
| 38 | #include <v3270/dialogs.h> | 38 | #include <v3270/dialogs.h> |
| 39 | #include <v3270/settings.h> | 39 | #include <v3270/settings.h> |
| 40 | + #include <v3270/toggle.h> | ||
| 40 | #include <lib3270/log.h> | 41 | #include <lib3270/log.h> |
| 41 | #include <terminal.h> | 42 | #include <terminal.h> |
| 42 | 43 | ||
| @@ -55,11 +56,18 @@ | @@ -55,11 +56,18 @@ | ||
| 55 | 56 | ||
| 56 | GtkWidget * font_list; | 57 | GtkWidget * font_list; |
| 57 | GtkWidget * preview; | 58 | GtkWidget * preview; |
| 59 | + GtkToggleButton * bold; | ||
| 58 | 60 | ||
| 59 | struct { | 61 | struct { |
| 60 | - cairo_font_face_t * face; | 62 | + cairo_font_face_t * face; |
| 63 | + cairo_font_weight_t weight; | ||
| 61 | } font; | 64 | } font; |
| 62 | 65 | ||
| 66 | + struct { | ||
| 67 | + gchar * family; | ||
| 68 | + gboolean bold; | ||
| 69 | + } saved; | ||
| 70 | + | ||
| 63 | } V3270FontChooserWidget; | 71 | } V3270FontChooserWidget; |
| 64 | 72 | ||
| 65 | typedef struct _V3270HostSelectWidgetClass | 73 | typedef struct _V3270HostSelectWidgetClass |
| @@ -72,25 +80,37 @@ | @@ -72,25 +80,37 @@ | ||
| 72 | 80 | ||
| 73 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 81 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 74 | 82 | ||
| 75 | -static void apply(GtkWidget *widget, GtkWidget *terminal) | ||
| 76 | -{ | ||
| 77 | - | 83 | + static void cancel(GtkWidget *widget, GtkWidget *terminal) |
| 84 | + { | ||
| 78 | debug("V3270FontChooserWidget::%s",__FUNCTION__); | 85 | debug("V3270FontChooserWidget::%s",__FUNCTION__); |
| 79 | 86 | ||
| 80 | -} | 87 | + V3270FontChooserWidget *chooser = GTK_V3270_FONT_CHOOSER(widget); |
| 81 | 88 | ||
| 82 | -static void load(GtkWidget *widget, GtkWidget *terminal) | ||
| 83 | -{ | 89 | + if(chooser->saved.family) |
| 90 | + v3270_set_font_family(terminal,chooser->saved.family); | ||
| 91 | + | ||
| 92 | + v3270_set_toggle(terminal,LIB3270_TOGGLE_BOLD,chooser->saved.bold); | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + static void load(GtkWidget *widget, GtkWidget *terminal) | ||
| 96 | + { | ||
| 84 | V3270FontChooserWidget *chooser = GTK_V3270_FONT_CHOOSER(widget); | 97 | V3270FontChooserWidget *chooser = GTK_V3270_FONT_CHOOSER(widget); |
| 85 | 98 | ||
| 86 | debug("V3270FontChooserWidget::%s",__FUNCTION__); | 99 | debug("V3270FontChooserWidget::%s",__FUNCTION__); |
| 87 | 100 | ||
| 101 | + if(chooser->saved.family) { | ||
| 102 | + g_free(chooser->saved.family); | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + chooser->saved.family = g_strdup(v3270_get_font_family(terminal)); | ||
| 106 | + chooser->saved.bold = v3270_get_toggle(terminal,LIB3270_TOGGLE_BOLD); | ||
| 107 | + | ||
| 88 | GtkTreeIter active; | 108 | GtkTreeIter active; |
| 89 | gtk_tree_view_set_model( | 109 | gtk_tree_view_set_model( |
| 90 | GTK_TREE_VIEW(chooser->font_list), | 110 | GTK_TREE_VIEW(chooser->font_list), |
| 91 | v3270_font_family_model_new( | 111 | v3270_font_family_model_new( |
| 92 | chooser->font_list, | 112 | chooser->font_list, |
| 93 | - v3270_get_font_family(terminal), | 113 | + chooser->saved.family, |
| 94 | &active | 114 | &active |
| 95 | ) | 115 | ) |
| 96 | ); | 116 | ); |
| @@ -100,10 +120,13 @@ static void load(GtkWidget *widget, GtkWidget *terminal) | @@ -100,10 +120,13 @@ static void load(GtkWidget *widget, GtkWidget *terminal) | ||
| 100 | &active | 120 | &active |
| 101 | ); | 121 | ); |
| 102 | 122 | ||
| 103 | -} | 123 | + gtk_toggle_button_set_active(chooser->bold,chooser->saved.bold); |
| 104 | 124 | ||
| 105 | -static void dispose(GObject *object) | ||
| 106 | -{ | 125 | + gtk_widget_queue_draw(chooser->preview); |
| 126 | + } | ||
| 127 | + | ||
| 128 | + static void dispose(GObject *object) | ||
| 129 | + { | ||
| 107 | V3270FontChooserWidget * widget = GTK_V3270_FONT_CHOOSER(object); | 130 | V3270FontChooserWidget * widget = GTK_V3270_FONT_CHOOSER(object); |
| 108 | 131 | ||
| 109 | if(widget->font.face) { | 132 | if(widget->font.face) { |
| @@ -111,19 +134,38 @@ static void dispose(GObject *object) | @@ -111,19 +134,38 @@ static void dispose(GObject *object) | ||
| 111 | widget->font.face = NULL; | 134 | widget->font.face = NULL; |
| 112 | } | 135 | } |
| 113 | 136 | ||
| 137 | + if(widget->saved.family) { | ||
| 138 | + g_free(widget->saved.family); | ||
| 139 | + widget->saved.family = NULL; | ||
| 140 | + } | ||
| 141 | + | ||
| 114 | G_OBJECT_CLASS(V3270FontChooserWidget_parent_class)->dispose(object); | 142 | G_OBJECT_CLASS(V3270FontChooserWidget_parent_class)->dispose(object); |
| 115 | -} | 143 | + } |
| 116 | 144 | ||
| 117 | -static void V3270FontChooserWidget_class_init(V3270FontChooserWidgetClass *klass) | ||
| 118 | -{ | 145 | + static void V3270FontChooserWidget_class_init(V3270FontChooserWidgetClass *klass) |
| 146 | + { | ||
| 119 | V3270SettingsClass * widget = GTK_V3270_SETTINGS_CLASS(klass); | 147 | V3270SettingsClass * widget = GTK_V3270_SETTINGS_CLASS(klass); |
| 120 | 148 | ||
| 121 | G_OBJECT_CLASS(klass)->dispose = dispose; | 149 | G_OBJECT_CLASS(klass)->dispose = dispose; |
| 122 | 150 | ||
| 123 | - widget->apply = apply; | 151 | + widget->cancel = cancel; |
| 124 | widget->load = load; | 152 | widget->load = load; |
| 125 | 153 | ||
| 126 | -} | 154 | + } |
| 155 | + | ||
| 156 | + static void set_font_family(V3270FontChooserWidget *widget, const gchar * font_family) | ||
| 157 | + { | ||
| 158 | + | ||
| 159 | + // Update font | ||
| 160 | + if(widget->font.face) { | ||
| 161 | + cairo_font_face_destroy(widget->font.face); | ||
| 162 | + widget->font.face = NULL; | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + widget->font.face = cairo_toy_font_face_create(font_family, CAIRO_FONT_SLANT_NORMAL, widget->font.weight); | ||
| 166 | + gtk_widget_queue_draw(widget->preview); | ||
| 167 | + | ||
| 168 | + } | ||
| 127 | 169 | ||
| 128 | static void font_selected(GtkTreeSelection *selection, V3270FontChooserWidget *widget) | 170 | static void font_selected(GtkTreeSelection *selection, V3270FontChooserWidget *widget) |
| 129 | { | 171 | { |
| @@ -139,16 +181,10 @@ static void V3270FontChooserWidget_class_init(V3270FontChooserWidgetClass *klass | @@ -139,16 +181,10 @@ static void V3270FontChooserWidget_class_init(V3270FontChooserWidgetClass *klass | ||
| 139 | debug("Font-family: %s",g_value_get_string(&value)); | 181 | debug("Font-family: %s",g_value_get_string(&value)); |
| 140 | 182 | ||
| 141 | // Update terminal widget | 183 | // Update terminal widget |
| 142 | - GtkWidget * terminal = v3270_settings_get_terminal_widget(GTK_WIDGET(widget)); | ||
| 143 | - if(terminal) | ||
| 144 | - { | ||
| 145 | - v3270_set_font_family(terminal,g_value_get_string(&value)); | ||
| 146 | - gtk_widget_queue_draw(widget->preview); | ||
| 147 | - } | ||
| 148 | - | ||
| 149 | - // Update font | 184 | + if(widget->parent.terminal) |
| 185 | + v3270_set_font_family(widget->parent.terminal,g_value_get_string(&value)); | ||
| 150 | 186 | ||
| 151 | - widget->font.face = cairo_toy_font_face_create(g_value_get_string(&value), CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); | 187 | + set_font_family(widget,g_value_get_string(&value)); |
| 152 | 188 | ||
| 153 | g_value_unset(&value); | 189 | g_value_unset(&value); |
| 154 | } | 190 | } |
| @@ -206,8 +242,21 @@ static void V3270FontChooserWidget_class_init(V3270FontChooserWidgetClass *klass | @@ -206,8 +242,21 @@ static void V3270FontChooserWidget_class_init(V3270FontChooserWidgetClass *klass | ||
| 206 | return FALSE; | 242 | return FALSE; |
| 207 | } | 243 | } |
| 208 | 244 | ||
| 245 | +static void bold_toggled(GtkToggleButton *togglebutton, V3270FontChooserWidget *widget) | ||
| 246 | +{ | ||
| 247 | + gboolean active = gtk_toggle_button_get_active(togglebutton); | ||
| 248 | + | ||
| 249 | + widget->font.weight = (active ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); | ||
| 250 | + | ||
| 251 | + v3270_set_toggle(widget->parent.terminal,LIB3270_TOGGLE_BOLD,active); | ||
| 252 | + set_font_family(widget,v3270_get_font_family(widget->parent.terminal)); | ||
| 253 | + | ||
| 254 | +} | ||
| 255 | + | ||
| 209 | static void V3270FontChooserWidget_init(V3270FontChooserWidget *widget) | 256 | static void V3270FontChooserWidget_init(V3270FontChooserWidget *widget) |
| 210 | { | 257 | { |
| 258 | + widget->font.weight = CAIRO_FONT_WEIGHT_NORMAL; | ||
| 259 | + | ||
| 211 | gtk_widget_set_size_request(GTK_WIDGET(widget),-1,136); | 260 | gtk_widget_set_size_request(GTK_WIDGET(widget),-1,136); |
| 212 | gtk_grid_set_row_homogeneous(GTK_GRID(widget),FALSE); | 261 | gtk_grid_set_row_homogeneous(GTK_GRID(widget),FALSE); |
| 213 | 262 | ||
| @@ -260,6 +309,13 @@ static void V3270FontChooserWidget_init(V3270FontChooserWidget *widget) | @@ -260,6 +309,13 @@ static void V3270FontChooserWidget_init(V3270FontChooserWidget *widget) | ||
| 260 | gtk_grid_attach(GTK_GRID(widget),frame,1,0,5,3); | 309 | gtk_grid_attach(GTK_GRID(widget),frame,1,0,5,3); |
| 261 | } | 310 | } |
| 262 | 311 | ||
| 312 | + // Add font-weight button | ||
| 313 | + { | ||
| 314 | + widget->bold = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_label(_("Bold"))); | ||
| 315 | + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->bold),1,3,1,1); | ||
| 316 | + g_signal_connect(G_OBJECT(widget->bold),"toggled",G_CALLBACK(bold_toggled),widget); | ||
| 317 | + } | ||
| 318 | + | ||
| 263 | } | 319 | } |
| 264 | 320 | ||
| 265 | GtkWidget * v3270_font_chooser_widget_new() | 321 | GtkWidget * v3270_font_chooser_widget_new() |