diff --git a/src/dialogs/colorscheme.c b/src/dialogs/colorscheme.c index 2777202..4f94758 100644 --- a/src/dialogs/colorscheme.c +++ b/src/dialogs/colorscheme.c @@ -454,3 +454,31 @@ v3270_color_scheme_set_rgba(widget,clr); } + + int v3270_color_scheme_get_rgba(GtkWidget *widget, GdkRGBA *colors, size_t num_colors) + { + if(num_colors > V3270_COLOR_COUNT) + num_colors = V3270_COLOR_COUNT; + + GdkRGBA * clr = NULL; + GValue value = { 0, }; + GtkTreeIter iter; + size_t f; + + if(!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget),&iter)) + return errno = ENODATA; + + gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget)),&iter,1,&value); + clr = g_value_get_pointer(&value); + + if(!clr) + return errno = ENODATA; + + for(f=0;fshow_selection = v3270_print_settings_get_show_selection(GTK_WIDGET(operation->settings)); - // Setup FONT - PangoFontDescription * fontDescription = pango_font_description_from_string(v3270_font_selection_get_family(operation->settings->font)); + PangoFontDescription * fontDescription = pango_font_description_from_string(operation->font.name); cairo_select_font_face( cr, diff --git a/src/dialogs/print/draw.c b/src/dialogs/print/draw.c index c243c92..04efafe 100644 --- a/src/dialogs/print/draw.c +++ b/src/dialogs/print/draw.c @@ -83,7 +83,7 @@ rect.width = operation->font.info.width; // Clear drawing area. - gdk_cairo_set_source_rgba(cr,operation->settings->colors + V3270_COLOR_BACKGROUND); + gdk_cairo_set_source_rgba(cr,operation->settings.colors + V3270_COLOR_BACKGROUND); cairo_rectangle( cr, operation->font.info.left-1,0, @@ -132,7 +132,7 @@ operation->session, &operation->font.info, &rect, - operation->settings->colors + operation->settings.colors ); } diff --git a/src/dialogs/print/print.c b/src/dialogs/print/print.c index 9e7a8f1..105b4b6 100644 --- a/src/dialogs/print/print.c +++ b/src/dialogs/print/print.c @@ -80,18 +80,11 @@ V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(object); - /* - if(operation->settings) - { - gtk_widget_destroy(GTK_WIDGET(operation->settings)); - operation->settings = NULL; - } - */ - if(operation->font.info.scaled) cairo_scaled_font_destroy(operation->font.info.scaled); -// g_free(operation->font.name); + if(operation->font.name) + g_free(operation->font.name); if(operation->contents.dynamic) { @@ -108,11 +101,38 @@ #ifndef _WIN32 static GtkWidget * custom_widget_new(GtkPrintOperation *prt) { - return GTK_WIDGET(GTK_V3270_PRINT_OPERATION(prt)->settings); + GtkWidget * widget = gtk_frame_new(""); + GtkWidget * settings = V3270_print_settings_new(GTK_WIDGET(GTK_V3270_PRINT_OPERATION(prt)->widget)); + + GtkWidget *label = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(label),_("Text options")); + gtk_frame_set_label_widget(GTK_FRAME(widget),label); + + gtk_container_set_border_width(GTK_CONTAINER(widget),12); + + // The print dialog doesn't follow the guidelines from https://developer.gnome.org/hig/stable/visual-layout.html.en )-: + gtk_frame_set_shadow_type(GTK_FRAME(widget),GTK_SHADOW_NONE); + + gtk_container_set_border_width(GTK_CONTAINER(settings),6); + g_object_set(G_OBJECT(settings),"margin-start",8,NULL); + + gtk_container_add(GTK_CONTAINER(widget),settings); + + gtk_widget_show_all(widget); + + return widget; } static void custom_widget_apply(GtkPrintOperation *prt, GtkWidget *widget) { + V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(prt); + GtkWidget * settings = gtk_bin_get_child(GTK_BIN(widget)); + + // Setup options. + operation->show_selection = v3270_print_settings_get_show_selection(settings); + operation->font.name = g_strdup(v3270_font_selection_get_family(settings)); + + v3270_print_settings_get_rgba(settings, operation->settings.colors, V3270_COLOR_COUNT); } #endif // _WIN32 @@ -157,7 +177,8 @@ V3270PrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_CONTE operation->mode = mode; operation->widget = GTK_V3270(widget); operation->session = v3270_get_session(widget); - operation->settings = GTK_V3270_PRINT_SETTINGS(V3270_print_settings_new(widget)); + + v3270_set_mono_color_table(operation->settings.colors,"#000000","#FFFFFF"); // Get contents. switch(operation->mode) diff --git a/src/dialogs/print/private.h b/src/dialogs/print/private.h index 3ff6787..6526806 100644 --- a/src/dialogs/print/private.h +++ b/src/dialogs/print/private.h @@ -54,13 +54,17 @@ H3270 * session; gboolean show_selection; ///< @brief Print selection box? - V3270PrintSettings * settings; ///< @brief Custom configuration. - size_t lpp; ///< @brief Lines per page (in rows). size_t pages; ///< @brief Number of pages. struct { + GdkRGBA colors[V3270_COLOR_COUNT]; ///< @brief Color scheme for printing. + + } settings; + + struct + { unsigned int width; ///< @brief Max line width. unsigned int height; ///< @brief Number of lines to print. GList * dynamic; @@ -69,21 +73,21 @@ struct { - v3270FontInfo info; + gchar * name; + v3270FontInfo info; } font; }; struct _V3270PrintSettingsClass { - GtkFrameClass parent_class; + GtkGridClass parent_class; }; struct _V3270PrintSettings { - GtkFrame parent; - GdkRGBA colors[V3270_COLOR_COUNT]; ///< @brief Color scheme for printing. + GtkGrid parent; GtkWidget * font; ///< @brief Font selection widget. GtkWidget * color; ///< @brief Color scheme selecting widget. diff --git a/src/dialogs/print/settings.c b/src/dialogs/print/settings.c index fec491b..f88c6a5 100644 --- a/src/dialogs/print/settings.c +++ b/src/dialogs/print/settings.c @@ -35,7 +35,7 @@ /*--[ Widget definition ]----------------------------------------------------------------------------*/ - G_DEFINE_TYPE(V3270PrintSettings, V3270PrintSettings, GTK_TYPE_FRAME); + G_DEFINE_TYPE(V3270PrintSettings, V3270PrintSettings, GTK_TYPE_GRID); /*--[ Implement ]------------------------------------------------------------------------------------*/ @@ -57,6 +57,7 @@ static void V3270PrintSettings_class_init(V3270PrintSettingsClass *klass) } +/* static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA *colors, V3270PrintSettings *settings) { @@ -67,6 +68,7 @@ static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA settings->colors[f] = colors[f]; } +*/ static void V3270PrintSettings_init(V3270PrintSettings *widget) { @@ -77,46 +79,32 @@ static void V3270PrintSettings_init(V3270PrintSettings *widget) }; size_t f; - GtkGrid * grid = GTK_GRID(gtk_grid_new()); - widget->font = v3270_font_selection_new("monospace"); widget->color = v3270_color_scheme_new(); widget->selected = gtk_check_button_new_with_label( _("Print selection box") ); - // The print dialog doesn't follow the guidelines from https://developer.gnome.org/hig/stable/visual-layout.html.en )-: - gtk_frame_set_shadow_type(GTK_FRAME(widget),GTK_SHADOW_NONE); - - GtkWidget *label = gtk_label_new(NULL); - - gtk_label_set_markup(GTK_LABEL(label),_("Text options")); - gtk_frame_set_label_widget(GTK_FRAME(widget),label); - - gtk_container_set_border_width(GTK_CONTAINER(widget),12); - gtk_container_set_border_width(GTK_CONTAINER(grid),6); - - g_object_set(G_OBJECT(grid),"margin-start",8,NULL); + // https://developer.gnome.org/hig/stable/visual-layout.html.en + gtk_grid_set_row_spacing(GTK_GRID(widget),6); + gtk_grid_set_column_spacing(GTK_GRID(widget),12); - gtk_grid_set_row_spacing(grid,6); - gtk_grid_set_column_spacing(grid,12); - - g_signal_connect(G_OBJECT(widget->color),"update-colors",G_CALLBACK(color_scheme_changed),widget); + // g_signal_connect(G_OBJECT(widget->color),"update-colors",G_CALLBACK(color_scheme_changed),widget); // g_signal_connect(G_OBJECT(widget->selected),"toggled",G_CALLBACK(toggle_show_selection),widget); for(f=0;ffont,1,0,1,1); - gtk_grid_attach(grid,widget->color,1,1,1,1); - gtk_grid_attach(grid,widget->selected,1,2,1,1); - - gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(grid)); + gtk_grid_attach(GTK_GRID(widget),widget->font,1,0,1,1); + gtk_grid_attach(GTK_GRID(widget),widget->color,1,1,1,1); + gtk_grid_attach(GTK_GRID(widget),widget->selected,1,2,1,1); - v3270_set_mono_color_table(widget->colors,"#000000","#FFFFFF"); - v3270_color_scheme_set_rgba(widget->color,widget->colors); + // Set color scheme + GdkRGBA colors[V3270_COLOR_COUNT]; + v3270_set_mono_color_table(colors,"#000000","#FFFFFF"); + v3270_color_scheme_set_rgba(widget->color,colors); gtk_widget_show_all(GTK_WIDGET(widget)); @@ -132,6 +120,12 @@ LIB3270_EXPORT GtkWidget * V3270_print_settings_new(GtkWidget *widget) } +LIB3270_EXPORT int v3270_print_settings_get_rgba(GtkWidget *widget, GdkRGBA *colors, size_t num_colors) +{ + V3270PrintSettings * settings = GTK_V3270_PRINT_SETTINGS(widget); + return v3270_color_scheme_get_rgba(settings->color, colors, num_colors); +} + LIB3270_EXPORT gboolean v3270_print_settings_get_show_selection(GtkWidget *widget) { return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(GTK_V3270_PRINT_SETTINGS(widget)->selected)); diff --git a/src/include/v3270/print.h b/src/include/v3270/print.h index 799e0dd..f336edf 100644 --- a/src/include/v3270/print.h +++ b/src/include/v3270/print.h @@ -79,6 +79,7 @@ LIB3270_EXPORT void v3270_print_settings_set_color_scheme(GtkWidget *widget, const gchar *colors); LIB3270_EXPORT const gchar * v3270_print_settings_get_font_family(GtkWidget *widget); LIB3270_EXPORT gboolean v3270_print_settings_set_font_family(GtkWidget *widget, const gchar *fontname); + LIB3270_EXPORT int v3270_print_settings_get_rgba(GtkWidget *widget, GdkRGBA *colors, size_t num_colors); G_END_DECLS -- libgit2 0.21.2