[gedit/wip/printing-enhancements] print-preview: do not store the dpi
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit/wip/printing-enhancements] print-preview: do not store the dpi
- Date: Sun, 28 Jun 2015 14:25:30 +0000 (UTC)
commit 21d6c3bf14eb9d1fc7653127fd5fb3b493563f69
Author: Sébastien Wilmet <swilmet gnome org>
Date: Sun Jun 28 16:21:13 2015 +0200
print-preview: do not store the dpi
It can be computed when needed. I don't think performance is important
here. Except if there is a round trip between the X server and GDK to
get the DPI. But I hope GDK does the caching for us.
gedit/gedit-print-preview.c | 64 +++++++++++++++++++++++-------------------
1 files changed, 35 insertions(+), 29 deletions(-)
---
diff --git a/gedit/gedit-print-preview.c b/gedit/gedit-print-preview.c
index 73b1ce8..6d40dfa 100644
--- a/gedit/gedit-print-preview.c
+++ b/gedit/gedit-print-preview.c
@@ -61,7 +61,6 @@ struct _GeditPrintPreview
*/
GtkLayout *layout;
- gdouble dpi;
gdouble scale;
/* multipage support */
@@ -142,6 +141,35 @@ gedit_print_preview_class_init (GeditPrintPreviewClass *klass)
gtk_widget_class_bind_template_child (widget_class, GeditPrintPreview, layout);
}
+static gdouble
+get_screen_dpi (GeditPrintPreview *preview)
+{
+ GdkScreen *screen;
+ gdouble dpi;
+ static gboolean warning_shown = FALSE;
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (preview));
+
+ if (screen == NULL)
+ {
+ return PRINTER_DPI;
+ }
+
+ dpi = gdk_screen_get_resolution (screen);
+ if (dpi < 30.0 || 600.0 < dpi)
+ {
+ if (!warning_shown)
+ {
+ g_warning ("Invalid the x-resolution for the screen, assuming 96dpi");
+ warning_shown = TRUE;
+ }
+
+ dpi = 96.0;
+ }
+
+ return dpi;
+}
+
/* Get the paper size in points: these must be used only
* after the widget has been mapped and the dpi is known.
*/
@@ -154,7 +182,7 @@ get_paper_width (GeditPrintPreview *preview)
page_setup = gtk_print_context_get_page_setup (preview->context);
paper_width = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_INCH);
- return paper_width * preview->dpi;
+ return paper_width * get_screen_dpi (preview);
}
static gdouble
@@ -166,7 +194,7 @@ get_paper_height (GeditPrintPreview *preview)
page_setup = gtk_print_context_get_page_setup (preview->context);
paper_height = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_INCH);
- return paper_height * preview->dpi;
+ return paper_height * get_screen_dpi (preview);
}
/* The tile size is the size in pixels of the area where a page will be
@@ -788,7 +816,6 @@ static void
gedit_print_preview_init (GeditPrintPreview *preview)
{
preview->cur_page = 0;
- preview->dpi = PRINTER_DPI;
preview->scale = 1.0;
preview->n_columns = 1;
preview->cursor_x = 0;
@@ -881,13 +908,13 @@ draw_page_content (cairo_t *cr,
gint page_number,
GeditPrintPreview *preview)
{
+ gdouble dpi;
+
/* scale to the desired size */
cairo_scale (cr, preview->scale, preview->scale);
- gtk_print_context_set_cairo_context (preview->context,
- cr,
- preview->dpi,
- preview->dpi);
+ dpi = get_screen_dpi (preview);
+ gtk_print_context_set_cairo_context (preview->context, cr, dpi, dpi);
gtk_print_operation_preview_render_page (preview->gtk_preview,
page_number);
@@ -993,24 +1020,6 @@ preview_draw (GtkWidget *widget,
return GDK_EVENT_STOP;
}
-static gdouble
-get_screen_dpi (GeditPrintPreview *preview)
-{
- GdkScreen *screen;
- gdouble dpi;
-
- screen = gtk_widget_get_screen (GTK_WIDGET (preview));
-
- dpi = gdk_screen_get_resolution (screen);
- if (dpi < 30.0 || 600.0 < dpi)
- {
- g_warning ("Invalid the x-resolution for the screen, assuming 96dpi");
- dpi = 96.0;
- }
-
- return dpi;
-}
-
static void
set_n_pages (GeditPrintPreview *preview,
gint n_pages)
@@ -1035,9 +1044,6 @@ preview_ready (GtkPrintOperationPreview *gtk_preview,
set_n_pages (preview, n_pages);
goto_page (preview, 0);
- /* figure out the dpi */
- preview->dpi = get_screen_dpi (preview);
-
set_zoom_factor (preview, 1.0);
/* let the default gtklayout handler clear the background */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]