From be686e2badb5cdfdaed7df2cac9ff3b3fb793056 Mon Sep 17 00:00:00 2001 From: ecyrbe Date: Sat, 5 Dec 2009 13:23:44 +0100 Subject: [PATCH] Bring GtkPrintContext hard margin aware See bug #468989. --- gtk/gtk.symbols | 1 + gtk/gtkprintcontext.c | 64 +++++++++++++++++++++++++++++++++++++++++++ gtk/gtkprintcontext.h | 5 ++++ 3 files changed, 70 insertions(+) diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index 40f3261c66..1b61ca7499 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -2918,6 +2918,7 @@ gtk_print_context_get_width gtk_print_context_get_height gtk_print_context_get_dpi_x gtk_print_context_get_dpi_y +gtk_print_context_get_hard_margins gtk_print_context_get_pango_fontmap gtk_print_context_create_pango_context gtk_print_context_create_pango_layout diff --git a/gtk/gtkprintcontext.c b/gtk/gtkprintcontext.c index 80eac79fa7..cdf04d7c2f 100644 --- a/gtk/gtkprintcontext.c +++ b/gtk/gtkprintcontext.c @@ -44,6 +44,13 @@ struct _GtkPrintContext gdouble pixels_per_unit_x; gdouble pixels_per_unit_y; + + gboolean has_hard_margins; + gdouble hard_margin_top; + gdouble hard_margin_bottom; + gdouble hard_margin_left; + gdouble hard_margin_right; + }; struct _GtkPrintContextClass @@ -90,6 +97,7 @@ _gtk_print_context_new (GtkPrintOperation *op) context->op = op; context->cr = NULL; + context->has_hard_margins = FALSE; return context; } @@ -373,6 +381,62 @@ gtk_print_context_get_dpi_y (GtkPrintContext *context) return context->surface_dpi_y; } +/** + * gtk_print_context_get_hard_margins: + * @context: a #GtkPrintContext + * @top: top hardware printer margin + * @bottom: bottom hardware printer margin + * @left: left hardware printer margin + * @right: right hardware printer margin + * + * Obtains the hardware printer margins of the #GtkPrintContext, in units. + * + * Return value: %TRUE if the hard margins were retrieved + * + * Since: 2.20 + */ +gboolean +gtk_print_context_get_hard_margins (GtkPrintContext *context, + gdouble *top, + gdouble *bottom, + gdouble *left, + gdouble *right) +{ + if (context->has_hard_margins) + { + *top = context->hard_margin_top / context->pixels_per_unit_y; + *bottom = context->hard_margin_bottom / context->pixels_per_unit_y; + *left = context->hard_margin_left / context->pixels_per_unit_x; + *right = context->hard_margin_right / context->pixels_per_unit_x; + } + + return context->has_hard_margins; +} + +/** + * gtk_print_context_set_hard_margins: + * @context: a #GtkPrintContext + * @top: top hardware printer margin + * @bottom: bottom hardware printer margin + * @left: left hardware printer margin + * @right: right hardware printer margin + * + * set the hard margins in pixel coordinates + */ +void +_gtk_print_context_set_hard_margins (GtkPrintContext *context, + gdouble top, + gdouble bottom, + gdouble left, + gdouble right) +{ + context->hard_margin_top = top; + context->hard_margin_bottom = bottom; + context->hard_margin_left = left; + context->hard_margin_right = right; + context->has_hard_margins = TRUE; +} + /** * gtk_print_context_get_pango_fontmap: * @context: a #GtkPrintContext diff --git a/gtk/gtkprintcontext.h b/gtk/gtkprintcontext.h index 9bd13343cc..30572d6835 100644 --- a/gtk/gtkprintcontext.h +++ b/gtk/gtkprintcontext.h @@ -49,6 +49,11 @@ gdouble gtk_print_context_get_width (GtkPrintContext *context); gdouble gtk_print_context_get_height (GtkPrintContext *context); gdouble gtk_print_context_get_dpi_x (GtkPrintContext *context); gdouble gtk_print_context_get_dpi_y (GtkPrintContext *context); +gboolean gtk_print_context_get_hard_margins (GtkPrintContext *context, + gdouble *top, + gdouble *bottom, + gdouble *left, + gdouble *right); /* Fonts */ PangoFontMap *gtk_print_context_get_pango_fontmap (GtkPrintContext *context);