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,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()