Blame gtk/gtkprintcontext.c

Packit Service fb6fa5
/* GTK - The GIMP Toolkit
Packit Service fb6fa5
 * gtkprintcontext.c: Print Context
Packit Service fb6fa5
 * Copyright (C) 2006, Red Hat, Inc.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is free software; you can redistribute it and/or
Packit Service fb6fa5
 * modify it under the terms of the GNU Lesser General Public
Packit Service fb6fa5
 * License as published by the Free Software Foundation; either
Packit Service fb6fa5
 * version 2 of the License, or (at your option) any later version.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is distributed in the hope that it will be useful,
Packit Service fb6fa5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
 * Lesser General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Lesser General Public
Packit Service fb6fa5
 * License along with this library; if not, write to the
Packit Service fb6fa5
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
 * Boston, MA 02111-1307, USA.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include "config.h"
Packit Service fb6fa5
#include "gtkprintoperation-private.h"
Packit Service fb6fa5
#include "gtkalias.h"
Packit Service fb6fa5
Packit Service fb6fa5
typedef struct _GtkPrintContextClass GtkPrintContextClass;
Packit Service fb6fa5
Packit Service fb6fa5
#define GTK_IS_PRINT_CONTEXT_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PRINT_CONTEXT))
Packit Service fb6fa5
#define GTK_PRINT_CONTEXT_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PRINT_CONTEXT, GtkPrintContextClass))
Packit Service fb6fa5
#define GTK_PRINT_CONTEXT_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PRINT_CONTEXT, GtkPrintContextClass))
Packit Service fb6fa5
Packit Service fb6fa5
#define MM_PER_INCH 25.4
Packit Service fb6fa5
#define POINTS_PER_INCH 72
Packit Service fb6fa5
Packit Service fb6fa5
struct _GtkPrintContext
Packit Service fb6fa5
{
Packit Service fb6fa5
  GObject parent_instance;
Packit Service fb6fa5
Packit Service fb6fa5
  GtkPrintOperation *op;
Packit Service fb6fa5
  cairo_t *cr;
Packit Service fb6fa5
  GtkPageSetup *page_setup;
Packit Service fb6fa5
Packit Service fb6fa5
  gdouble surface_dpi_x;
Packit Service fb6fa5
  gdouble surface_dpi_y;
Packit Service fb6fa5
  
Packit Service fb6fa5
  gdouble pixels_per_unit_x;
Packit Service fb6fa5
  gdouble pixels_per_unit_y;
Packit Service fb6fa5
Packit Service fb6fa5
  gboolean has_hard_margins;
Packit Service fb6fa5
  gdouble hard_margin_top;
Packit Service fb6fa5
  gdouble hard_margin_bottom;
Packit Service fb6fa5
  gdouble hard_margin_left;
Packit Service fb6fa5
  gdouble hard_margin_right;
Packit Service fb6fa5
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
struct _GtkPrintContextClass
Packit Service fb6fa5
{
Packit Service fb6fa5
  GObjectClass parent_class;
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
G_DEFINE_TYPE (GtkPrintContext, gtk_print_context, G_TYPE_OBJECT)
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_print_context_finalize (GObject *object)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintContext *context = GTK_PRINT_CONTEXT (object);
Packit Service fb6fa5
Packit Service fb6fa5
  if (context->page_setup)
Packit Service fb6fa5
    g_object_unref (context->page_setup);
Packit Service fb6fa5
Packit Service fb6fa5
  if (context->cr)
Packit Service fb6fa5
    cairo_destroy (context->cr);
Packit Service fb6fa5
  
Packit Service fb6fa5
  G_OBJECT_CLASS (gtk_print_context_parent_class)->finalize (object);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_print_context_init (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gtk_print_context_class_init (GtkPrintContextClass *class)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GObjectClass *gobject_class = (GObjectClass *)class;
Packit Service fb6fa5
Packit Service fb6fa5
  gobject_class->finalize = gtk_print_context_finalize;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
GtkPrintContext *
Packit Service fb6fa5
_gtk_print_context_new (GtkPrintOperation *op)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintContext *context;
Packit Service fb6fa5
Packit Service fb6fa5
  context = g_object_new (GTK_TYPE_PRINT_CONTEXT, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  context->op = op;
Packit Service fb6fa5
  context->cr = NULL;
Packit Service fb6fa5
  context->has_hard_margins = FALSE;
Packit Service fb6fa5
  
Packit Service fb6fa5
  return context;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static PangoFontMap *
Packit Service fb6fa5
_gtk_print_context_get_fontmap (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return pango_cairo_font_map_get_default ();
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_set_cairo_context:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 * @cr: the cairo context
Packit Service fb6fa5
 * @dpi_x: the horizontal resolution to use with @cr
Packit Service fb6fa5
 * @dpi_y: the vertical resolution to use with @cr
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets a new cairo context on a print context. 
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * This function is intended to be used when implementing
Packit Service fb6fa5
 * an internal print preview, it is not needed for printing,
Packit Service fb6fa5
 * since GTK+ itself creates a suitable cairo context in that
Packit Service fb6fa5
 * case.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.10 
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gtk_print_context_set_cairo_context (GtkPrintContext *context,
Packit Service fb6fa5
				     cairo_t         *cr,
Packit Service fb6fa5
				     double           dpi_x,
Packit Service fb6fa5
				     double           dpi_y)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (context->cr)
Packit Service fb6fa5
    cairo_destroy (context->cr);
Packit Service fb6fa5
Packit Service fb6fa5
  context->cr = cairo_reference (cr);
Packit Service fb6fa5
  context->surface_dpi_x = dpi_x;
Packit Service fb6fa5
  context->surface_dpi_y = dpi_y;
Packit Service fb6fa5
Packit Service fb6fa5
  switch (context->op->priv->unit)
Packit Service fb6fa5
    {
Packit Service fb6fa5
    default:
Packit Service fb6fa5
    case GTK_UNIT_PIXEL:
Packit Service fb6fa5
      /* Do nothing, this is the cairo default unit */
Packit Service fb6fa5
      context->pixels_per_unit_x = 1.0;
Packit Service fb6fa5
      context->pixels_per_unit_y = 1.0;
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case GTK_UNIT_POINTS:
Packit Service fb6fa5
      context->pixels_per_unit_x = dpi_x / POINTS_PER_INCH;
Packit Service fb6fa5
      context->pixels_per_unit_y = dpi_y / POINTS_PER_INCH;
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case GTK_UNIT_INCH:
Packit Service fb6fa5
      context->pixels_per_unit_x = dpi_x;
Packit Service fb6fa5
      context->pixels_per_unit_y = dpi_y;
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case GTK_UNIT_MM:
Packit Service fb6fa5
      context->pixels_per_unit_x = dpi_x / MM_PER_INCH;
Packit Service fb6fa5
      context->pixels_per_unit_y = dpi_y / MM_PER_INCH;
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    }
Packit Service fb6fa5
  cairo_scale (context->cr,
Packit Service fb6fa5
	       context->pixels_per_unit_x,
Packit Service fb6fa5
	       context->pixels_per_unit_y);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
_gtk_print_context_rotate_according_to_orientation (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  cairo_t *cr = context->cr;
Packit Service fb6fa5
  cairo_matrix_t matrix;
Packit Service fb6fa5
  GtkPaperSize *paper_size;
Packit Service fb6fa5
  gdouble width, height;
Packit Service fb6fa5
Packit Service fb6fa5
  paper_size = gtk_page_setup_get_paper_size (context->page_setup);
Packit Service fb6fa5
Packit Service fb6fa5
  width = gtk_paper_size_get_width (paper_size, GTK_UNIT_INCH);
Packit Service fb6fa5
  width = width * context->surface_dpi_x / context->pixels_per_unit_x;
Packit Service fb6fa5
  height = gtk_paper_size_get_height (paper_size, GTK_UNIT_INCH);
Packit Service fb6fa5
  height = height * context->surface_dpi_y / context->pixels_per_unit_y;
Packit Service fb6fa5
  
Packit Service fb6fa5
  switch (gtk_page_setup_get_orientation (context->page_setup))
Packit Service fb6fa5
    {
Packit Service fb6fa5
    default:
Packit Service fb6fa5
    case GTK_PAGE_ORIENTATION_PORTRAIT:
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case GTK_PAGE_ORIENTATION_LANDSCAPE:
Packit Service fb6fa5
      cairo_translate (cr, 0, height);
Packit Service fb6fa5
      cairo_matrix_init (&matrix,
Packit Service fb6fa5
			 0, -1,
Packit Service fb6fa5
			 1,  0,
Packit Service fb6fa5
			 0,  0);
Packit Service fb6fa5
      cairo_transform (cr, &matrix);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT:
Packit Service fb6fa5
      cairo_translate (cr, width, height);
Packit Service fb6fa5
      cairo_matrix_init (&matrix,
Packit Service fb6fa5
			 -1,  0,
Packit Service fb6fa5
			  0, -1,
Packit Service fb6fa5
			  0,  0);
Packit Service fb6fa5
      cairo_transform (cr, &matrix);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    case GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE:
Packit Service fb6fa5
      cairo_translate (cr, width, 0);
Packit Service fb6fa5
      cairo_matrix_init (&matrix,
Packit Service fb6fa5
			  0,  1,
Packit Service fb6fa5
			 -1,  0,
Packit Service fb6fa5
			  0,  0);
Packit Service fb6fa5
      cairo_transform (cr, &matrix);
Packit Service fb6fa5
      break;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
_gtk_print_context_translate_into_margin (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintOperationPrivate *priv;
Packit Service fb6fa5
  gdouble left, top;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (GTK_IS_PRINT_CONTEXT (context));
Packit Service fb6fa5
Packit Service fb6fa5
  priv = context->op->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  /* We do it this way to also handle GTK_UNIT_PIXELS */
Packit Service fb6fa5
  
Packit Service fb6fa5
  left = gtk_page_setup_get_left_margin (context->page_setup, GTK_UNIT_INCH);
Packit Service fb6fa5
  top = gtk_page_setup_get_top_margin (context->page_setup, GTK_UNIT_INCH);
Packit Service fb6fa5
Packit Service fb6fa5
  cairo_translate (context->cr,
Packit Service fb6fa5
		   left * context->surface_dpi_x / context->pixels_per_unit_x,
Packit Service fb6fa5
		   top * context->surface_dpi_y / context->pixels_per_unit_y);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
_gtk_print_context_set_page_setup (GtkPrintContext *context,
Packit Service fb6fa5
				   GtkPageSetup    *page_setup)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GTK_IS_PRINT_CONTEXT (context));
Packit Service fb6fa5
  g_return_if_fail (page_setup == NULL ||
Packit Service fb6fa5
		    GTK_IS_PAGE_SETUP (page_setup));
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_object_ref (page_setup);
Packit Service fb6fa5
Packit Service fb6fa5
  if (context->page_setup != NULL)
Packit Service fb6fa5
    g_object_unref (context->page_setup);
Packit Service fb6fa5
Packit Service fb6fa5
  context->page_setup = page_setup;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_get_cairo_context:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Obtains the cairo context that is associated with the
Packit Service fb6fa5
 * #GtkPrintContext.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: (transfer none): the cairo context of @context
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.10
Packit Service fb6fa5
 */
Packit Service fb6fa5
cairo_t *
Packit Service fb6fa5
gtk_print_context_get_cairo_context (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_CONTEXT (context), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return context->cr;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_get_page_setup:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Obtains the #GtkPageSetup that determines the page
Packit Service fb6fa5
 * dimensions of the #GtkPrintContext.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: (transfer none): the page setup of @context
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.10
Packit Service fb6fa5
 */
Packit Service fb6fa5
GtkPageSetup *
Packit Service fb6fa5
gtk_print_context_get_page_setup (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_CONTEXT (context), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return context->page_setup;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_get_width:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Obtains the width of the #GtkPrintContext, in pixels.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: the width of @context
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.10 
Packit Service fb6fa5
 */
Packit Service fb6fa5
gdouble
Packit Service fb6fa5
gtk_print_context_get_width (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintOperationPrivate *priv;
Packit Service fb6fa5
  gdouble width;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_CONTEXT (context), 0);
Packit Service fb6fa5
Packit Service fb6fa5
  priv = context->op->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  if (priv->use_full_page)
Packit Service fb6fa5
    width = gtk_page_setup_get_paper_width (context->page_setup, GTK_UNIT_INCH);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    width = gtk_page_setup_get_page_width (context->page_setup, GTK_UNIT_INCH);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Really dpi_x? What about landscape? what does dpi_x mean in that case? */
Packit Service fb6fa5
  return width * context->surface_dpi_x / context->pixels_per_unit_x;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_get_height:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Obtains the height of the #GtkPrintContext, in pixels.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: the height of @context
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.10
Packit Service fb6fa5
 */
Packit Service fb6fa5
gdouble
Packit Service fb6fa5
gtk_print_context_get_height (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPrintOperationPrivate *priv;
Packit Service fb6fa5
  gdouble height;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_CONTEXT (context), 0);
Packit Service fb6fa5
Packit Service fb6fa5
  priv = context->op->priv;
Packit Service fb6fa5
Packit Service fb6fa5
  if (priv->use_full_page)
Packit Service fb6fa5
    height = gtk_page_setup_get_paper_height (context->page_setup, GTK_UNIT_INCH);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    height = gtk_page_setup_get_page_height (context->page_setup, GTK_UNIT_INCH);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Really dpi_y? What about landscape? what does dpi_y mean in that case? */
Packit Service fb6fa5
  return height * context->surface_dpi_y / context->pixels_per_unit_y;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_get_dpi_x:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Obtains the horizontal resolution of the #GtkPrintContext,
Packit Service fb6fa5
 * in dots per inch.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: the horizontal resolution of @context
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.10
Packit Service fb6fa5
 */
Packit Service fb6fa5
gdouble
Packit Service fb6fa5
gtk_print_context_get_dpi_x (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_CONTEXT (context), 0);
Packit Service fb6fa5
Packit Service fb6fa5
  return context->surface_dpi_x;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_get_dpi_y:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Obtains the vertical resolution of the #GtkPrintContext,
Packit Service fb6fa5
 * in dots per inch.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: the vertical resolution of @context
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.10
Packit Service fb6fa5
 */
Packit Service fb6fa5
gdouble
Packit Service fb6fa5
gtk_print_context_get_dpi_y (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_CONTEXT (context), 0);
Packit Service fb6fa5
Packit Service fb6fa5
  return context->surface_dpi_y;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_get_hard_margins:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 * @top: (out): top hardware printer margin
Packit Service fb6fa5
 * @bottom: (out): bottom hardware printer margin
Packit Service fb6fa5
 * @left: (out): left hardware printer margin
Packit Service fb6fa5
 * @right: (out): right hardware printer margin
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Obtains the hardware printer margins of the #GtkPrintContext, in units.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: %TRUE if the hard margins were retrieved
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.20
Packit Service fb6fa5
 */
Packit Service fb6fa5
gboolean
Packit Service fb6fa5
gtk_print_context_get_hard_margins (GtkPrintContext *context,
Packit Service fb6fa5
				    gdouble         *top,
Packit Service fb6fa5
				    gdouble         *bottom,
Packit Service fb6fa5
				    gdouble         *left,
Packit Service fb6fa5
				    gdouble         *right)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (context->has_hard_margins)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      *top    = context->hard_margin_top / context->pixels_per_unit_y;
Packit Service fb6fa5
      *bottom = context->hard_margin_bottom / context->pixels_per_unit_y;
Packit Service fb6fa5
      *left   = context->hard_margin_left / context->pixels_per_unit_x;
Packit Service fb6fa5
      *right  = context->hard_margin_right / context->pixels_per_unit_x;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return context->has_hard_margins;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_set_hard_margins:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 * @top: top hardware printer margin
Packit Service fb6fa5
 * @bottom: bottom hardware printer margin
Packit Service fb6fa5
 * @left: left hardware printer margin
Packit Service fb6fa5
 * @right: right hardware printer margin
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * set the hard margins in pixel coordinates
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
_gtk_print_context_set_hard_margins (GtkPrintContext *context,
Packit Service fb6fa5
				     gdouble          top,
Packit Service fb6fa5
				     gdouble          bottom,
Packit Service fb6fa5
				     gdouble          left,
Packit Service fb6fa5
				     gdouble          right)
Packit Service fb6fa5
{
Packit Service fb6fa5
  context->hard_margin_top    = top;
Packit Service fb6fa5
  context->hard_margin_bottom = bottom;
Packit Service fb6fa5
  context->hard_margin_left   = left;
Packit Service fb6fa5
  context->hard_margin_right  = right;
Packit Service fb6fa5
  context->has_hard_margins   = TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_get_pango_fontmap:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Returns a #PangoFontMap that is suitable for use
Packit Service fb6fa5
 * with the #GtkPrintContext.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: (transfer none): the font map of @context
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.10
Packit Service fb6fa5
 */
Packit Service fb6fa5
PangoFontMap *
Packit Service fb6fa5
gtk_print_context_get_pango_fontmap (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_CONTEXT (context), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return _gtk_print_context_get_fontmap (context);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_create_pango_context:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Creates a new #PangoContext that can be used with the
Packit Service fb6fa5
 * #GtkPrintContext.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Return value: (transfer full): a new Pango context for @context
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Since: 2.10
Packit Service fb6fa5
 */
Packit Service fb6fa5
PangoContext *
Packit Service fb6fa5
gtk_print_context_create_pango_context (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  PangoContext *pango_context;
Packit Service fb6fa5
  cairo_font_options_t *options;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_CONTEXT (context), NULL);
Packit Service fb6fa5
  
Packit Service fb6fa5
  pango_context = pango_font_map_create_context (_gtk_print_context_get_fontmap (context));
Packit Service fb6fa5
Packit Service fb6fa5
  options = cairo_font_options_create ();
Packit Service fb6fa5
  cairo_font_options_set_hint_metrics (options, CAIRO_HINT_METRICS_OFF);
Packit Service fb6fa5
  pango_cairo_context_set_font_options (pango_context, options);
Packit Service fb6fa5
  cairo_font_options_destroy (options);
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* We use the unit-scaled resolution, as we still want 
Packit Service fb6fa5
   * fonts given in points to work 
Packit Service fb6fa5
   */
Packit Service fb6fa5
  pango_cairo_context_set_resolution (pango_context,
Packit Service fb6fa5
				      context->surface_dpi_y / context->pixels_per_unit_y);
Packit Service fb6fa5
  return pango_context;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gtk_print_context_create_pango_layout:
Packit Service fb6fa5
 * @context: a #GtkPrintContext
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Creates a new #PangoLayout that is suitable for use
Packit Service fb6fa5
 * with the #GtkPrintContext.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: (transfer full): a new Pango layout for @context
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.10
Packit Service fb6fa5
 */
Packit Service fb6fa5
PangoLayout *
Packit Service fb6fa5
gtk_print_context_create_pango_layout (GtkPrintContext *context)
Packit Service fb6fa5
{
Packit Service fb6fa5
  PangoContext *pango_context;
Packit Service fb6fa5
  PangoLayout *layout;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (GTK_IS_PRINT_CONTEXT (context), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  pango_context = gtk_print_context_create_pango_context (context);
Packit Service fb6fa5
  layout = pango_layout_new (pango_context);
Packit Service fb6fa5
Packit Service fb6fa5
  pango_cairo_update_context (context->cr, pango_context);
Packit Service fb6fa5
  g_object_unref (pango_context);
Packit Service fb6fa5
Packit Service fb6fa5
  return layout;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
#define __GTK_PRINT_CONTEXT_C__
Packit Service fb6fa5
#include "gtkaliasdef.c"