Commit a771f7ecd774e218a5b5d3af74e5d52ef5c01940
1 parent
92a95c77
Exists in
master
and in
1 other branch
Adding property for font-family allowing change it from debug console.
Showing
3 changed files
with
124 additions
and
61 deletions
Show diff stats
src/terminal/font.c
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | 34 | ||
35 | 35 | ||
36 | #define VIEW_HEIGTH_FROM_FONT(font_height) (( ((unsigned int) font_height) * (rows+1)) + OIA_TOP_MARGIN + 2) | 36 | #define VIEW_HEIGTH_FROM_FONT(font_height) (( ((unsigned int) font_height) * (rows+1)) + OIA_TOP_MARGIN + 2) |
37 | - #define VIEW_WIDTH_FROM_FONT(max_x_advance) (((unsigned int) max_x_advance) * cols) | 37 | + #define VIEW_WIDTH_FROM_FONT(max_x_advance) ( ((unsigned int) max_x_advance) * cols) |
38 | 38 | ||
39 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ | 39 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ |
40 | 40 | ||
@@ -68,19 +68,26 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, | @@ -68,19 +68,26 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, | ||
68 | cairo_font_extents_t extents; | 68 | cairo_font_extents_t extents; |
69 | 69 | ||
70 | lib3270_get_screen_size(terminal->host,&rows,&cols); | 70 | lib3270_get_screen_size(terminal->host,&rows,&cols); |
71 | - debug("Screen_size: %ux%u Scalled=%s view_rows=%d view_cols=%d",rows,cols,terminal->font.scaled ? "Yes" : "No", (rows+OIA_TOP_MARGIN+3)); | 71 | + |
72 | + debug( | ||
73 | + "Screen_size: %ux%u Scalled=%s view_rows=%d", | ||
74 | + rows, | ||
75 | + cols, | ||
76 | + terminal->font.scaled ? "Yes" : "No", | ||
77 | + (rows+OIA_TOP_MARGIN+3) | ||
78 | + ); | ||
72 | 79 | ||
73 | terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; | 80 | terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; |
74 | 81 | ||
75 | cairo_select_font_face(cr,terminal->font.family, CAIRO_FONT_SLANT_NORMAL,terminal->font.weight); | 82 | cairo_select_font_face(cr,terminal->font.family, CAIRO_FONT_SLANT_NORMAL,terminal->font.weight); |
76 | 83 | ||
84 | + /* | ||
77 | if(terminal->font.scaled) | 85 | if(terminal->font.scaled) |
78 | { | 86 | { |
79 | - /* | ||
80 | - double w = ((double) width) / ((double)cols); | ||
81 | - double h = ((double) height) / ((double) ((rows + OIA_TOP_MARGIN + 3))); | ||
82 | - double s = (w < h) ? w : h; | ||
83 | - */ | 87 | + |
88 | + // double w = ((double) width) / ((double)cols); | ||
89 | + // double h = ((double) height) / ((double) ((rows + OIA_TOP_MARGIN + 3))); | ||
90 | + // double s = (w < h) ? w : h; | ||
84 | 91 | ||
85 | double s = 0.1; | 92 | double s = 0.1; |
86 | 93 | ||
@@ -100,7 +107,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, | @@ -100,7 +107,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, | ||
100 | cairo_font_extents(cr,&extents); | 107 | cairo_font_extents(cr,&extents); |
101 | 108 | ||
102 | } | 109 | } |
103 | - else | 110 | + else */ |
104 | { | 111 | { |
105 | static const unsigned int font_size[] = { 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 22, 24, 26, 28, 32, 36, 40, 48, 56, 64, 72 }; | 112 | static const unsigned int font_size[] = { 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 22, 24, 26, 28, 32, 36, 40, 48, 56, 64, 72 }; |
106 | size_t f; | 113 | size_t f; |
@@ -118,12 +125,14 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, | @@ -118,12 +125,14 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, | ||
118 | terminal->minimum_height = ((rows+1) * (extents.height + extents.descent)) + (OIA_TOP_MARGIN+2); | 125 | terminal->minimum_height = ((rows+1) * (extents.height + extents.descent)) + (OIA_TOP_MARGIN+2); |
119 | } | 126 | } |
120 | 127 | ||
121 | - debug("font_size=%d y_advance=%u font_extents=%u+%u font_height=%u view_height=%u", | 128 | + debug("font_size=%d x_advance=%lf y_advance=%lf font_extents=%u+%u font_height=%u view_height=%u view_width=%u", |
122 | font_size[f], | 129 | font_size[f], |
123 | - (unsigned int) extents.max_y_advance, | 130 | + extents.max_x_advance, |
131 | + extents.max_y_advance, | ||
124 | (unsigned int) extents.height, (unsigned int) extents.descent, | 132 | (unsigned int) extents.height, (unsigned int) extents.descent, |
125 | VIEW_HEIGTH_FROM_FONT( (unsigned int) (extents.height + extents.descent) ), | 133 | VIEW_HEIGTH_FROM_FONT( (unsigned int) (extents.height + extents.descent) ), |
126 | - height | 134 | + height, |
135 | + VIEW_WIDTH_FROM_FONT(extents.max_x_advance) | ||
127 | ); | 136 | ); |
128 | 137 | ||
129 | if( VIEW_HEIGTH_FROM_FONT((extents.height + extents.descent)) < height && VIEW_WIDTH_FROM_FONT(extents.max_x_advance) < width) | 138 | if( VIEW_HEIGTH_FROM_FONT((extents.height + extents.descent)) < height && VIEW_WIDTH_FROM_FONT(extents.max_x_advance) < width) |
@@ -228,6 +237,7 @@ LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name) | @@ -228,6 +237,7 @@ LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name) | ||
228 | terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; | 237 | terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; |
229 | 238 | ||
230 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "font-family", name); | 239 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "font-family", name); |
240 | + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties.font_family); | ||
231 | 241 | ||
232 | v3270_reload(widget); | 242 | v3270_reload(widget); |
233 | gtk_widget_queue_draw(widget); | 243 | gtk_widget_queue_draw(widget); |
src/terminal/private.h
@@ -246,6 +246,10 @@ G_BEGIN_DECLS | @@ -246,6 +246,10 @@ G_BEGIN_DECLS | ||
246 | guint str; | 246 | guint str; |
247 | } type; | 247 | } type; |
248 | 248 | ||
249 | + // V3270 Internal properties. | ||
250 | + GParamSpec * font_family; | ||
251 | + | ||
252 | + // Properties who launch signals. | ||
249 | GParamSpec * online; | 253 | GParamSpec * online; |
250 | GParamSpec * luname; | 254 | GParamSpec * luname; |
251 | GParamSpec * model; | 255 | GParamSpec * model; |
src/terminal/properties.c
@@ -88,10 +88,17 @@ | @@ -88,10 +88,17 @@ | ||
88 | lib3270_set_toggle(window->host,prop_id - v3270_properties.type.toggle, (int) g_value_get_boolean (value)); | 88 | lib3270_set_toggle(window->host,prop_id - v3270_properties.type.toggle, (int) g_value_get_boolean (value)); |
89 | 89 | ||
90 | } | 90 | } |
91 | - else | ||
92 | - { | 91 | + |
92 | + // Check for internal properties. | ||
93 | + switch(prop_id) { | ||
94 | + case PROP_BEGIN: // Font-family | ||
95 | + v3270_set_font_family(GTK_WIDGET(object), g_value_get_string(value)); | ||
96 | + break; | ||
97 | + | ||
98 | + default: | ||
93 | G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); | 99 | G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); |
94 | - } | 100 | + |
101 | + } | ||
95 | 102 | ||
96 | } | 103 | } |
97 | 104 | ||
@@ -134,10 +141,19 @@ | @@ -134,10 +141,19 @@ | ||
134 | g_value_set_boolean(value,lib3270_get_toggle(window->host,prop_id - v3270_properties.type.toggle) ? TRUE : FALSE ); | 141 | g_value_set_boolean(value,lib3270_get_toggle(window->host,prop_id - v3270_properties.type.toggle) ? TRUE : FALSE ); |
135 | 142 | ||
136 | } | 143 | } |
137 | - else | ||
138 | - { | 144 | + |
145 | + // Check for internal properties. | ||
146 | + switch(prop_id) { | ||
147 | + case PROP_BEGIN: // Font-family | ||
148 | + g_value_set_string(value,v3270_get_font_family(GTK_WIDGET(object))); | ||
149 | + break; | ||
150 | + | ||
151 | + default: | ||
139 | G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); | 152 | G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); |
140 | - } | 153 | + |
154 | + } | ||
155 | + | ||
156 | + | ||
141 | 157 | ||
142 | } | 158 | } |
143 | 159 | ||
@@ -148,10 +164,10 @@ | @@ -148,10 +164,10 @@ | ||
148 | const char *name; | 164 | const char *name; |
149 | GParamSpec **prop; | 165 | GParamSpec **prop; |
150 | } properties[] = { | 166 | } properties[] = { |
151 | - { "connected", &v3270_properties.online }, | ||
152 | - { "luname", &v3270_properties.luname }, | ||
153 | - { "model", &v3270_properties.model }, | ||
154 | - { "has-selection", &v3270_properties.selection } | 167 | + { "connected", &v3270_properties.online }, |
168 | + { "luname", &v3270_properties.luname }, | ||
169 | + { "model", &v3270_properties.model }, | ||
170 | + { "has-selection", &v3270_properties.selection }, | ||
155 | }; | 171 | }; |
156 | 172 | ||
157 | size_t ix; | 173 | size_t ix; |
@@ -179,59 +195,75 @@ | @@ -179,59 +195,75 @@ | ||
179 | debug("%s",__FUNCTION__); | 195 | debug("%s",__FUNCTION__); |
180 | 196 | ||
181 | memset(&v3270_properties,0,sizeof(v3270_properties)); | 197 | memset(&v3270_properties,0,sizeof(v3270_properties)); |
182 | - v3270_properties.count = LIB3270_TOGGLE_COUNT; | ||
183 | - v3270_properties.type.toggle = PROP_BEGIN; | ||
184 | - | ||
185 | gobject_class->set_property = v3270_set_property; | 198 | gobject_class->set_property = v3270_set_property; |
186 | gobject_class->get_property = v3270_get_property; | 199 | gobject_class->get_property = v3270_get_property; |
187 | 200 | ||
188 | - // Get property tables | ||
189 | - const LIB3270_INT_PROPERTY * bool_props = lib3270_get_boolean_properties_list(); | ||
190 | - const LIB3270_INT_PROPERTY * int_props = lib3270_get_int_properties_list(); | ||
191 | - const LIB3270_STRING_PROPERTY * str_props = lib3270_get_string_properties_list(); | ||
192 | - | ||
193 | - v3270_properties.type.boolean = v3270_properties.count + PROP_BEGIN; | ||
194 | - for(ix = 0; bool_props[ix].name; ix++) | ||
195 | - { | ||
196 | - v3270_properties.count++; | ||
197 | - } | ||
198 | - | ||
199 | - v3270_properties.type.integer = v3270_properties.count + PROP_BEGIN; | ||
200 | - for(ix = 0; int_props[ix].name; ix++) | ||
201 | - { | ||
202 | - v3270_properties.count++; | ||
203 | - } | ||
204 | - | ||
205 | - v3270_properties.type.str = v3270_properties.count + PROP_BEGIN; | ||
206 | - for(ix = 0; str_props[ix].name; ix++) | 201 | + v3270_properties.count = PROP_BEGIN; |
202 | + | ||
203 | + // Setup internal properties. | ||
204 | + v3270_properties.font_family = g_param_spec_string( | ||
205 | + "font_family", | ||
206 | + "font_family", | ||
207 | + _("Font family for terminal contents"), | ||
208 | + FALSE, | ||
209 | + G_PARAM_READABLE|G_PARAM_WRITABLE | ||
210 | + ); | ||
211 | + | ||
212 | + g_object_class_install_property( | ||
213 | + gobject_class, | ||
214 | + v3270_properties.count++, | ||
215 | + v3270_properties.font_family | ||
216 | + ); | ||
217 | + | ||
218 | + // | ||
219 | + // Extract properties from LIB3270 control tables | ||
220 | + // | ||
221 | + | ||
222 | + // Extract toggle class. | ||
223 | + v3270_properties.type.toggle = v3270_properties.count; | ||
224 | + for(ix = 0; ix < LIB3270_TOGGLE_COUNT; ix++) | ||
207 | { | 225 | { |
208 | - v3270_properties.count++; | ||
209 | - } | 226 | + debug("Property %u=%s (Toggle)",(unsigned int) v3270_properties.type.toggle + ix, lib3270_get_toggle_name(ix)); |
227 | + | ||
228 | + v3270_properties.toggle[ix] = | ||
229 | + g_param_spec_boolean( | ||
230 | + lib3270_get_toggle_name(ix), | ||
231 | + lib3270_get_toggle_name(ix), | ||
232 | + lib3270_get_toggle_description(ix), | ||
233 | + FALSE, | ||
234 | + G_PARAM_WRITABLE|G_PARAM_READABLE | ||
235 | + ); | ||
210 | 236 | ||
211 | - debug("Creating %u properties", (unsigned int) v3270_properties.count); | 237 | + v3270_install_property(gobject_class, v3270_properties.count++, v3270_properties.toggle[ix]); |
212 | 238 | ||
213 | - // Creating toggle properties. | ||
214 | - for(ix = 0; ix < LIB3270_TOGGLE_COUNT; ix++) | ||
215 | - { | ||
216 | -// debug("Property %u=%s (Toggle)",(unsigned int) v3270_properties.type.toggle + ix, lib3270_get_toggle_name(ix)); | ||
217 | - v3270_properties.toggle[ix] = g_param_spec_boolean(lib3270_get_toggle_name(ix),lib3270_get_toggle_name(ix),lib3270_get_toggle_description(ix),FALSE,G_PARAM_WRITABLE|G_PARAM_READABLE); | ||
218 | - v3270_install_property(gobject_class, v3270_properties.type.toggle + ix, v3270_properties.toggle[ix]); | ||
219 | } | 239 | } |
220 | 240 | ||
221 | - | ||
222 | // Creating boolean properties. | 241 | // Creating boolean properties. |
242 | + v3270_properties.type.boolean = v3270_properties.count; | ||
243 | + const LIB3270_INT_PROPERTY * bool_props = lib3270_get_boolean_properties_list(); | ||
244 | + | ||
223 | for(ix = 0; bool_props[ix].name; ix++) | 245 | for(ix = 0; bool_props[ix].name; ix++) |
224 | { | 246 | { |
225 | -// debug("Property %u=%s (Boolean)",(unsigned int) v3270_properties.type.boolean + ix, bool_props[ix].name); | ||
226 | - spec = g_param_spec_boolean(bool_props[ix].name, bool_props[ix].name, bool_props[ix].description, FALSE,(bool_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE))); | ||
227 | - v3270_install_property(gobject_class, v3270_properties.type.boolean + ix, spec); | 247 | + debug("Property %u=%s (Boolean)",(unsigned int) v3270_properties.type.boolean + ix, bool_props[ix].name); |
248 | + spec = g_param_spec_boolean( | ||
249 | + bool_props[ix].name, | ||
250 | + bool_props[ix].name, | ||
251 | + bool_props[ix].description, | ||
252 | + FALSE, | ||
253 | + (bool_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE)) | ||
254 | + ); | ||
255 | + | ||
256 | + v3270_install_property(gobject_class, v3270_properties.count++, spec); | ||
228 | 257 | ||
229 | } | 258 | } |
230 | 259 | ||
231 | // Creating integer properties. | 260 | // Creating integer properties. |
261 | + const LIB3270_INT_PROPERTY * int_props = lib3270_get_int_properties_list(); | ||
262 | + v3270_properties.type.integer = v3270_properties.count; | ||
263 | + | ||
232 | for(ix = 0; int_props[ix].name; ix++) | 264 | for(ix = 0; int_props[ix].name; ix++) |
233 | { | 265 | { |
234 | -// debug("Property %u=%s (Integer)",(unsigned int) v3270_properties.type.integer + ix, int_props[ix].name); | 266 | + debug("Property %u=%s (Integer)",(unsigned int) v3270_properties.type.integer + ix, int_props[ix].name); |
235 | 267 | ||
236 | spec = g_param_spec_int( | 268 | spec = g_param_spec_int( |
237 | int_props[ix].name, | 269 | int_props[ix].name, |
@@ -242,17 +274,34 @@ | @@ -242,17 +274,34 @@ | ||
242 | 0, // Default | 274 | 0, // Default |
243 | (int_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE)) | 275 | (int_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE)) |
244 | ); | 276 | ); |
277 | + debug("Creating %u properties", (unsigned int) v3270_properties.count); | ||
278 | + | ||
279 | + | ||
280 | + | ||
281 | + | ||
245 | 282 | ||
246 | - v3270_install_property(gobject_class, v3270_properties.type.integer + ix, spec); | 283 | + v3270_install_property(gobject_class, v3270_properties.count++, spec); |
247 | 284 | ||
248 | } | 285 | } |
249 | 286 | ||
250 | // Creating string properties. | 287 | // Creating string properties. |
288 | + const LIB3270_STRING_PROPERTY * str_props = lib3270_get_string_properties_list(); | ||
289 | + v3270_properties.type.str = v3270_properties.count; | ||
290 | + | ||
251 | for(ix = 0; str_props[ix].name; ix++) | 291 | for(ix = 0; str_props[ix].name; ix++) |
252 | { | 292 | { |
253 | -// debug("Property %u=%s (String)",(unsigned int) v3270_properties.type.str + ix, str_props[ix].name); | ||
254 | - spec = g_param_spec_string(str_props[ix].name, str_props[ix].name, str_props[ix].description, FALSE,(str_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE))); | ||
255 | - v3270_install_property(gobject_class, v3270_properties.type.str + ix, spec); | 293 | + |
294 | + debug("Property %u=%s (String)",(unsigned int) v3270_properties.type.str + ix, str_props[ix].name); | ||
295 | + | ||
296 | + spec = g_param_spec_string( | ||
297 | + str_props[ix].name, | ||
298 | + str_props[ix].name, | ||
299 | + str_props[ix].description, | ||
300 | + FALSE, | ||
301 | + (str_props[ix].set == NULL ? G_PARAM_READABLE : (G_PARAM_READABLE|G_PARAM_WRITABLE)) | ||
302 | + ); | ||
303 | + | ||
304 | + v3270_install_property(gobject_class, v3270_properties.count++, spec); | ||
256 | 305 | ||
257 | } | 306 | } |
258 | 307 |