Commit 1053cc4165d3383138bb597bdc31a34cec67fcf4
1 parent
f87fa503
Exists in
master
and in
1 other branch
Adding "zoom" methods.
Showing
20 changed files
with
448 additions
and
139 deletions
Show diff stats
src/dialogs/colorscheme.c
@@ -268,9 +268,9 @@ | @@ -268,9 +268,9 @@ | ||
268 | GtkTreeModel * model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget)); | 268 | GtkTreeModel * model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget)); |
269 | 269 | ||
270 | #ifdef DEBUG | 270 | #ifdef DEBUG |
271 | - lib3270_autoptr(char) filename = lib3270_strdup_printf("%s/%s",".","colors.conf"); | 271 | + g_autofree gchar * filename = g_build_filename("conf","colors.conf",NULL); |
272 | #else | 272 | #else |
273 | - lib3270_autoptr(char) filename = lib3270_build_data_filename("colors.conf"); | 273 | + lib3270_autoptr(char) filename = lib3270_build_data_filename("colors.conf",NULL); |
274 | #endif // DEBUG | 274 | #endif // DEBUG |
275 | 275 | ||
276 | if(!g_file_test(filename,G_FILE_TEST_IS_REGULAR)) | 276 | if(!g_file_test(filename,G_FILE_TEST_IS_REGULAR)) |
src/dialogs/print/begin.c
@@ -41,8 +41,7 @@ | @@ -41,8 +41,7 @@ | ||
41 | // Setup FONT | 41 | // Setup FONT |
42 | if(!operation->font.name) | 42 | if(!operation->font.name) |
43 | { | 43 | { |
44 | - operation->font.name = g_strdup("monospace"); | ||
45 | - debug("No font, assuming %s !!!!!!!!!!!!!!!!!!!!!!!!!!",operation->font.name); | 44 | + operation->font.name = g_strdup(v3270_get_default_font_name()); |
46 | g_warning("No font, assuming %s",operation->font.name); | 45 | g_warning("No font, assuming %s",operation->font.name); |
47 | } | 46 | } |
48 | 47 | ||
@@ -85,9 +84,9 @@ | @@ -85,9 +84,9 @@ | ||
85 | 84 | ||
86 | operation->font.info.width++; | 85 | operation->font.info.width++; |
87 | 86 | ||
88 | - operation->font.info.left = (gtk_print_context_get_width(context)- (operation->font.info.width * operation->contents.width))/2; | ||
89 | - if(operation->font.info.left < 2) | ||
90 | - operation->font.info.left = 2; | 87 | + operation->font.info.margin.left = (gtk_print_context_get_width(context)- (operation->font.info.width * operation->contents.width))/2; |
88 | + if(operation->font.info.margin.left < 2) | ||
89 | + operation->font.info.margin.left = 2; | ||
91 | 90 | ||
92 | // Setup page size | 91 | // Setup page size |
93 | operation->lpp = (gtk_print_context_get_height(context) / (extents.height + extents.descent)); | 92 | operation->lpp = (gtk_print_context_get_height(context) / (extents.height + extents.descent)); |
src/dialogs/print/draw.c
@@ -29,6 +29,7 @@ | @@ -29,6 +29,7 @@ | ||
29 | 29 | ||
30 | #include "private.h" | 30 | #include "private.h" |
31 | #include <string.h> | 31 | #include <string.h> |
32 | + #include <internals.h> | ||
32 | #include <lib3270/selection.h> | 33 | #include <lib3270/selection.h> |
33 | 34 | ||
34 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 35 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
@@ -86,7 +87,7 @@ | @@ -86,7 +87,7 @@ | ||
86 | gdk_cairo_set_source_rgba(cr,operation->settings.colors + V3270_COLOR_BACKGROUND); | 87 | gdk_cairo_set_source_rgba(cr,operation->settings.colors + V3270_COLOR_BACKGROUND); |
87 | cairo_rectangle( | 88 | cairo_rectangle( |
88 | cr, | 89 | cr, |
89 | - operation->font.info.left-1,0, | 90 | + operation->font.info.margin.left-1,0, |
90 | (rect.width * operation->contents.width) + 4, | 91 | (rect.width * operation->contents.width) + 4, |
91 | (rect.height * operation->contents.height) + 4 | 92 | (rect.height * operation->contents.height) + 4 |
92 | ); | 93 | ); |
@@ -111,7 +112,7 @@ | @@ -111,7 +112,7 @@ | ||
111 | // Draw columns | 112 | // Draw columns |
112 | size_t pos = (row * selection->bounds.width); | 113 | size_t pos = (row * selection->bounds.width); |
113 | size_t col; | 114 | size_t col; |
114 | - rect.x = operation->font.info.left; | 115 | + rect.x = operation->font.info.margin.left; |
115 | 116 | ||
116 | debug("Drawing: %u row=%u selection=%p pos=%u", (unsigned int) drawing, row, selection, (unsigned int) pos); | 117 | debug("Drawing: %u row=%u selection=%p pos=%u", (unsigned int) drawing, row, selection, (unsigned int) pos); |
117 | 118 |
src/dialogs/print/private.h
@@ -31,6 +31,7 @@ | @@ -31,6 +31,7 @@ | ||
31 | #include <v3270/print.h> | 31 | #include <v3270/print.h> |
32 | #include <lib3270/log.h> | 32 | #include <lib3270/log.h> |
33 | #include <lib3270/trace.h> | 33 | #include <lib3270/trace.h> |
34 | + #include <internals.h> | ||
34 | 35 | ||
35 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ | 36 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ |
36 | 37 |
src/include/internals.h
@@ -157,11 +157,47 @@ | @@ -157,11 +157,47 @@ | ||
157 | 157 | ||
158 | G_GNUC_INTERNAL GtkWidget * v3270_charset_combo_box_new(); | 158 | G_GNUC_INTERNAL GtkWidget * v3270_charset_combo_box_new(); |
159 | 159 | ||
160 | + | ||
161 | +/*--[ Font Info ]------------------------------------------------------------------------------------*/ | ||
162 | + | ||
163 | + typedef struct _v3270FontInfo { | ||
164 | + | ||
165 | + double size; ///< @brief Current font size. | ||
166 | + double step; ///< @brief Steps for zoom in/out. | ||
167 | + | ||
168 | + guint width; | ||
169 | + guint height; | ||
170 | + guint ascent; | ||
171 | + guint descent; | ||
172 | + | ||
173 | + guint spacing; | ||
174 | + | ||
175 | + struct | ||
176 | + { | ||
177 | + gint left; | ||
178 | + gint top; | ||
179 | + | ||
180 | + } margin; | ||
181 | + | ||
182 | + gchar * family; | ||
183 | + cairo_font_face_t * face; | ||
184 | + cairo_font_weight_t weight; | ||
185 | + cairo_scaled_font_t * scaled; | ||
186 | + | ||
187 | + } v3270FontInfo; | ||
188 | + | ||
189 | +G_GNUC_INTERNAL void v3270_font_info_init(v3270FontInfo *info); | ||
190 | +G_GNUC_INTERNAL void v3270_font_info_unset(v3270FontInfo *info); | ||
191 | + | ||
192 | +G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, v3270FontInfo *font, GdkRectangle *rect, GdkRGBA *color); | ||
193 | + | ||
160 | /*--[ Internal Methods ]-----------------------------------------------------------------------------*/ | 194 | /*--[ Internal Methods ]-----------------------------------------------------------------------------*/ |
161 | 195 | ||
162 | 196 | ||
163 | const GtkWidgetClass * v3270_get_parent_class(void); | 197 | const GtkWidgetClass * v3270_get_parent_class(void); |
164 | 198 | ||
199 | + G_GNUC_INTERNAL void v3270_reconfigure(v3270 * terminal); | ||
200 | + | ||
165 | G_GNUC_INTERNAL gboolean v3270_draw(GtkWidget * widget, cairo_t * cr); | 201 | G_GNUC_INTERNAL gboolean v3270_draw(GtkWidget * widget, cairo_t * cr); |
166 | G_GNUC_INTERNAL void v3270_cursor_draw(v3270 *widget); | 202 | G_GNUC_INTERNAL void v3270_cursor_draw(v3270 *widget); |
167 | G_GNUC_INTERNAL void v3270_set_cursor(GtkWidget *widget, LIB3270_POINTER id); | 203 | G_GNUC_INTERNAL void v3270_set_cursor(GtkWidget *widget, LIB3270_POINTER id); |
@@ -209,6 +245,8 @@ | @@ -209,6 +245,8 @@ | ||
209 | G_GNUC_INTERNAL void v3270_start_timer(GtkWidget *terminal); | 245 | G_GNUC_INTERNAL void v3270_start_timer(GtkWidget *terminal); |
210 | G_GNUC_INTERNAL void v3270_stop_timer(GtkWidget *terminal); | 246 | G_GNUC_INTERNAL void v3270_stop_timer(GtkWidget *terminal); |
211 | 247 | ||
248 | + G_GNUC_INTERNAL void v3270_redraw(v3270 *terminal, cairo_t * cr, gint width, gint height); | ||
249 | + | ||
212 | G_GNUC_INTERNAL void v3270_draw_connection(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, const GdkRectangle *rect); | 250 | G_GNUC_INTERNAL void v3270_draw_connection(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, const GdkRectangle *rect); |
213 | 251 | ||
214 | G_GNUC_INTERNAL void v3270_draw_ssl_status(v3270 *widget, cairo_t *cr, GdkRectangle *rect); | 252 | G_GNUC_INTERNAL void v3270_draw_ssl_status(v3270 *widget, cairo_t *cr, GdkRectangle *rect); |
src/include/terminal.h
@@ -108,12 +108,14 @@ G_BEGIN_DECLS | @@ -108,12 +108,14 @@ G_BEGIN_DECLS | ||
108 | int scaled_fonts : 1; /**< Use scaled fonts */ | 108 | int scaled_fonts : 1; /**< Use scaled fonts */ |
109 | int drawing : 1; /**< Draw widget? */ | 109 | int drawing : 1; /**< Draw widget? */ |
110 | 110 | ||
111 | + /* | ||
111 | #if GTK_CHECK_VERSION(3,0,0) | 112 | #if GTK_CHECK_VERSION(3,0,0) |
112 | 113 | ||
113 | #else | 114 | #else |
114 | gint width; | 115 | gint width; |
115 | gint height; | 116 | gint height; |
116 | #endif // GTK_CHECK_VERSION(3,0,0) | 117 | #endif // GTK_CHECK_VERSION(3,0,0) |
118 | + */ | ||
117 | 119 | ||
118 | GSource * timer; | 120 | GSource * timer; |
119 | GtkIMContext * input_method; | 121 | GtkIMContext * input_method; |
@@ -135,10 +137,6 @@ G_BEGIN_DECLS | @@ -135,10 +137,6 @@ G_BEGIN_DECLS | ||
135 | cairo_surface_t * surface; | 137 | cairo_surface_t * surface; |
136 | v3270FontInfo font; | 138 | v3270FontInfo font; |
137 | 139 | ||
138 | - struct { | ||
139 | - double step; ///< @brief Steps for zoom in/out. | ||
140 | - } zoom; | ||
141 | - | ||
142 | gint minimum_width; | 140 | gint minimum_width; |
143 | gint minimum_height; | 141 | gint minimum_height; |
144 | 142 |
src/include/v3270.h
@@ -63,25 +63,6 @@ | @@ -63,25 +63,6 @@ | ||
63 | typedef struct _v3270 v3270; | 63 | typedef struct _v3270 v3270; |
64 | typedef struct _v3270Class v3270Class; | 64 | typedef struct _v3270Class v3270Class; |
65 | 65 | ||
66 | - typedef struct _v3270FontInfo { | ||
67 | - | ||
68 | - guint width; | ||
69 | - guint height; | ||
70 | - guint ascent; | ||
71 | - guint descent; | ||
72 | - | ||
73 | - guint spacing; | ||
74 | - | ||
75 | - guint left; | ||
76 | - guint top; | ||
77 | - | ||
78 | - gchar * family; | ||
79 | - cairo_font_face_t * face; | ||
80 | - cairo_font_weight_t weight; | ||
81 | - cairo_scaled_font_t * scaled; | ||
82 | - | ||
83 | - } v3270FontInfo; | ||
84 | - | ||
85 | enum V3270_COLOR | 66 | enum V3270_COLOR |
86 | { | 67 | { |
87 | V3270_COLOR_BACKGROUND, | 68 | V3270_COLOR_BACKGROUND, |
@@ -218,7 +199,6 @@ | @@ -218,7 +199,6 @@ | ||
218 | LIB3270_EXPORT void v3270_set_color_table(GdkRGBA *table, const gchar *colors); | 199 | LIB3270_EXPORT void v3270_set_color_table(GdkRGBA *table, const gchar *colors); |
219 | LIB3270_EXPORT const GdkRGBA * v3270_get_color_table(GtkWidget *widget); | 200 | LIB3270_EXPORT const GdkRGBA * v3270_get_color_table(GtkWidget *widget); |
220 | LIB3270_EXPORT void v3270_set_mono_color_table(GdkRGBA *table, const gchar *fg, const gchar *bg); | 201 | LIB3270_EXPORT void v3270_set_mono_color_table(GdkRGBA *table, const gchar *fg, const gchar *bg); |
221 | - LIB3270_EXPORT void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, v3270FontInfo *font, GdkRectangle *rect, GdkRGBA *color); | ||
222 | LIB3270_EXPORT void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, const GdkRGBA *color); | 202 | LIB3270_EXPORT void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, const GdkRGBA *color); |
223 | LIB3270_EXPORT GdkRGBA * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id); | 203 | LIB3270_EXPORT GdkRGBA * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id); |
224 | 204 | ||
@@ -277,6 +257,9 @@ | @@ -277,6 +257,9 @@ | ||
277 | 257 | ||
278 | // Misc | 258 | // Misc |
279 | LIB3270_EXPORT int v3270_exec_command(GtkWidget *widget, const gchar *cmdline); | 259 | LIB3270_EXPORT int v3270_exec_command(GtkWidget *widget, const gchar *cmdline); |
260 | + LIB3270_EXPORT void v3270_zoom_best(GtkWidget *widget); | ||
261 | + LIB3270_EXPORT void v3270_zoom_in(GtkWidget *widget); | ||
262 | + LIB3270_EXPORT void v3270_zoom_out(GtkWidget *widget); | ||
280 | 263 | ||
281 | // Convenience | 264 | // Convenience |
282 | LIB3270_EXPORT void gtk_entry_set_printf(GtkEntry *entry, const gchar *fmt, ...) G_GNUC_PRINTF(2,3); | 265 | LIB3270_EXPORT void gtk_entry_set_printf(GtkEntry *entry, const gchar *fmt, ...) G_GNUC_PRINTF(2,3); |
src/terminal/accessible.c
@@ -325,8 +325,8 @@ static void v3270_accessible_get_character_extents( AtkText *text, | @@ -325,8 +325,8 @@ static void v3270_accessible_get_character_extents( AtkText *text, | ||
325 | gdk_window_get_origin(window, x, y); | 325 | gdk_window_get_origin(window, x, y); |
326 | 326 | ||
327 | // Get screen position | 327 | // Get screen position |
328 | - *x += widget->font.left + ((offset%cols) * widget->font.width); | ||
329 | - *y += widget->font.top + ((offset/cols) * widget->font.spacing); | 328 | + *x += widget->font.margin.left + ((offset%cols) * widget->font.width); |
329 | + *y += widget->font.margin.top + ((offset/cols) * widget->font.spacing); | ||
330 | *width = widget->font.width; | 330 | *width = widget->font.width; |
331 | *height = widget->font.spacing; | 331 | *height = widget->font.spacing; |
332 | 332 |
src/terminal/draw.c
@@ -122,7 +122,7 @@ static void get_element_colors(unsigned short attr, GdkRGBA **fg, GdkRGBA **bg, | @@ -122,7 +122,7 @@ static void get_element_colors(unsigned short attr, GdkRGBA **fg, GdkRGBA **bg, | ||
122 | } | 122 | } |
123 | } | 123 | } |
124 | 124 | ||
125 | -LIB3270_EXPORT void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, v3270FontInfo *fontInfo, GdkRectangle *rect, GdkRGBA *color) | 125 | +void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, v3270FontInfo *fontInfo, GdkRectangle *rect, GdkRGBA *color) |
126 | { | 126 | { |
127 | GdkRGBA *fg; | 127 | GdkRGBA *fg; |
128 | GdkRGBA *bg; | 128 | GdkRGBA *bg; |
@@ -341,55 +341,40 @@ cairo_surface_t *gdk_window_create_similar_surface(GdkWindow *window, cairo_cont | @@ -341,55 +341,40 @@ cairo_surface_t *gdk_window_create_similar_surface(GdkWindow *window, cairo_cont | ||
341 | } | 341 | } |
342 | #endif // GTK_CHECK_VERSION(2, 22, 0) | 342 | #endif // GTK_CHECK_VERSION(2, 22, 0) |
343 | 343 | ||
344 | -LIB3270_EXPORT void v3270_reload(GtkWidget *widget) | 344 | +/// @brief Draw terminal contents. |
345 | +/// | ||
346 | +/// @param terminal Terminal widget. | ||
347 | +/// @param cr a cairo context. | ||
348 | +/// @param width the width of the rectangle. | ||
349 | +/// @param height the height of the rectangle. | ||
350 | +/// | ||
351 | +void v3270_redraw(v3270 *terminal, cairo_t * cr, gint width, gint height) | ||
345 | { | 352 | { |
346 | - v3270 * terminal = GTK_V3270(widget); | ||
347 | - | ||
348 | - gint width = gtk_widget_get_allocated_width(widget); | ||
349 | - gint height = gtk_widget_get_allocated_height(widget); | ||
350 | - | 353 | + unsigned int rows, cols, r; |
351 | GdkRectangle rect; | 354 | GdkRectangle rect; |
352 | int addr, cursor; | 355 | int addr, cursor; |
353 | - unsigned int rows, cols, r; | ||
354 | - | ||
355 | - cairo_t * cr; | ||
356 | - | ||
357 | - if(!(gtk_widget_get_realized(widget) && terminal->drawing)) | ||
358 | - { | ||
359 | - return; | ||
360 | - } | ||
361 | - | ||
362 | - // Create new terminal image | ||
363 | - if(terminal->surface) | ||
364 | - cairo_surface_destroy(terminal->surface); | ||
365 | - | ||
366 | - terminal->surface = (cairo_surface_t *) gdk_window_create_similar_surface(gtk_widget_get_window(widget),CAIRO_CONTENT_COLOR,width,height); | ||
367 | - | ||
368 | - // Update the created image | ||
369 | - cr = cairo_create(terminal->surface); | ||
370 | - v3270_compute_font_size(terminal, cr, width, height); | ||
371 | - v3270_update_font_metrics(terminal, width, height); | ||
372 | 356 | ||
373 | gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_BACKGROUND); | 357 | gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_BACKGROUND); |
374 | cairo_rectangle(cr, 0, 0, width, height); | 358 | cairo_rectangle(cr, 0, 0, width, height); |
375 | cairo_fill(cr); | 359 | cairo_fill(cr); |
376 | cairo_stroke(cr); | 360 | cairo_stroke(cr); |
377 | 361 | ||
378 | - // Draw terminal contents | ||
379 | lib3270_get_screen_size(terminal->host,&rows,&cols); | 362 | lib3270_get_screen_size(terminal->host,&rows,&cols); |
380 | 363 | ||
381 | memset(&rect,0,sizeof(rect)); | 364 | memset(&rect,0,sizeof(rect)); |
382 | - rect.y = terminal->font.top; | 365 | + rect.y = terminal->font.margin.top; |
383 | rect.width = terminal->font.width; | 366 | rect.width = terminal->font.width; |
384 | rect.height = terminal->font.spacing; | 367 | rect.height = terminal->font.spacing; |
385 | addr = 0; | 368 | addr = 0; |
386 | cursor = lib3270_get_cursor_address(terminal->host); | 369 | cursor = lib3270_get_cursor_address(terminal->host); |
387 | 370 | ||
371 | + cairo_set_scaled_font(cr,terminal->font.scaled); | ||
372 | + | ||
388 | for(r = 0; r < rows; r++) | 373 | for(r = 0; r < rows; r++) |
389 | { | 374 | { |
390 | unsigned int c; | 375 | unsigned int c; |
391 | 376 | ||
392 | - rect.x = terminal->font.left; | 377 | + rect.x = terminal->font.margin.left; |
393 | 378 | ||
394 | for(c=0;c < cols;c++) | 379 | for(c=0;c < cols;c++) |
395 | { | 380 | { |
@@ -410,11 +395,47 @@ LIB3270_EXPORT void v3270_reload(GtkWidget *widget) | @@ -410,11 +395,47 @@ LIB3270_EXPORT void v3270_reload(GtkWidget *widget) | ||
410 | 395 | ||
411 | } | 396 | } |
412 | 397 | ||
413 | - cairo_set_scaled_font(cr,terminal->font.scaled); | ||
414 | v3270_draw_oia(terminal, cr, rect.y, cols); | 398 | v3270_draw_oia(terminal, cr, rect.y, cols); |
415 | 399 | ||
400 | +} | ||
401 | + | ||
402 | +LIB3270_EXPORT void v3270_reload(GtkWidget *widget) | ||
403 | +{ | ||
404 | + v3270 * terminal = GTK_V3270(widget); | ||
405 | + | ||
406 | + if(!(gtk_widget_get_realized(widget) && terminal->drawing)) | ||
407 | + return; | ||
408 | + | ||
409 | + gint width = gtk_widget_get_allocated_width(widget); | ||
410 | + gint height = gtk_widget_get_allocated_height(widget); | ||
411 | + | ||
412 | + cairo_t * cr = cairo_create(terminal->surface); | ||
413 | + | ||
414 | + v3270_redraw(terminal, cr, width, height); | ||
415 | + | ||
416 | cairo_destroy(cr); | 416 | cairo_destroy(cr); |
417 | 417 | ||
418 | + /* | ||
419 | + v3270 * terminal = GTK_V3270(widget); | ||
420 | + cairo_t * cr; | ||
421 | + | ||
422 | + | ||
423 | + | ||
424 | + // Create new terminal image | ||
425 | + if(terminal->surface) | ||
426 | + cairo_surface_destroy(terminal->surface); | ||
427 | + | ||
428 | + terminal->surface = (cairo_surface_t *) gdk_window_create_similar_surface(gtk_widget_get_window(widget),CAIRO_CONTENT_COLOR,width,height); | ||
429 | + | ||
430 | + // Update the created image | ||
431 | + cr = cairo_create(terminal->surface); | ||
432 | + v3270_compute_font_size(terminal, cr, width, height); | ||
433 | + v3270_update_font_metrics(terminal, width, height); | ||
434 | + | ||
435 | + v3270_redraw(terminal, cr, width, height); | ||
436 | + | ||
437 | + cairo_destroy(cr); | ||
438 | + */ | ||
418 | } | 439 | } |
419 | 440 | ||
420 | void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor) | 441 | void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor) |
@@ -441,8 +462,8 @@ void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned sho | @@ -441,8 +462,8 @@ void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned sho | ||
441 | lib3270_get_screen_size(terminal->host,&rows,&cols); | 462 | lib3270_get_screen_size(terminal->host,&rows,&cols); |
442 | 463 | ||
443 | memset(&rect,0,sizeof(rect)); | 464 | memset(&rect,0,sizeof(rect)); |
444 | - rect.x = terminal->font.left + ((addr % cols) * terminal->font.width); | ||
445 | - rect.y = terminal->font.top + ((addr / cols) * terminal->font.spacing); | 465 | + rect.x = terminal->font.margin.left + ((addr % cols) * terminal->font.width); |
466 | + rect.y = terminal->font.margin.top + ((addr / cols) * terminal->font.spacing); | ||
446 | rect.width = terminal->font.width; | 467 | rect.width = terminal->font.width; |
447 | rect.height = terminal->font.spacing; | 468 | rect.height = terminal->font.spacing; |
448 | 469 |
@@ -0,0 +1,137 @@ | @@ -0,0 +1,137 @@ | ||
1 | +/* | ||
2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | + * | ||
6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | + * | ||
8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | + * Free Software Foundation. | ||
11 | + * | ||
12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | + * obter mais detalhes. | ||
16 | + * | ||
17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
20 | + * | ||
21 | + * Este programa está nomeado como - e possui - linhas de código. | ||
22 | + * | ||
23 | + * Contatos: | ||
24 | + * | ||
25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | + * | ||
28 | + */ | ||
29 | + | ||
30 | + #include <config.h> | ||
31 | + #include "private.h" | ||
32 | + | ||
33 | +/*--[ Implement ]------------------------------------------------------------------------------------*/ | ||
34 | + | ||
35 | +/* | ||
36 | +static void update_font_size(v3270 * terminal, cairo_t *cr, gint width, gint height, int step) | ||
37 | +{ | ||
38 | + | ||
39 | + | ||
40 | + cairo_set_font_face(cr,terminal->font.face); | ||
41 | + | ||
42 | + cairo_set_font_size(cr,terminal->font.size); | ||
43 | + | ||
44 | + v3270_update_font_metrics(terminal, width, height); | ||
45 | + | ||
46 | + if(terminal->font.scaled) | ||
47 | + cairo_scaled_font_destroy(terminal->font.scaled); | ||
48 | + | ||
49 | + terminal->font.scaled = cairo_get_scaled_font(cr); | ||
50 | + cairo_scaled_font_reference(terminal->font.scaled); | ||
51 | + | ||
52 | + v3270_redraw(terminal, cr, width, height); | ||
53 | + | ||
54 | + gtk_widget_queue_draw(GTK_WIDGET(terminal)); | ||
55 | + | ||
56 | +} | ||
57 | +*/ | ||
58 | + | ||
59 | +void v3270_zoom_best(GtkWidget *widget) | ||
60 | +{ | ||
61 | + debug("%s",__FUNCTION__); | ||
62 | + | ||
63 | + g_return_if_fail(GTK_IS_V3270(widget)); | ||
64 | + v3270 * terminal = GTK_V3270(widget); | ||
65 | + if(!(gtk_widget_get_realized(widget) && terminal->drawing && lib3270_is_connected(terminal->host))) | ||
66 | + { | ||
67 | + gdk_display_beep(gdk_display_get_default()); | ||
68 | + return; | ||
69 | + } | ||
70 | + | ||
71 | + gint width = gtk_widget_get_allocated_width(widget); | ||
72 | + gint height = gtk_widget_get_allocated_height(widget); | ||
73 | + | ||
74 | + cairo_t *cr = cairo_create(terminal->surface); | ||
75 | + | ||
76 | + v3270_compute_font_size(terminal, cr, width, height); | ||
77 | + v3270_update_font_metrics(terminal, width, height); | ||
78 | + | ||
79 | + v3270_redraw(terminal, cr, width, height); | ||
80 | + | ||
81 | + cairo_destroy(cr); | ||
82 | + | ||
83 | + gtk_widget_queue_draw(widget); | ||
84 | + | ||
85 | +} | ||
86 | + | ||
87 | +static void zoom(GtkWidget *widget, double step) | ||
88 | +{ | ||
89 | + debug("%s",__FUNCTION__); | ||
90 | + | ||
91 | + g_return_if_fail(GTK_IS_V3270(widget)); | ||
92 | + v3270 * terminal = GTK_V3270(widget); | ||
93 | + if(!(gtk_widget_get_realized(widget) && terminal->drawing && lib3270_is_connected(terminal->host))) | ||
94 | + { | ||
95 | + gtk_widget_error_bell(widget); | ||
96 | + return; | ||
97 | + } | ||
98 | + | ||
99 | + terminal->font.size += step; | ||
100 | + | ||
101 | + // Redraw window | ||
102 | + | ||
103 | + gint width = gtk_widget_get_allocated_width(widget); | ||
104 | + gint height = gtk_widget_get_allocated_height(widget); | ||
105 | + | ||
106 | + cairo_t *cr = cairo_create(terminal->surface); | ||
107 | + | ||
108 | + cairo_set_font_face(cr,terminal->font.face); | ||
109 | + cairo_set_font_size(cr,terminal->font.size); | ||
110 | + | ||
111 | + v3270_update_font_metrics(terminal, width, height); | ||
112 | + | ||
113 | + if(terminal->font.scaled) | ||
114 | + cairo_scaled_font_destroy(terminal->font.scaled); | ||
115 | + | ||
116 | + terminal->font.scaled = cairo_get_scaled_font(cr); | ||
117 | + cairo_scaled_font_reference(terminal->font.scaled); | ||
118 | + | ||
119 | + v3270_redraw(terminal, cr, width, height); | ||
120 | + | ||
121 | + cairo_destroy(cr); | ||
122 | + | ||
123 | + gtk_widget_queue_draw(GTK_WIDGET(terminal)); | ||
124 | + | ||
125 | +} | ||
126 | + | ||
127 | +void v3270_zoom_in(GtkWidget *widget) | ||
128 | +{ | ||
129 | + zoom(widget,1); | ||
130 | +} | ||
131 | + | ||
132 | +void v3270_zoom_out(GtkWidget *widget) | ||
133 | +{ | ||
134 | + debug("%s",__FUNCTION__); | ||
135 | + zoom(widget,-1); | ||
136 | +} | ||
137 | + |
src/terminal/font/compute.c
@@ -67,27 +67,25 @@ | @@ -67,27 +67,25 @@ | ||
67 | cairo_set_font_face(cr,terminal->font.face); | 67 | cairo_set_font_face(cr,terminal->font.face); |
68 | 68 | ||
69 | { | 69 | { |
70 | - double s = terminal->zoom.step; | ||
71 | - double selected = 0; | 70 | + double s = terminal->font.step; |
72 | 71 | ||
73 | do | 72 | do |
74 | { | 73 | { |
75 | - selected = s; | 74 | + terminal->font.size = s; |
76 | 75 | ||
77 | - s += terminal->zoom.step; | 76 | + s += terminal->font.step; |
78 | cairo_set_font_size(cr,s); | 77 | cairo_set_font_size(cr,s); |
79 | cairo_font_extents(cr,&extents); | 78 | cairo_font_extents(cr,&extents); |
80 | 79 | ||
81 | } while( (VIEW_HEIGTH_FROM_FONT( (extents.height+extents.descent) ) < height) && (VIEW_WIDTH_FROM_FONT(extents.max_x_advance) < width) ); | 80 | } while( (VIEW_HEIGTH_FROM_FONT( (extents.height+extents.descent) ) < height) && (VIEW_WIDTH_FROM_FONT(extents.max_x_advance) < width) ); |
82 | 81 | ||
83 | - debug("Selected size=%lf",selected); | ||
84 | - | ||
85 | - cairo_set_font_size(cr,selected); | ||
86 | - cairo_font_extents(cr,&extents); | 82 | + debug("Selected size=%lf",terminal->font.size); |
87 | 83 | ||
88 | } | 84 | } |
89 | 85 | ||
90 | // Save scaled font for use on next drawings | 86 | // Save scaled font for use on next drawings |
87 | + cairo_set_font_size(cr,terminal->font.size); | ||
88 | + | ||
91 | if(terminal->font.scaled) | 89 | if(terminal->font.scaled) |
92 | cairo_scaled_font_destroy(terminal->font.scaled); | 90 | cairo_scaled_font_destroy(terminal->font.scaled); |
93 | 91 |
@@ -0,0 +1,63 @@ | @@ -0,0 +1,63 @@ | ||
1 | +/* | ||
2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | + * | ||
6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | + * | ||
8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | + * Free Software Foundation. | ||
11 | + * | ||
12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | + * obter mais detalhes. | ||
16 | + * | ||
17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
20 | + * | ||
21 | + * Este programa está nomeado como - e possui - linhas de código. | ||
22 | + * | ||
23 | + * Contatos: | ||
24 | + * | ||
25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | + * | ||
28 | + */ | ||
29 | + | ||
30 | + #include <config.h> | ||
31 | + #include "private.h" | ||
32 | + | ||
33 | +/*--[ Implement ]------------------------------------------------------------------------------------*/ | ||
34 | + | ||
35 | +void v3270_font_info_init(v3270FontInfo *info) | ||
36 | +{ | ||
37 | + memset(info,0,sizeof(v3270FontInfo)); | ||
38 | + | ||
39 | + info->family = g_strdup(v3270_get_default_font_name()); | ||
40 | + info->step = 0.1; | ||
41 | + info->size = 0.1; | ||
42 | +} | ||
43 | + | ||
44 | +void v3270_font_info_unset(v3270FontInfo *info) | ||
45 | +{ | ||
46 | + if(info->family) | ||
47 | + { | ||
48 | + g_free(info->family); | ||
49 | + info->family = NULL; | ||
50 | + } | ||
51 | + | ||
52 | + if(info->scaled) | ||
53 | + { | ||
54 | + cairo_scaled_font_destroy(info->scaled); | ||
55 | + info->scaled = NULL; | ||
56 | + } | ||
57 | + | ||
58 | + if(info->face) { | ||
59 | + cairo_font_face_destroy(info->face); | ||
60 | + info->face = NULL; | ||
61 | + } | ||
62 | + | ||
63 | +} |
src/terminal/font/metrics.c
@@ -67,12 +67,16 @@ void v3270_update_font_metrics(v3270 *terminal, unsigned int width, unsigned int | @@ -67,12 +67,16 @@ void v3270_update_font_metrics(v3270 *terminal, unsigned int width, unsigned int | ||
67 | // Center image | 67 | // Center image |
68 | 68 | ||
69 | size = VIEW_WIDTH_FROM_FONT(terminal->font.width); | 69 | size = VIEW_WIDTH_FROM_FONT(terminal->font.width); |
70 | - terminal->font.left = ((width - size) / 2); | 70 | + terminal->font.margin.left = (width/2) - (size/2); |
71 | + | ||
72 | + debug("%d",(width - size)); | ||
71 | 73 | ||
72 | size = VIEW_HEIGTH_FROM_FONT(terminal->font.spacing); | 74 | size = VIEW_HEIGTH_FROM_FONT(terminal->font.spacing); |
73 | - terminal->font.top = ((height - size) /2); | 75 | + terminal->font.margin.top = (height/2) - (size/2); |
76 | + | ||
77 | + debug("%d",(height - size)); | ||
74 | 78 | ||
75 | - debug("screen_height=%u content_height=%u top=%d",height, size, terminal->font.top); | 79 | + debug("screen_height=%u content_height=%d top=%d left=%d size=%lf",height, size, terminal->font.margin.top, terminal->font.margin.left, terminal->font.size); |
76 | 80 | ||
77 | } | 81 | } |
78 | 82 |
src/terminal/font/private.h
@@ -29,6 +29,7 @@ | @@ -29,6 +29,7 @@ | ||
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | #include <terminal.h> | 31 | #include <terminal.h> |
32 | + #include <internals.h> | ||
32 | #include <lib3270.h> | 33 | #include <lib3270.h> |
33 | #include <lib3270/log.h> | 34 | #include <lib3270/log.h> |
34 | #include <lib3270/toggle.h> | 35 | #include <lib3270/toggle.h> |
src/terminal/mouse.c
@@ -55,8 +55,8 @@ gint v3270_get_offset_at_point(v3270 *widget, gint x, gint y) | @@ -55,8 +55,8 @@ gint v3270_get_offset_at_point(v3270 *widget, gint x, gint y) | ||
55 | 55 | ||
56 | if(x > 0 && y > 0) | 56 | if(x > 0 && y > 0) |
57 | { | 57 | { |
58 | - point.x = ((x-widget->font.left)/widget->font.width); | ||
59 | - point.y = ((y-widget->font.top)/widget->font.spacing); | 58 | + point.x = ((x-widget->font.margin.left)/widget->font.width); |
59 | + point.y = ((y-widget->font.margin.top)/widget->font.spacing); | ||
60 | 60 | ||
61 | lib3270_get_screen_size(widget->host,&r,&c); | 61 | lib3270_get_screen_size(widget->host,&r,&c); |
62 | 62 |
src/terminal/oia.c
@@ -581,18 +581,18 @@ void v3270_draw_oia(v3270 *terminal, cairo_t *cr, int row, int cols) | @@ -581,18 +581,18 @@ void v3270_draw_oia(v3270 *terminal, cairo_t *cr, int row, int cols) | ||
581 | }; | 581 | }; |
582 | 582 | ||
583 | int f; | 583 | int f; |
584 | - int rCol = terminal->font.left+(cols*terminal->font.width); | ||
585 | - int lCol = terminal->font.left+1; | 584 | + int rCol = terminal->font.margin.left+(cols*terminal->font.width); |
585 | + int lCol = terminal->font.margin.left+1; | ||
586 | 586 | ||
587 | row += OIA_TOP_MARGIN; | 587 | row += OIA_TOP_MARGIN; |
588 | gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_SEPARATOR); | 588 | gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_SEPARATOR); |
589 | - cairo_rectangle(cr, terminal->font.left, row, cols*terminal->font.width, 1); | 589 | + cairo_rectangle(cr, terminal->font.margin.left, row, cols*terminal->font.width, 1); |
590 | cairo_fill(cr); | 590 | cairo_fill(cr); |
591 | 591 | ||
592 | row += 2; | 592 | row += 2; |
593 | 593 | ||
594 | gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_BACKGROUND); | 594 | gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_BACKGROUND); |
595 | - cairo_rectangle(cr, terminal->font.left, row, cols*terminal->font.width, terminal->font.spacing); | 595 | + cairo_rectangle(cr, terminal->font.margin.left, row, cols*terminal->font.width, terminal->font.spacing); |
596 | cairo_fill(cr); | 596 | cairo_fill(cr); |
597 | 597 | ||
598 | for(f=0;f< (int) G_N_ELEMENTS(right);f++) | 598 | for(f=0;f< (int) G_N_ELEMENTS(right);f++) |
@@ -770,8 +770,8 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, | @@ -770,8 +770,8 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, | ||
770 | // Update cursor rectangle | 770 | // Update cursor rectangle |
771 | saved = terminal->cursor.rect; | 771 | saved = terminal->cursor.rect; |
772 | 772 | ||
773 | - terminal->cursor.rect.x = terminal->font.left + (col * terminal->cursor.rect.width); | ||
774 | - terminal->cursor.rect.y = terminal->font.top + (row * terminal->font.spacing); | 773 | + terminal->cursor.rect.x = terminal->font.margin.left + (col * terminal->cursor.rect.width); |
774 | + terminal->cursor.rect.y = terminal->font.margin.top + (row * terminal->font.spacing); | ||
775 | terminal->cursor.rect.width = terminal->font.width; | 775 | terminal->cursor.rect.width = terminal->font.width; |
776 | terminal->cursor.rect.height = terminal->font.height+terminal->font.descent; | 776 | terminal->cursor.rect.height = terminal->font.height+terminal->font.descent; |
777 | terminal->cursor.show |= 1; | 777 | terminal->cursor.show |= 1; |
@@ -0,0 +1,86 @@ | @@ -0,0 +1,86 @@ | ||
1 | +/* | ||
2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | + * | ||
6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | + * | ||
8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | + * Free Software Foundation. | ||
11 | + * | ||
12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | + * obter mais detalhes. | ||
16 | + * | ||
17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
20 | + * | ||
21 | + * Este programa está nomeado como - e possui - linhas de código. | ||
22 | + * | ||
23 | + * Contatos: | ||
24 | + * | ||
25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | + * | ||
28 | + */ | ||
29 | + | ||
30 | + #include <config.h> | ||
31 | + #include <terminal.h> | ||
32 | + | ||
33 | +/*--[ Implement ]------------------------------------------------------------------------------------*/ | ||
34 | + | ||
35 | +/** | ||
36 | + * @brief Reconfigure widget surface. | ||
37 | + * | ||
38 | + * Called when the widget is resized or moved to regenerate the cairo surface: | ||
39 | + * | ||
40 | + * * Recreate the surface. | ||
41 | + * * Compute the new font size & metrics. | ||
42 | + * * Redraw contents. | ||
43 | + * * Emite "GDK_CONFIGURE" event. | ||
44 | + * | ||
45 | + */ | ||
46 | +void v3270_reconfigure(v3270 * terminal) | ||
47 | +{ | ||
48 | + GtkAllocation allocation; | ||
49 | + GtkWidget *widget; | ||
50 | + GdkEvent *event = gdk_event_new(GDK_CONFIGURE); | ||
51 | + | ||
52 | + widget = GTK_WIDGET(terminal); | ||
53 | + | ||
54 | + gtk_widget_get_allocation(widget, &allocation); | ||
55 | + | ||
56 | + event->configure.window = g_object_ref(gtk_widget_get_window(widget)); | ||
57 | + event->configure.send_event = TRUE; | ||
58 | + event->configure.x = allocation.x; | ||
59 | + event->configure.y = allocation.y; | ||
60 | + event->configure.width = allocation.width; | ||
61 | + event->configure.height = allocation.height; | ||
62 | + | ||
63 | + if(terminal->surface) | ||
64 | + cairo_surface_destroy(terminal->surface); | ||
65 | + | ||
66 | + terminal->surface = (cairo_surface_t *) gdk_window_create_similar_surface(gtk_widget_get_window(widget),CAIRO_CONTENT_COLOR,allocation.width,allocation.height); | ||
67 | + | ||
68 | + // Update the created image | ||
69 | + cairo_t * cr = cairo_create(terminal->surface); | ||
70 | + v3270_compute_font_size(terminal, cr, allocation.width, allocation.height); | ||
71 | + v3270_update_font_metrics(terminal, allocation.width, allocation.height); | ||
72 | + | ||
73 | + v3270_redraw(terminal, cr, allocation.width, allocation.height); | ||
74 | + | ||
75 | + cairo_destroy(cr); | ||
76 | + | ||
77 | +#if( !GTK_CHECK_VERSION(3,0,0)) | ||
78 | + terminal->width = allocation.width; | ||
79 | + terminal->height = allocation.height; | ||
80 | +#endif | ||
81 | + | ||
82 | + gtk_widget_event(widget, event); | ||
83 | + gdk_event_free(event); | ||
84 | +} | ||
85 | + | ||
86 | + |
src/terminal/widget.c
@@ -71,8 +71,6 @@ | @@ -71,8 +71,6 @@ | ||
71 | static void v3270_realize ( GtkWidget * widget) ; | 71 | static void v3270_realize ( GtkWidget * widget) ; |
72 | static void v3270_size_allocate ( GtkWidget * widget, | 72 | static void v3270_size_allocate ( GtkWidget * widget, |
73 | GtkAllocation * allocation ); | 73 | GtkAllocation * allocation ); |
74 | -static void v3270_send_configure ( v3270 * terminal ); | ||
75 | - | ||
76 | // Signals | 74 | // Signals |
77 | static void v3270_activate (GtkWidget *widget); | 75 | static void v3270_activate (GtkWidget *widget); |
78 | 76 | ||
@@ -503,9 +501,6 @@ static void v3270_init(v3270 *widget) | @@ -503,9 +501,6 @@ static void v3270_init(v3270 *widget) | ||
503 | // Setup clipboard. | 501 | // Setup clipboard. |
504 | widget->selection.target = GDK_SELECTION_CLIPBOARD; | 502 | widget->selection.target = GDK_SELECTION_CLIPBOARD; |
505 | 503 | ||
506 | - // Setup zoom | ||
507 | - widget->zoom.step = 0.1; | ||
508 | - | ||
509 | // Reset timer | 504 | // Reset timer |
510 | widget->activity.timestamp = time(0); | 505 | widget->activity.timestamp = time(0); |
511 | widget->activity.disconnect = 0; | 506 | widget->activity.disconnect = 0; |
@@ -532,7 +527,7 @@ static void v3270_init(v3270 *widget) | @@ -532,7 +527,7 @@ static void v3270_init(v3270 *widget) | ||
532 | widget->drawing = 1; | 527 | widget->drawing = 1; |
533 | 528 | ||
534 | // Set defaults | 529 | // Set defaults |
535 | - widget->font.family = g_strdup(v3270_get_default_font_name()); | 530 | + v3270_font_info_init(&widget->font); |
536 | v3270_set_color_table(widget->color,v3270_default_colors); | 531 | v3270_set_color_table(widget->color,v3270_default_colors); |
537 | 532 | ||
538 | } | 533 | } |
@@ -562,22 +557,7 @@ static void v3270_destroy(GtkWidget *widget) | @@ -562,22 +557,7 @@ static void v3270_destroy(GtkWidget *widget) | ||
562 | terminal->accessible = NULL; | 557 | terminal->accessible = NULL; |
563 | } | 558 | } |
564 | 559 | ||
565 | - if(terminal->font.family) | ||
566 | - { | ||
567 | - g_free(terminal->font.family); | ||
568 | - terminal->font.family = 0; | ||
569 | - } | ||
570 | - | ||
571 | - if(terminal->font.scaled) | ||
572 | - { | ||
573 | - cairo_scaled_font_destroy(terminal->font.scaled); | ||
574 | - terminal->font.scaled = NULL; | ||
575 | - } | ||
576 | - | ||
577 | - if(terminal->font.face) { | ||
578 | - cairo_font_face_destroy(terminal->font.face); | ||
579 | - terminal->font.face = NULL; | ||
580 | - } | 560 | + v3270_font_info_unset(&terminal->font); |
581 | 561 | ||
582 | if(terminal->surface) | 562 | if(terminal->surface) |
583 | { | 563 | { |
@@ -736,9 +716,7 @@ static void v3270_realize(GtkWidget * widget) | @@ -736,9 +716,7 @@ static void v3270_realize(GtkWidget * widget) | ||
736 | gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); | 716 | gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); |
737 | #endif // !GTK3 | 717 | #endif // !GTK3 |
738 | 718 | ||
739 | - v3270_reload(widget); | ||
740 | - | ||
741 | - v3270_send_configure(GTK_V3270(widget)); | 719 | + v3270_reconfigure(GTK_V3270(widget)); |
742 | 720 | ||
743 | if(!GTK_V3270(widget)->cursor.timer) | 721 | if(!GTK_V3270(widget)->cursor.timer) |
744 | { | 722 | { |
@@ -776,8 +754,8 @@ static void v3270_size_allocate(GtkWidget * widget, GtkAllocation * allocation) | @@ -776,8 +754,8 @@ static void v3270_size_allocate(GtkWidget * widget, GtkAllocation * allocation) | ||
776 | if(gtk_widget_get_has_window(widget)) | 754 | if(gtk_widget_get_has_window(widget)) |
777 | gdk_window_move_resize(gtk_widget_get_window (widget),allocation->x, allocation->y,allocation->width, allocation->height); | 755 | gdk_window_move_resize(gtk_widget_get_window (widget),allocation->x, allocation->y,allocation->width, allocation->height); |
778 | 756 | ||
779 | - v3270_reload(widget); | ||
780 | - v3270_send_configure(GTK_V3270(widget)); | 757 | + v3270_reconfigure(GTK_V3270(widget)); |
758 | + | ||
781 | } | 759 | } |
782 | } | 760 | } |
783 | 761 | ||
@@ -789,32 +767,6 @@ G_GNUC_INTERNAL void gtk_widget_get_allocation(GtkWidget *widget, GtkAllocation | @@ -789,32 +767,6 @@ G_GNUC_INTERNAL void gtk_widget_get_allocation(GtkWidget *widget, GtkAllocation | ||
789 | #endif // !GTK(2,18) | 767 | #endif // !GTK(2,18) |
790 | 768 | ||
791 | 769 | ||
792 | -static void v3270_send_configure(v3270 * terminal) | ||
793 | -{ | ||
794 | - GtkAllocation allocation; | ||
795 | - GtkWidget *widget; | ||
796 | - GdkEvent *event = gdk_event_new(GDK_CONFIGURE); | ||
797 | - | ||
798 | - widget = GTK_WIDGET(terminal); | ||
799 | - | ||
800 | - gtk_widget_get_allocation(widget, &allocation); | ||
801 | - | ||
802 | - event->configure.window = g_object_ref(gtk_widget_get_window(widget)); | ||
803 | - event->configure.send_event = TRUE; | ||
804 | - event->configure.x = allocation.x; | ||
805 | - event->configure.y = allocation.y; | ||
806 | - event->configure.width = allocation.width; | ||
807 | - event->configure.height = allocation.height; | ||
808 | - | ||
809 | -#if( !GTK_CHECK_VERSION(3,0,0)) | ||
810 | - terminal->width = allocation.width; | ||
811 | - terminal->height = allocation.height; | ||
812 | -#endif | ||
813 | - | ||
814 | - gtk_widget_event(widget, event); | ||
815 | - gdk_event_free(event); | ||
816 | -} | ||
817 | - | ||
818 | LIB3270_EXPORT void v3270_disconnect(GtkWidget *widget) | 770 | LIB3270_EXPORT void v3270_disconnect(GtkWidget *widget) |
819 | { | 771 | { |
820 | g_return_if_fail(GTK_IS_V3270(widget)); | 772 | g_return_if_fail(GTK_IS_V3270(widget)); |
src/testprogram/toolbar.c
@@ -178,6 +178,21 @@ | @@ -178,6 +178,21 @@ | ||
178 | 178 | ||
179 | } | 179 | } |
180 | 180 | ||
181 | + static void zoom_in_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | ||
182 | + { | ||
183 | + v3270_zoom_in(terminal); | ||
184 | + } | ||
185 | + | ||
186 | + static void zoom_out_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | ||
187 | + { | ||
188 | + v3270_zoom_out(terminal); | ||
189 | + } | ||
190 | + | ||
191 | + static void zoom_best_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | ||
192 | + { | ||
193 | + v3270_zoom_best(terminal); | ||
194 | + } | ||
195 | + | ||
181 | GtkWidget * create_toolbar(GtkWidget *terminal) { | 196 | GtkWidget * create_toolbar(GtkWidget *terminal) { |
182 | 197 | ||
183 | size_t f; | 198 | size_t f; |
@@ -199,6 +214,9 @@ | @@ -199,6 +214,9 @@ | ||
199 | { "document-save", G_CALLBACK(save_all_clicked), "Save screen" }, | 214 | { "document-save", G_CALLBACK(save_all_clicked), "Save screen" }, |
200 | { "document-open", G_CALLBACK(load_clicked), "Paste file" }, | 215 | { "document-open", G_CALLBACK(load_clicked), "Paste file" }, |
201 | 216 | ||
217 | + { "zoom-in", G_CALLBACK(zoom_in_clicked), "Zoom in" }, | ||
218 | + { "zoom-out", G_CALLBACK(zoom_out_clicked), "Zoom out" }, | ||
219 | + { "zoom-fit-best", G_CALLBACK(zoom_best_clicked), "Zoom best" }, | ||
202 | }; | 220 | }; |
203 | 221 | ||
204 | GtkWidget * toolbar = gtk_toolbar_new(); | 222 | GtkWidget * toolbar = gtk_toolbar_new(); |
v3270.cbp
@@ -217,9 +217,15 @@ | @@ -217,9 +217,15 @@ | ||
217 | <Unit filename="src/terminal/draw.c"> | 217 | <Unit filename="src/terminal/draw.c"> |
218 | <Option compilerVar="CC" /> | 218 | <Option compilerVar="CC" /> |
219 | </Unit> | 219 | </Unit> |
220 | + <Unit filename="src/terminal/font/actions.c"> | ||
221 | + <Option compilerVar="CC" /> | ||
222 | + </Unit> | ||
220 | <Unit filename="src/terminal/font/compute.c"> | 223 | <Unit filename="src/terminal/font/compute.c"> |
221 | <Option compilerVar="CC" /> | 224 | <Option compilerVar="CC" /> |
222 | </Unit> | 225 | </Unit> |
226 | + <Unit filename="src/terminal/font/info.c"> | ||
227 | + <Option compilerVar="CC" /> | ||
228 | + </Unit> | ||
223 | <Unit filename="src/terminal/font/metrics.c"> | 229 | <Unit filename="src/terminal/font/metrics.c"> |
224 | <Option compilerVar="CC" /> | 230 | <Option compilerVar="CC" /> |
225 | </Unit> | 231 | </Unit> |
@@ -262,6 +268,9 @@ | @@ -262,6 +268,9 @@ | ||
262 | <Unit filename="src/terminal/security.c"> | 268 | <Unit filename="src/terminal/security.c"> |
263 | <Option compilerVar="CC" /> | 269 | <Option compilerVar="CC" /> |
264 | </Unit> | 270 | </Unit> |
271 | + <Unit filename="src/terminal/surface.c"> | ||
272 | + <Option compilerVar="CC" /> | ||
273 | + </Unit> | ||
265 | <Unit filename="src/terminal/widget.c"> | 274 | <Unit filename="src/terminal/widget.c"> |
266 | <Option compilerVar="CC" /> | 275 | <Option compilerVar="CC" /> |
267 | </Unit> | 276 | </Unit> |