Remove GTK3 deprecated calls from printing

Fixes:
sys:1: Warning: ../../../gobject/gsignal.c:2613: signal 'expose_event'
is invalid for instance '0x2d768d0' of type 'GtkDrawingArea'

And the following warnings are also gone:
• printing.c:517:9: warning: ‘gtk_widget_set_double_buffered’ is deprecated
• printing.c:648:9: warning: ‘gdk_cairo_create’ is deprecated: …
• printing.c:1262:65: warning: ‘gdk_color_free’ is deprecated: …
This commit is contained in:
Ricardo Mones 2022-07-20 16:46:58 +02:00
parent a7993f6581
commit cfecbde139

View file

@ -93,7 +93,7 @@ static gboolean cb_preview_close(GtkWidget*, GdkEventAny*, gpointer);
static void cb_preview_size_allocate(GtkWidget*, GtkAllocation*);
static void cb_preview_ready(GtkPrintOperationPreview*,
GtkPrintContext*, gpointer);
static gboolean cb_preview_expose(GtkWidget*, GdkEventExpose*, gpointer);
static gboolean cb_drawing_area(GtkWidget *widget, cairo_t *cr, gpointer data);
static void cb_preview_got_page_size(GtkPrintOperationPreview*,
GtkPrintContext*,
GtkPageSetup*, gpointer);
@ -118,7 +118,8 @@ static GtkPageSetup *page_setup = NULL;
/* other static functions */
static void printing_layout_set_text_attributes(PrintData*, GtkPrintContext *, gboolean *);
static gboolean printing_is_pango_gdk_color_equal(PangoColor*, GdkColor*);
static gboolean printing_is_pango_gdk_rgba_equal(PangoColor*, GdkRGBA*);
PangoColor* printing_pango_color_from_gdk_rgba(GdkRGBA*);
static gint printing_text_iter_get_offset_bytes(PrintData *, const GtkTextIter*);
#define PAGE_MARGIN_STORAGE_UNIT GTK_UNIT_MM
@ -395,7 +396,9 @@ static gboolean cb_preview(GtkPrintOperation *operation,
gpointer data)
{
PrintData *print_data;
cairo_region_t *creg;
cairo_t *cr;
GdkDrawingContext *gdc;
PreviewData *preview_data;
GtkWidget *vbox;
GtkWidget *toolbar;
@ -514,16 +517,18 @@ static gboolean cb_preview(GtkPrintOperation *operation,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
da = gtk_drawing_area_new();
gtk_widget_set_double_buffered(da, FALSE);
gtk_container_add(GTK_CONTAINER(sw), da);
gtk_widget_realize(da);
preview_data->scrolled_window = sw;
preview_data->area = da;
/* cairo context */
cr = gdk_cairo_create(gtk_widget_get_window(da));
creg = cairo_region_create();
gdc = gdk_window_begin_draw_frame(gtk_widget_get_window(da), creg);
cr = gdk_drawing_context_get_cairo_context(gdc);
gtk_print_context_set_cairo_context(context, cr, PREVIEW_SCALE, PREVIEW_SCALE);
cairo_destroy(cr);
gdk_window_end_draw_frame(gtk_widget_get_window(da), gdc);
cairo_region_destroy(creg);
/* signals */
g_signal_connect(dialog, "key_press_event",
@ -604,9 +609,8 @@ static void cb_preview_ready(GtkPrintOperationPreview *preview,
preview_data->current_page = preview_data->pages_to_print;
preview_data->context = context;
g_signal_connect(preview_data->area, "expose_event",
G_CALLBACK(cb_preview_expose),
preview_data);
g_signal_connect(G_OBJECT (preview_data->area), "draw",
G_CALLBACK(cb_drawing_area), preview_data);
gtk_widget_queue_draw(preview_data->area);
}
@ -637,19 +641,25 @@ static void cb_preview_got_page_size(GtkPrintOperationPreview *preview,
paper_width, paper_height);
}
static gboolean cb_preview_expose(GtkWidget *widget, GdkEventExpose *event,
gpointer data)
static gboolean cb_drawing_area(GtkWidget *widget, cairo_t *cr, gpointer data)
{
PreviewData *preview_data = data;
cairo_t *cr;
GdkDrawingContext *gdc;
cairo_region_t *creg;
guint width, height;
width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget);
debug_print("preview_expose (current %p)\n", preview_data->current_page);
cr = gdk_cairo_create(gtk_widget_get_window(preview_data->area));
creg = cairo_region_create();
gdc = gdk_window_begin_draw_frame(gtk_widget_get_window(preview_data->area), creg);
cr = gdk_drawing_context_get_cairo_context(gdc);
/* background */
cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, event->area.height);
cairo_rectangle(cr, 0, 0, width, height);
cairo_fill(cr);
/* shadow */
@ -667,7 +677,8 @@ static gboolean cb_preview_expose(GtkWidget *widget, GdkEventExpose *event,
cairo_fill(cr);
gtk_print_context_set_cairo_context(preview_data->context, cr, PREVIEW_SCALE, PREVIEW_SCALE);
cairo_destroy(cr);
gdk_window_end_draw_frame(gtk_widget_get_window(preview_data->area), gdc);
cairo_region_destroy(creg);
if (preview_data->current_page) {
preview_data->rendering = TRUE;
@ -1166,7 +1177,7 @@ static void printing_layout_set_text_attributes(PrintData *print_data,
gboolean fg_set, bg_set, under_set, strike_set, weight_set;
GSList *tags, *tag_walk;
GtkTextTag *tag;
GdkColor *color = NULL;
GdkRGBA *color = NULL;
PangoUnderline underline;
gboolean strikethrough;
gint weight;
@ -1221,10 +1232,10 @@ static void printing_layout_set_text_attributes(PrintData *print_data,
attr = (PangoAttribute*)attr_walk->data;
if (attr->klass->type == PANGO_ATTR_FOREGROUND) {
attr_color = (PangoAttrColor*) attr;
g_object_get(G_OBJECT(tag), "foreground_gdk",
g_object_get(G_OBJECT(tag), "foreground-rgba",
&color, NULL);
if (color &&
printing_is_pango_gdk_color_equal(&(attr_color->color),
printing_is_pango_gdk_rgba_equal(&(attr_color->color),
color)) {
attr->end_index = printing_text_iter_get_offset_bytes(print_data, &iter);
pango_attr_list_insert(attr_list, attr);
@ -1233,7 +1244,7 @@ static void printing_layout_set_text_attributes(PrintData *print_data,
break;
}
if (color)
gdk_color_free(color);
gdk_rgba_free(color);
}
}
if (!found)
@ -1247,10 +1258,10 @@ static void printing_layout_set_text_attributes(PrintData *print_data,
attr = (PangoAttribute*)attr_walk->data;
if (attr->klass->type == PANGO_ATTR_BACKGROUND) {
attr_color = (PangoAttrColor*) attr;
g_object_get(G_OBJECT(tag), "background-gdk",
g_object_get(G_OBJECT(tag), "background-rgba",
&color, NULL);
if (color &&
printing_is_pango_gdk_color_equal(&(attr_color->color),
printing_is_pango_gdk_rgba_equal(&(attr_color->color),
color)) {
attr->end_index = printing_text_iter_get_offset_bytes(print_data, &iter);
pango_attr_list_insert(attr_list, attr);
@ -1259,7 +1270,7 @@ static void printing_layout_set_text_attributes(PrintData *print_data,
break;
}
if (color)
gdk_color_free(color);
gdk_rgba_free(color);
}
}
if (!found)
@ -1349,16 +1360,20 @@ static void printing_layout_set_text_attributes(PrintData *print_data,
"weight-set", &weight_set,
NULL);
if (fg_set) {
g_object_get(G_OBJECT(tag), "foreground-gdk", &color, NULL);
attr = pango_attr_foreground_new(color->red,color->green,color->blue);
g_object_get(G_OBJECT(tag), "foreground-rgba", &color, NULL);
PangoColor *pc = printing_pango_color_from_gdk_rgba(color);
attr = pango_attr_foreground_new(pc->red, pc->green, pc->blue);
attr->start_index = printing_text_iter_get_offset_bytes(print_data, &iter);
open_attrs = g_slist_prepend(open_attrs, attr);
g_free(pc);
}
if (bg_set) {
g_object_get(G_OBJECT(tag), "background-gdk", &color, NULL);
attr = pango_attr_background_new(color->red,color->green,color->blue);
g_object_get(G_OBJECT(tag), "background-rgba", &color, NULL);
PangoColor *pc = printing_pango_color_from_gdk_rgba(color);
attr = pango_attr_background_new(pc->red, pc->green, pc->blue);
attr->start_index = printing_text_iter_get_offset_bytes(print_data, &iter);
open_attrs = g_slist_prepend(open_attrs, attr);
g_free(pc);
}
if (under_set) {
g_object_get(G_OBJECT(tag), "underline", &underline, NULL);
@ -1401,9 +1416,25 @@ static void printing_layout_set_text_attributes(PrintData *print_data,
pango_attr_list_unref(attr_list);
}
static gboolean printing_is_pango_gdk_color_equal(PangoColor *p, GdkColor *g)
PangoColor* printing_pango_color_from_gdk_rgba(GdkRGBA* g)
{
return ((p->red == g->red) && (p->green == g->green) && (p->blue == g->blue));
PangoColor *c;
c = g_new(PangoColor, 1);
c->red = (guint16) (g->red * 65535);
c->green = (guint16) (g->green * 65535);
c->blue = (guint16) (g->blue * 65535);
return c;
}
static gboolean printing_is_pango_gdk_rgba_equal(PangoColor *p, GdkRGBA *g)
{
PangoColor c;
c.red = (guint16) (g->red * 65535);
c.green = (guint16) (g->green * 65535);
c.blue = (guint16) (g->blue * 65535);
return ((c.red == p->red) && (c.green == p->green) && (c.blue == p->blue));
}
/* Pango has it's attribute in bytes, but GtkTextIter gets only an offset