[gtk+] Allow getting the printer's hard margins



commit efa90e418234f7773370f17e7f7bd47757b71d7b
Author: Christian Persch <chpe gnome org>
Date:   Wed Feb 6 23:58:47 2008 +0100

    Allow getting the printer's hard margins
    
    Adds a way to get the unprintable area of the printer. Bug #468989.

 docs/reference/gtk/gtk-sections.txt              |    1 +
 gtk/gtk.symbols                                  |    1 +
 gtk/gtkcustompaperunixdialog.c                   |    3 +-
 gtk/gtkprintbackend.c                            |   14 ++++---
 gtk/gtkprintbackend.h                            |   10 +++---
 gtk/gtkprinter-private.h                         |    5 ---
 gtk/gtkprinter.c                                 |   38 ++++++++++++++++------
 gtk/gtkprinter.h                                 |    5 +++
 modules/printbackends/cups/gtkprintbackendcups.c |   16 +++++----
 9 files changed, 59 insertions(+), 34 deletions(-)
---
diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index 1672e5f..93ec24e 100644
--- a/docs/reference/gtk/gtk-sections.txt
+++ b/docs/reference/gtk/gtk-sections.txt
@@ -6864,6 +6864,7 @@ gtk_printer_has_details
 gtk_printer_request_details
 gtk_printer_get_capabilities
 gtk_printer_get_default_page_size
+gtk_printer_get_hard_margins
 GtkPrinterFunc
 gtk_enumerate_printers
 
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index 05e20fe..40f3261 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -2945,6 +2945,7 @@ gtk_printer_compare
 gtk_printer_has_details
 gtk_printer_request_details
 gtk_printer_get_capabilities
+gtk_printer_get_hard_margins
 gtk_enumerate_printers
 gtk_print_capabilities_get_type G_GNUC_CONST
 #endif
diff --git a/gtk/gtkcustompaperunixdialog.c b/gtk/gtkcustompaperunixdialog.c
index 9006eab..a5c9bc9 100644
--- a/gtk/gtkcustompaperunixdialog.c
+++ b/gtk/gtkcustompaperunixdialog.c
@@ -802,7 +802,8 @@ set_margins_from_printer (GtkCustomPaperUnixDialog *dialog,
   gdouble top, bottom, left, right;
 
   top = bottom = left = right = 0;
-  _gtk_printer_get_hard_margins (printer, &top, &bottom, &left, &right);
+  if (!gtk_printer_get_hard_margins (printer, &top, &bottom, &left, &right))
+    return;
 
   priv->non_user_change = TRUE;
   unit_widget_set (priv->top_widget, _gtk_print_convert_to_mm (top, GTK_UNIT_POINTS));
diff --git a/gtk/gtkprintbackend.c b/gtk/gtkprintbackend.c
index 3c64823..4b8b0de 100644
--- a/gtk/gtkprintbackend.c
+++ b/gtk/gtkprintbackend.c
@@ -349,11 +349,11 @@ G_DEFINE_TYPE (GtkPrintBackend, gtk_print_backend, G_TYPE_OBJECT)
 static void                 fallback_printer_request_details       (GtkPrinter          *printer);
 static gboolean             fallback_printer_mark_conflicts        (GtkPrinter          *printer,
 								    GtkPrinterOptionSet *options);
-static void                 fallback_printer_get_hard_margins      (GtkPrinter          *printer,
-								    gdouble             *top,
-								    gdouble             *bottom,
-								    gdouble             *left,
-								    gdouble             *right);
+static gboolean             fallback_printer_get_hard_margins      (GtkPrinter          *printer,
+                                                                    gdouble             *top,
+                                                                    gdouble             *bottom,
+                                                                    gdouble             *left,
+                                                                    gdouble             *right);
 static GList *              fallback_printer_list_papers           (GtkPrinter          *printer);
 static GtkPageSetup *       fallback_printer_get_default_page_size (GtkPrinter          *printer);
 static GtkPrintCapabilities fallback_printer_get_capabilities      (GtkPrinter          *printer);
@@ -494,7 +494,7 @@ fallback_printer_mark_conflicts (GtkPrinter          *printer,
   return FALSE;
 }
 
-static void
+static gboolean
 fallback_printer_get_hard_margins (GtkPrinter *printer,
 				   gdouble    *top,
 				   gdouble    *bottom,
@@ -505,6 +505,8 @@ fallback_printer_get_hard_margins (GtkPrinter *printer,
   *bottom = 0;
   *left = 0;
   *right = 0;
+
+  return TRUE;
 }
 
 static GList *
diff --git a/gtk/gtkprintbackend.h b/gtk/gtkprintbackend.h
index c4b43b1..e19193f 100644
--- a/gtk/gtkprintbackend.h
+++ b/gtk/gtkprintbackend.h
@@ -104,11 +104,11 @@ struct _GtkPrintBackendClass
 							      GtkPageSetup        *page_setup);
   GList  *              (*printer_list_papers)               (GtkPrinter          *printer);
   GtkPageSetup *        (*printer_get_default_page_size)     (GtkPrinter          *printer);
-  void                  (*printer_get_hard_margins)          (GtkPrinter          *printer,
-							      double              *top,
-							      double              *bottom,
-							      double              *left,
-							      double              *right);
+  gboolean              (*printer_get_hard_margins)          (GtkPrinter          *printer,
+							      gdouble             *top,
+							      gdouble             *bottom,
+							      gdouble             *left,
+							      gdouble             *right);
   GtkPrintCapabilities  (*printer_get_capabilities)          (GtkPrinter          *printer);
 
   /* Signals */
diff --git a/gtk/gtkprinter-private.h b/gtk/gtkprinter-private.h
index 39165bd..a5786d0 100644
--- a/gtk/gtkprinter-private.h
+++ b/gtk/gtkprinter-private.h
@@ -45,11 +45,6 @@ cairo_surface_t *    _gtk_printer_create_cairo_surface      (GtkPrinter
 							     gdouble              width,
 							     gdouble              height,
 							     GIOChannel          *cache_io);
-void                 _gtk_printer_get_hard_margins          (GtkPrinter          *printer,
-							     gdouble             *top,
-							     gdouble             *bottom,
-							     gdouble             *left,
-							     gdouble             *right);
 GHashTable *         _gtk_printer_get_custom_widgets        (GtkPrinter          *printer);
 
 /* GtkPrintJob private methods: */
diff --git a/gtk/gtkprinter.c b/gtk/gtkprinter.c
index 0e9fd77..20cbfe2 100644
--- a/gtk/gtkprinter.c
+++ b/gtk/gtkprinter.c
@@ -951,12 +951,12 @@ gtk_printer_list_papers (GtkPrinter *printer)
 /**
  * gtk_printer_get_default_page_size:
  * @printer: a #GtkPrinter
- * 
+ *
  * Returns default page size of @printer.
  * 
  * Return value: a newly allocated #GtkPageSetup with default page size of the printer.
  *
- * Since: 2.13
+ * Since: 2.14
  */
 GtkPageSetup  *
 gtk_printer_get_default_page_size (GtkPrinter *printer)
@@ -969,16 +969,34 @@ gtk_printer_get_default_page_size (GtkPrinter *printer)
   return backend_class->printer_get_default_page_size (printer);
 }
 
-void
-_gtk_printer_get_hard_margins (GtkPrinter *printer,
-			       gdouble    *top,
-			       gdouble    *bottom,
-			       gdouble    *left,
-			       gdouble    *right)
+/**
+ * gtk_printer_get_hard_margins:
+ * @printer: a #GtkPrinter
+ * @top: a location to store the top margin in
+ * @bottom: a location to store the bottom margin in
+ * @left: a location to store the left margin in
+ * @right: a location to store the right margin in
+ *
+ * Retrieve the hard margins of @printer, i.e. the margins that define
+ * the area at the borders of the paper that the printer cannot print to.
+ *
+ * Note: This will not succeed unless the printer's details are available,
+ * see gtk_printer_has_details() and gtk_printer_request_details().
+ *
+ * Return value: %TRUE iff the hard margins were retrieved
+ *
+ * Since: 2.18
+ */
+gboolean
+gtk_printer_get_hard_margins (GtkPrinter *printer,
+			      gdouble    *top,
+			      gdouble    *bottom,
+			      gdouble    *left,
+			      gdouble    *right)
 {
   GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
 
-  backend_class->printer_get_hard_margins (printer, top, bottom, left, right);
+  return backend_class->printer_get_hard_margins (printer, top, bottom, left, right);
 }
 
 /**
@@ -993,7 +1011,7 @@ _gtk_printer_get_hard_margins (GtkPrinter *printer,
  *
  * This will return 0 unless the printer's details are available, see
  * gtk_printer_has_details() and gtk_printer_request_details().
- *  *
+ *
  * Return value: the printer's capabilities
  *
  * Since: 2.12
diff --git a/gtk/gtkprinter.h b/gtk/gtkprinter.h
index a61cfc3..527582c 100644
--- a/gtk/gtkprinter.h
+++ b/gtk/gtkprinter.h
@@ -113,6 +113,11 @@ gint                     gtk_printer_compare               (GtkPrinter *a,
 gboolean                 gtk_printer_has_details           (GtkPrinter       *printer);
 void                     gtk_printer_request_details       (GtkPrinter       *printer);
 GtkPrintCapabilities     gtk_printer_get_capabilities      (GtkPrinter       *printer);
+gboolean                 gtk_printer_get_hard_margins      (GtkPrinter       *printer,
+                                                            gdouble          *top,
+                                                            gdouble          *bottom,
+                                                            gdouble          *left,
+                                                            gdouble          *right);
 
 typedef gboolean (*GtkPrinterFunc) (GtkPrinter *printer,
 				    gpointer    data);
diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c
index 0bae98f..f98364a 100644
--- a/modules/printbackends/cups/gtkprintbackendcups.c
+++ b/modules/printbackends/cups/gtkprintbackendcups.c
@@ -158,11 +158,11 @@ static GtkPageSetup *       cups_printer_get_default_page_size     (GtkPrinter
 static void                 cups_printer_request_details           (GtkPrinter                        *printer);
 static gboolean             cups_request_default_printer           (GtkPrintBackendCups               *print_backend);
 static gboolean             cups_request_ppd                       (GtkPrinter                        *printer);
-static void                 cups_printer_get_hard_margins          (GtkPrinter                        *printer,
-								    double                            *top,
-								    double                            *bottom,
-								    double                            *left,
-								    double                            *right);
+static gboolean             cups_printer_get_hard_margins          (GtkPrinter                        *printer,
+								    gdouble                           *top,
+								    gdouble                           *bottom,
+								    gdouble                           *left,
+								    gdouble                           *right);
 static GtkPrintCapabilities cups_printer_get_capabilities          (GtkPrinter                        *printer);
 static void                 set_option_from_settings               (GtkPrinterOption                  *option,
 								    GtkPrintSettings                  *setting);
@@ -4428,7 +4428,7 @@ cups_printer_get_default_page_size (GtkPrinter *printer)
   return create_page_setup (ppd_file, size);
 }
 
-static void
+static gboolean
 cups_printer_get_hard_margins (GtkPrinter *printer,
 			       gdouble    *top,
 			       gdouble    *bottom,
@@ -4439,12 +4439,14 @@ cups_printer_get_hard_margins (GtkPrinter *printer,
 
   ppd_file = gtk_printer_cups_get_ppd (GTK_PRINTER_CUPS (printer));
   if (ppd_file == NULL)
-    return;
+    return FALSE;
 
   *left = ppd_file->custom_margins[0];
   *bottom = ppd_file->custom_margins[1];
   *right = ppd_file->custom_margins[2];
   *top = ppd_file->custom_margins[3];
+
+  return TRUE;
 }
 
 static GtkPrintCapabilities



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]