Commit 007c44c5c43d90d04c1b6e4e22fb56d74a5bbda2

Authored by Perry Werneck
1 parent 27a0ca65
Exists in master and in 1 other branch develop

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 37 #include "../private.h"
38 38 #include <v3270/dialogs.h>
39 39 #include <v3270/settings.h>
  40 + #include <v3270/toggle.h>
40 41 #include <lib3270/log.h>
41 42 #include <terminal.h>
42 43  
... ... @@ -55,11 +56,18 @@
55 56  
56 57 GtkWidget * font_list;
57 58 GtkWidget * preview;
  59 + GtkToggleButton * bold;
58 60  
59 61 struct {
60   - cairo_font_face_t * face;
  62 + cairo_font_face_t * face;
  63 + cairo_font_weight_t weight;
61 64 } font;
62 65  
  66 + struct {
  67 + gchar * family;
  68 + gboolean bold;
  69 + } saved;
  70 +
63 71 } V3270FontChooserWidget;
64 72  
65 73 typedef struct _V3270HostSelectWidgetClass
... ... @@ -72,25 +80,37 @@
72 80  
73 81 /*--[ Implement ]------------------------------------------------------------------------------------*/
74 82  
75   -static void apply(GtkWidget *widget, GtkWidget *terminal)
76   -{
77   -
  83 + static void cancel(GtkWidget *widget, GtkWidget *terminal)
  84 + {
78 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 97 V3270FontChooserWidget *chooser = GTK_V3270_FONT_CHOOSER(widget);
85 98  
86 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 108 GtkTreeIter active;
89 109 gtk_tree_view_set_model(
90 110 GTK_TREE_VIEW(chooser->font_list),
91 111 v3270_font_family_model_new(
92 112 chooser->font_list,
93   - v3270_get_font_family(terminal),
  113 + chooser->saved.family,
94 114 &active
95 115 )
96 116 );
... ... @@ -100,10 +120,13 @@ static void load(GtkWidget *widget, GtkWidget *terminal)
100 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 130 V3270FontChooserWidget * widget = GTK_V3270_FONT_CHOOSER(object);
108 131  
109 132 if(widget->font.face) {
... ... @@ -111,19 +134,38 @@ static void dispose(GObject *object)
111 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 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 147 V3270SettingsClass * widget = GTK_V3270_SETTINGS_CLASS(klass);
120 148  
121 149 G_OBJECT_CLASS(klass)->dispose = dispose;
122 150  
123   - widget->apply = apply;
  151 + widget->cancel = cancel;
124 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 170 static void font_selected(GtkTreeSelection *selection, V3270FontChooserWidget *widget)
129 171 {
... ... @@ -139,16 +181,10 @@ static void V3270FontChooserWidget_class_init(V3270FontChooserWidgetClass *klass
139 181 debug("Font-family: %s",g_value_get_string(&value));
140 182  
141 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 189 g_value_unset(&value);
154 190 }
... ... @@ -206,8 +242,21 @@ static void V3270FontChooserWidget_class_init(V3270FontChooserWidgetClass *klass
206 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 256 static void V3270FontChooserWidget_init(V3270FontChooserWidget *widget)
210 257 {
  258 + widget->font.weight = CAIRO_FONT_WEIGHT_NORMAL;
  259 +
211 260 gtk_widget_set_size_request(GTK_WIDGET(widget),-1,136);
212 261 gtk_grid_set_row_homogeneous(GTK_GRID(widget),FALSE);
213 262  
... ... @@ -260,6 +309,13 @@ static void V3270FontChooserWidget_init(V3270FontChooserWidget *widget)
260 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 321 GtkWidget * v3270_font_chooser_widget_new()
... ...