From a42107389f1ff4097b0671f2d74819bd531b3c29 Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Sat, 21 Nov 2009 21:12:16 +1030 Subject: [PATCH] Set win32 printer hard margins on print context --- gtk/gtkprintoperation-win32.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/gtk/gtkprintoperation-win32.c b/gtk/gtkprintoperation-win32.c index b7210f0d8..79f747f5d 100644 --- a/gtk/gtkprintoperation-win32.c +++ b/gtk/gtkprintoperation-win32.c @@ -436,6 +436,22 @@ get_default_printer (void) return printer_name; } +static void +set_hard_margins (GtkPrintOperation *op) +{ + double top, bottom, left, right; + GtkPrintOperationWin32 *op_win32 = op->priv->platform_data; + + top = GetDeviceCaps (op_win32->hdc, PHYSICALOFFSETY); + bottom = GetDeviceCaps (op_win32->hdc, PHYSICALHEIGHT) + - GetDeviceCaps (op_win32->hdc, VERTRES) - top; + left = GetDeviceCaps (op_win32->hdc, PHYSICALOFFSETX); + right = GetDeviceCaps (op_win32->hdc, PHYSICALWIDTH) + - GetDeviceCaps (op_win32->hdc, HORZRES) - left; + + _gtk_print_context_set_hard_margins (op->priv->print_context, top, bottom, left, right); +} + void win32_start_page (GtkPrintOperation *op, GtkPrintContext *print_context, @@ -470,6 +486,7 @@ win32_start_page (GtkPrintOperation *op, GlobalUnlock (op_win32->devmode); + set_hard_margins (op); x_off = GetDeviceCaps (op_win32->hdc, PHYSICALOFFSETX); y_off = GetDeviceCaps (op_win32->hdc, PHYSICALOFFSETY); cairo_surface_set_device_offset (op_win32->surface, -x_off, -y_off); @@ -1565,6 +1582,8 @@ gtk_print_operation_run_without_dialog (GtkPrintOperation *op, gtk_print_context_set_cairo_context (priv->print_context, cr, dpi_x, dpi_y); cairo_destroy (cr); + set_hard_margins (op); + memset (&docinfo, 0, sizeof (DOCINFOW)); docinfo.cbSize = sizeof (DOCINFOW); docinfo.lpszDocName = g_utf8_to_utf16 (op->priv->job_name, -1, NULL, NULL, NULL); @@ -1789,7 +1808,9 @@ gtk_print_operation_run_with_dialog (GtkPrintOperation *op, cr = cairo_create (op_win32->surface); gtk_print_context_set_cairo_context (priv->print_context, cr, dpi_x, dpi_y); cairo_destroy (cr); - + + set_hard_margins (op); + memset ( &docinfo, 0, sizeof (DOCINFOW)); docinfo.cbSize = sizeof (DOCINFOW); docinfo.lpszDocName = g_utf8_to_utf16 (op->priv->job_name, -1, NULL, NULL, NULL); -- 2.43.2