Mercurial > projects > dwt-linux
diff dwt/printing/Printer.d @ 240:ce446666f5a2
Update to SWT 3.4M7
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 12 May 2008 19:13:01 +0200 |
parents | 380bad9f6852 |
children | 5a30aa9820f3 |
line wrap: on
line diff
--- a/dwt/printing/Printer.d Mon May 12 15:36:37 2008 +0200 +++ b/dwt/printing/Printer.d Mon May 12 19:13:01 2008 +0200 @@ -29,7 +29,7 @@ import dwt.dwthelper.utils; static import tango.stdc.stringz; -static import tango.io.Stdout; +import tango.io.Stdout; import tango.util.Convert; @@ -70,8 +70,8 @@ bool isGCCreated = false; Font systemFont; - String settingsData; - int start, end; + static String settingsData; + static int start, end; static const String GTK_LPR_BACKEND = "GtkPrintBackendLpr"; //$NON-NLS-1$ @@ -88,6 +88,14 @@ if (OS.GTK_VERSION < OS.buildVERSION (2, 10, 0) || disablePrinting) { return printerList; } + if (!OS.g_thread_supported ()) { + OS.g_thread_init (null); + } + OS.gtk_set_locale(); + int argc = 0; + if (!OS.gtk_init_check ( &argc, null)) { + DWT.error (DWT.ERROR_NO_HANDLES, null, " [gtk_init_check() failed]"); + } OS.gtk_enumerate_printers(&GtkPrinterFunc_List, null, null, true); return printerList; } @@ -124,6 +132,14 @@ if (OS.GTK_VERSION < OS.buildVERSION (2, 10, 0) || disablePrinting) { return null; } + if (!OS.g_thread_supported ()) { + OS.g_thread_init (null); + } + OS.gtk_set_locale(); + int argc = 0; + if (!OS.gtk_init_check (&argc, null)) { + DWT.error (DWT.ERROR_NO_HANDLES, null, " [gtk_init_check() failed]"); + } OS.gtk_enumerate_printers(&GtkPrinterFunc_Default, null, null, true); return printerList[0]; } @@ -132,6 +148,8 @@ if (OS.gtk_printer_is_default(printer)) { printerList[0] = printerDataFromGtkPrinter(printer); return 1; + } else if (OS.GTK_VERSION < OS.buildVERSION(2, 10, 12) && printerDataFromGtkPrinter(printer).driver.equals (GTK_LPR_BACKEND)) { + return 1; } return 0; } @@ -151,6 +169,8 @@ this.printer = printer; OS.g_object_ref(printer); return 1; + } else if (OS.GTK_VERSION < OS.buildVERSION (2, 10, 12) && pd.driver.equals(GTK_LPR_BACKEND)) { + return 1; } return 0; } @@ -166,6 +186,56 @@ return new PrinterData (backendType, name); } +/* +* Restore printer settings and page_setup data from data. +*/ +static void restore(char[] data, GtkPrintSettings* settings, GtkPageSetup* page_setup) { + settingsData = data; + start = end = 0; + while (end < settingsData.length && settingsData[end] !is 0) { + start = end; + while (end < settingsData.length && settingsData[end] !is 0) end++; + end++; + char [] keyBuffer = new char [end - start]; + System.arraycopy (settingsData, start, keyBuffer, 0, keyBuffer.length); + start = end; + while (end < settingsData.length && settingsData[end] !is 0) end++; + end++; + char [] valueBuffer = new char [end - start]; + System.arraycopy (settingsData, start, valueBuffer, 0, valueBuffer.length); + OS.gtk_print_settings_set(settings, keyBuffer.ptr, valueBuffer.ptr); + if (DEBUG) Stdout.formatln("{}: {}", keyBuffer, valueBuffer ); + } + end++; // skip extra null terminator + + /* Retrieve stored page_setup data. + * Note that page_setup properties must be stored (in PrintDialog) and restored (here) in the same order. + */ + OS.gtk_page_setup_set_orientation(page_setup, restoreInt("orientation")); //$NON-NLS-1$ + OS.gtk_page_setup_set_top_margin(page_setup, restoreDouble("top_margin"), OS.GTK_UNIT_MM); //$NON-NLS-1$ + OS.gtk_page_setup_set_bottom_margin(page_setup, restoreDouble("bottom_margin"), OS.GTK_UNIT_MM); //$NON-NLS-1$ + OS.gtk_page_setup_set_left_margin(page_setup, restoreDouble("left_margin"), OS.GTK_UNIT_MM); //$NON-NLS-1$ + OS.gtk_page_setup_set_right_margin(page_setup, restoreDouble("right_margin"), OS.GTK_UNIT_MM); //$NON-NLS-1$ + char [] name = restoreBytes("paper_size_name", true); //$NON-NLS-1$ + char [] display_name = restoreBytes("paper_size_display_name", true); //$NON-NLS-1$ + char [] ppd_name = restoreBytes("paper_size_ppd_name", true); //$NON-NLS-1$ + double width = restoreDouble("paper_size_width"); //$NON-NLS-1$ + double height = restoreDouble("paper_size_height"); //$NON-NLS-1$ + bool custom = restoreBoolean("paper_size_is_custom"); //$NON-NLS-1$ + GtkPaperSize* paper_size = null; + if (custom) { + if (ppd_name.length > 0) { + paper_size = OS.gtk_paper_size_new_from_ppd(ppd_name.ptr, display_name.ptr, width, height); + } else { + paper_size = OS.gtk_paper_size_new_custom(name.ptr, display_name.ptr, width, height, OS.GTK_UNIT_MM); + } + } else { + paper_size = OS.gtk_paper_size_new(name.ptr); + } + OS.gtk_page_setup_set_paper_size(page_setup, paper_size); + OS.gtk_paper_size_free(paper_size); +} + static void setScope(GtkPrintSettings* settings, int scope_, int startPage, int endPage) { switch (scope_) { case PrinterData.ALL_PAGES: @@ -235,22 +305,22 @@ super(checkNull(data)); } -int restoreInt(String key) { +static int restoreInt(String key) { char [] value = restoreBytes(key, false); return to!(int)( value ); } -double restoreDouble(String key) { +static double restoreDouble(String key) { char [] value = restoreBytes(key, false); return to!(double)( value ); } -bool restoreBoolean(String key) { +static bool restoreBoolean(String key) { char [] value = restoreBytes(key, false); return to!(bool)( value ); } -String restoreBytes(String key, bool nullTerminate) { +static String restoreBytes(String key, bool nullTerminate) { //get key start = end; while (end < settingsData.length && settingsData[end] !is 0) end++; @@ -328,7 +398,10 @@ data.drawable = drawable; data.background = getSystemColor (DWT.COLOR_WHITE).handle; data.foreground = getSystemColor (DWT.COLOR_BLACK).handle; - data.font = getSystemFont ().handle; + data.font = getSystemFont (); + //TODO: We are supposed to return this in pixels, but GTK_UNIT_PIXELS is currently not implemented (gtk bug 346245) + data.width = cast(int)OS.gtk_page_setup_get_paper_width (pageSetup, OS.GTK_UNIT_POINTS); + data.height = cast(int)OS.gtk_page_setup_get_paper_height (pageSetup, OS.GTK_UNIT_POINTS); if (cairo is null) DWT.error(DWT.ERROR_NO_HANDLES); data.cairo = cairo; isGCCreated = true; @@ -656,51 +729,7 @@ settings = OS.gtk_print_settings_new(); pageSetup = OS.gtk_page_setup_new(); if (data.otherData !is null) { - /* Retreive stored printer_settings data. */ - settingsData = data.otherData; - start = end = 0; - while (end < settingsData.length && settingsData[end] !is 0) { - start = end; - while (end < settingsData.length && settingsData[end] !is 0) end++; - end++; - char [] keyBuffer = new char [end - start]; - System.arraycopy (settingsData, start, keyBuffer, 0, keyBuffer.length); - start = end; - while (end < settingsData.length && settingsData[end] !is 0) end++; - end++; - char [] valueBuffer = new char [end - start]; - System.arraycopy (settingsData, start, valueBuffer, 0, valueBuffer.length); - OS.gtk_print_settings_set(settings, keyBuffer.ptr, valueBuffer.ptr); - if (DEBUG) tango.io.Stdout.Stdout.formatln("{}: {}", keyBuffer, valueBuffer); - } - end++; // skip extra null terminator - - /* Retreive stored page_setup data. - * Note that page_setup properties must be stored (in PrintDialog) and restored (here) in the same order. - */ - OS.gtk_page_setup_set_orientation(pageSetup, restoreInt("orientation")); //$NON-NLS-1$ - OS.gtk_page_setup_set_top_margin(pageSetup, restoreDouble("top_margin"), OS.GTK_UNIT_MM); //$NON-NLS-1$ - OS.gtk_page_setup_set_bottom_margin(pageSetup, restoreDouble("bottom_margin"), OS.GTK_UNIT_MM); //$NON-NLS-1$ - OS.gtk_page_setup_set_left_margin(pageSetup, restoreDouble("left_margin"), OS.GTK_UNIT_MM); //$NON-NLS-1$ - OS.gtk_page_setup_set_right_margin(pageSetup, restoreDouble("right_margin"), OS.GTK_UNIT_MM); //$NON-NLS-1$ - char [] name = restoreBytes("paper_size_name", true); //$NON-NLS-1$ - char [] display_name = restoreBytes("paper_size_display_name", true); //$NON-NLS-1$ - char [] ppd_name = restoreBytes("paper_size_ppd_name", true); //$NON-NLS-1$ - double width = restoreDouble("paper_size_width"); //$NON-NLS-1$ - double height = restoreDouble("paper_size_height"); //$NON-NLS-1$ - bool custom = restoreBoolean("paper_size_is_custom"); //$NON-NLS-1$ - GtkPaperSize* paper_size; - if (custom) { - if (ppd_name.length > 0) { - paper_size = OS.gtk_paper_size_new_from_ppd(ppd_name.ptr, display_name.ptr, width, height); - } else { - paper_size = OS.gtk_paper_size_new_custom(name.ptr, display_name.ptr, width, height, OS.GTK_UNIT_MM); - } - } else { - paper_size = OS.gtk_paper_size_new(name.ptr); - } - OS.gtk_page_setup_set_paper_size(pageSetup, paper_size); - OS.gtk_paper_size_free(paper_size); + restore(data.otherData, settings, pageSetup); } /* Set values of settings from PrinterData. */