diff --git a/src/gtk/print.cpp b/src/gtk/print.cpp index b163adce60..7734e84a97 100644 --- a/src/gtk/print.cpp +++ b/src/gtk/print.cpp @@ -43,11 +43,6 @@ #include #endif - -#if wxUSE_GRAPHICS_CONTEXT -#include "wx/graphics.h" -#endif - #include "wx/link.h" wxFORCE_LINK_THIS_MODULE(gtk_print) @@ -56,6 +51,177 @@ wxFORCE_LINK_THIS_MODULE(gtk_print) // Useful to convert angles from degrees to radians. static const double DEG2RAD = M_PI / 180.0; +// Map wxPaperSize to GtkPaperSize names +// Ordering must be the same as wxPaperSize enum +static const char* const gs_paperList[] = { + NULL, // wxPAPER_NONE + "na_letter", // wxPAPER_LETTER + "na_legal", // wxPAPER_LEGAL + "iso_a4", // wxPAPER_A4 + "na_c", // wxPAPER_CSHEET + "na_d", // wxPAPER_DSHEET + "na_e", // wxPAPER_ESHEET + "na_letter", // wxPAPER_LETTERSMALL + "na_ledger", // wxPAPER_TABLOID + "na_ledger", // wxPAPER_LEDGER + "na_invoice", // wxPAPER_STATEMENT + "na_executive", // wxPAPER_EXECUTIVE + "iso_a3", // wxPAPER_A3 + "iso_a4", // wxPAPER_A4SMALL + "iso_a5", // wxPAPER_A5 + "jis_b4", // wxPAPER_B4 "B4 (JIS) 257 x 364 mm" + "jis_b5", // wxPAPER_B5 "B5 (JIS) 182 x 257 mm" + "om_folio", // wxPAPER_FOLIO + "na_quarto", // wxPAPER_QUARTO + "na_10x14", // wxPAPER_10X14 + "na_ledger", // wxPAPER_11X17 + "na_letter", // wxPAPER_NOTE + "na_number-9", // wxPAPER_ENV_9 + "na_number-10", // wxPAPER_ENV_10 + "na_number-11", // wxPAPER_ENV_11 + "na_number-12", // wxPAPER_ENV_12 + "na_number-14", // wxPAPER_ENV_14 + "iso_dl", // wxPAPER_ENV_DL + "iso_c5", // wxPAPER_ENV_C5 + "iso_c3", // wxPAPER_ENV_C3 + "iso_c4", // wxPAPER_ENV_C4 + "iso_c6", // wxPAPER_ENV_C6 + "iso_c6c5", // wxPAPER_ENV_C65 + "iso_b4", // wxPAPER_ENV_B4 + "iso_b5", // wxPAPER_ENV_B5 + "iso_b6", // wxPAPER_ENV_B6 + "om_italian", // wxPAPER_ENV_ITALY + "na_monarch", // wxPAPER_ENV_MONARCH + "na_personal", // wxPAPER_ENV_PERSONAL + "na_fanfold-us", // wxPAPER_FANFOLD_US + "na_fanfold-eur", // wxPAPER_FANFOLD_STD_GERMAN + "na_foolscap", // wxPAPER_FANFOLD_LGL_GERMAN + "iso_b4", // wxPAPER_ISO_B4 + "jpn_hagaki", // wxPAPER_JAPANESE_POSTCARD + "na_9x11", // wxPAPER_9X11 + "na_10x11", // wxPAPER_10X11 + "na_11x15", // wxPAPER_15X11 + "om_invite", // wxPAPER_ENV_INVITE + "na_letter-extra", // wxPAPER_LETTER_EXTRA + "na_legal-extra", // wxPAPER_LEGAL_EXTRA + "na_arch-b", // wxPAPER_TABLOID_EXTRA + "iso_a4-extra", // wxPAPER_A4_EXTRA + "na_letter", // wxPAPER_LETTER_TRANSVERSE + "iso_a4", // wxPAPER_A4_TRANSVERSE + "na_letter-extra", // wxPAPER_LETTER_EXTRA_TRANSVERSE + "na_super-a", // wxPAPER_A_PLUS + "na_super-b", // wxPAPER_B_PLUS + "na_letter-plus", // wxPAPER_LETTER_PLUS + "om_folio", // wxPAPER_A4_PLUS "A4 Plus 210 x 330 mm" (no A4 Plus in PWG standard) + "iso_a5", // wxPAPER_A5_TRANSVERSE + "jis_b5", // wxPAPER_B5_TRANSVERSE "B5 (JIS) Transverse 182 x 257 mm" + "iso_a3-extra", // wxPAPER_A3_EXTRA + "iso_a5-extra", // wxPAPER_A5_EXTRA + "iso_b5-extra", // wxPAPER_B5_EXTRA + "iso_a2", // wxPAPER_A2 + "iso_a3", // wxPAPER_A3_TRANSVERSE + "iso_a3-extra", // wxPAPER_A3_EXTRA_TRANSVERSE + "jpn_oufuku", // wxPAPER_DBL_JAPANESE_POSTCARD + "iso_a6", // wxPAPER_A6 + "jpn_kaku2", // wxPAPER_JENV_KAKU2 + "jpn_kaku3_216x277mm", // wxPAPER_JENV_KAKU3 + "jpn_chou3", // wxPAPER_JENV_CHOU3 + "jpn_chou4", // wxPAPER_JENV_CHOU4 + "na_letter", // wxPAPER_LETTER_ROTATED + "iso_a3", // wxPAPER_A3_ROTATED + "iso_a4", // wxPAPER_A4_ROTATED + "iso_a5", // wxPAPER_A5_ROTATED + "jis_b4", // wxPAPER_B4_JIS_ROTATED + "jis_b5", // wxPAPER_B5_JIS_ROTATED + "jpn_hagaki", // wxPAPER_JAPANESE_POSTCARD_ROTATED + "jpn_oufuku", // wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED + "iso_a6", // wxPAPER_A6_ROTATED + "jpn_kaku2", // wxPAPER_JENV_KAKU2_ROTATED + "jpn_kaku3_216x277mm", // wxPAPER_JENV_KAKU3_ROTATED + "jpn_chou3", // wxPAPER_JENV_CHOU3_ROTATED + "jpn_chou4", // wxPAPER_JENV_CHOU4_ROTATED + "jis_b6", // wxPAPER_B6_JIS + "jis_b6", // wxPAPER_B6_JIS_ROTATED + "na_11x12", // wxPAPER_12X11 + "jpn_you4", // wxPAPER_JENV_YOU4 + "jpn_you4", // wxPAPER_JENV_YOU4_ROTATED + "prc_16k", // wxPAPER_P16K + "prc_32k", // wxPAPER_P32K + "prc_32k", // wxPAPER_P32KBIG + "prc_1", // wxPAPER_PENV_1 + "prc_2", // wxPAPER_PENV_2 + "prc_3", // wxPAPER_PENV_3 + "prc_4", // wxPAPER_PENV_4 + "prc_5", // wxPAPER_PENV_5 + "prc_6", // wxPAPER_PENV_6 + "prc_7", // wxPAPER_PENV_7 + "prc_8", // wxPAPER_PENV_8 + "prc_9", // wxPAPER_PENV_9 + "prc_10", // wxPAPER_PENV_10 + "prc_16k", // wxPAPER_P16K_ROTATED + "prc_32k", // wxPAPER_P32K_ROTATED + "prc_32k", // wxPAPER_P32KBIG_ROTATED + "prc_1", // wxPAPER_PENV_1_ROTATED + "prc_2", // wxPAPER_PENV_2_ROTATED + "prc_3", // wxPAPER_PENV_3_ROTATED + "prc_4", // wxPAPER_PENV_4_ROTATED + "prc_5", // wxPAPER_PENV_5_ROTATED + "prc_6", // wxPAPER_PENV_6_ROTATED + "prc_7", // wxPAPER_PENV_7_ROTATED + "prc_8", // wxPAPER_PENV_8_ROTATED + "prc_9", // wxPAPER_PENV_9_ROTATED + "prc_10", // wxPAPER_PENV_10_ROTATED + "iso_a0", // wxPAPER_A0 + "iso_a1" // wxPAPER_A1 +}; + +static GtkPaperSize* wxGetGtkPaperSize(wxPaperSize paperId, const wxSize& size) +{ + // if wxPaperSize is valid, get corresponding GtkPaperSize + if (paperId > 0 && size_t(paperId) < WXSIZEOF(gs_paperList)) + return gtk_paper_size_new(gs_paperList[paperId]); + + // if size is not valid, use a default GtkPaperSize + if (size.x < 1 || size.y < 1) + return gtk_paper_size_new(gtk_paper_size_get_default()); + +#if GTK_CHECK_VERSION(2,12,0) +#ifndef __WXGTK3__ + if (gtk_check_version(2,12,0) == NULL) +#endif + { + // look for a size match in GTK's GtkPaperSize list + const double w = size.x; + const double h = size.y; + GtkPaperSize* paperSize = NULL; + GList* list = gtk_paper_size_get_paper_sizes(true); + for (GList* p = list; p; p = p->next) + { + GtkPaperSize* paperSize2 = static_cast(p->data); + if (paperSize == NULL && + fabs(w - gtk_paper_size_get_width(paperSize2, GTK_UNIT_MM)) < 1 && + fabs(h - gtk_paper_size_get_height(paperSize2, GTK_UNIT_MM)) < 1) + { + paperSize = paperSize2; + } + else + gtk_paper_size_free(paperSize2); + } + g_list_free(list); + + if (paperSize) + return paperSize + } +#endif // GTK >= 2.12 + + // last resort, use a custom GtkPaperSize + const wxString title = _("Custom size"); + char name[40]; + g_snprintf(name, sizeof(name), "custom_%ux%u", size.x, size.y); + return gtk_paper_size_new_custom( + name, title.utf8_str(), size.x, size.y, GTK_UNIT_MM); +} + //---------------------------------------------------------------------------- // wxGtkPrintModule // Initialized when starting the app : if it successfully load the gtk-print framework, @@ -301,96 +467,36 @@ bool wxGtkPrintNativeData::TransferTo( wxPrintData &data ) data.SetCollate(gtk_print_settings_get_collate (m_config)); - // Paper formats : these are the most common paper formats. + wxPaperSize paperId = wxPAPER_NONE; GtkPaperSize *paper_size = gtk_print_settings_get_paper_size (m_config); - if (!paper_size) - data.SetPaperId(wxPAPER_NONE); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new (GTK_PAPER_NAME_A3))) - data.SetPaperId(wxPAPER_A3); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new (GTK_PAPER_NAME_A4))) - data.SetPaperId(wxPAPER_A4); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new (GTK_PAPER_NAME_A5))) - data.SetPaperId(wxPAPER_A5); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new (GTK_PAPER_NAME_B5))) - data.SetPaperId(wxPAPER_B5); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new (GTK_PAPER_NAME_LETTER))) - data.SetPaperId(wxPAPER_LETTER); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new (GTK_PAPER_NAME_LEGAL))) - data.SetPaperId(wxPAPER_LEGAL); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new (GTK_PAPER_NAME_EXECUTIVE))) - data.SetPaperId(wxPAPER_EXECUTIVE); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"na_number-10"))) - data.SetPaperId(wxPAPER_ENV_10); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"iso-c5"))) - data.SetPaperId(wxPAPER_ENV_C5); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"iso-c6"))) - data.SetPaperId(wxPAPER_ENV_C6); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"jis-b5"))) - data.SetPaperId(wxPAPER_B5_TRANSVERSE); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"iso-b5"))) - data.SetPaperId(wxPAPER_ENV_B5); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"na_monarch"))) - data.SetPaperId(wxPAPER_ENV_MONARCH); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"engineering-c"))) - data.SetPaperId( wxPAPER_CSHEET); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"engineering-d"))) - data.SetPaperId( wxPAPER_DSHEET); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"engineering-e"))) - data.SetPaperId( wxPAPER_ESHEET); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"letter"))) - data.SetPaperId( wxPAPER_LETTERSMALL); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"engineering-b"))) - data.SetPaperId( wxPAPER_TABLOID); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"ledger"))) - data.SetPaperId( wxPAPER_LEDGER); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"statement"))) - data.SetPaperId( wxPAPER_STATEMENT); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( GTK_PAPER_NAME_A4 ))) - data.SetPaperId( wxPAPER_A4SMALL); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"iso-b4"))) - data.SetPaperId( wxPAPER_B4); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"folio"))) - data.SetPaperId( wxPAPER_FOLIO); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"quarto"))) - data.SetPaperId( wxPAPER_QUARTO); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"10x14"))) - data.SetPaperId( wxPAPER_10X14); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"ledger"))) - data.SetPaperId( wxPAPER_11X17); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"letter"))) - data.SetPaperId( wxPAPER_NOTE); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"na-number-9-envelope"))) - data.SetPaperId( wxPAPER_ENV_9); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"number-11"))) - data.SetPaperId( wxPAPER_ENV_11); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"number-12"))) - data.SetPaperId( wxPAPER_ENV_12); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"number-14"))) - data.SetPaperId( wxPAPER_ENV_14); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"iso-designated"))) - data.SetPaperId( wxPAPER_ENV_DL); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"iso-c3"))) - data.SetPaperId( wxPAPER_ENV_C3); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"iso-c4"))) - data.SetPaperId( wxPAPER_ENV_C4); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"c6/c5"))) - data.SetPaperId( wxPAPER_ENV_C65); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"iso-b4"))) - data.SetPaperId( wxPAPER_ENV_B4); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"iso-b6"))) - data.SetPaperId( wxPAPER_ENV_B6); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"Italian"))) - data.SetPaperId( wxPAPER_ENV_ITALY); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"personal"))) - data.SetPaperId( wxPAPER_ENV_PERSONAL); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"fanfold-us"))) - data.SetPaperId( wxPAPER_FANFOLD_US); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"fanfold-European"))) - data.SetPaperId( wxPAPER_FANFOLD_STD_GERMAN); - else if (gtk_paper_size_is_equal(paper_size,gtk_paper_size_new ( (const gchar*)"foolscap"))) - data.SetPaperId( wxPAPER_FANFOLD_LGL_GERMAN); - else - data.SetPaperId(wxPAPER_NONE); + if (paper_size) + { + const char* name = gtk_paper_size_get_name(paper_size); + for (size_t i = 1; i < WXSIZEOF(gs_paperList); i++) + { + if (strcmp(name, gs_paperList[i]) == 0) + { + paperId = static_cast(i); + break; + } + } + if (paperId == wxPAPER_NONE) + { + // look for a size match in wxThePrintPaperDatabase + const wxSize size( + int(10 * gtk_paper_size_get_width(paper_size, GTK_UNIT_MM)), + int(10 * gtk_paper_size_get_height(paper_size, GTK_UNIT_MM))); + + paperId = wxThePrintPaperDatabase->GetSize(size); + + // if no match, set custom size + if (paperId == wxPAPER_NONE) + data.SetPaperSize(size); + } + + gtk_paper_size_free(paper_size); + } + data.SetPaperId(paperId); data.SetPrinterName(gtk_print_settings_get_printer(m_config)); @@ -451,96 +557,9 @@ bool wxGtkPrintNativeData::TransferFrom( const wxPrintData &data ) gtk_print_settings_set_collate (m_config, data.GetCollate()); - // Paper formats: these are the most common paper formats. - switch (data.GetPaperId()) - { - case wxPAPER_A3: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new (GTK_PAPER_NAME_A3)); - break; - case wxPAPER_A4: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new (GTK_PAPER_NAME_A4)); - break; - case wxPAPER_A5: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new (GTK_PAPER_NAME_A5)); - break; - case wxPAPER_B5_TRANSVERSE: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "jis-b5")); - break; - case wxPAPER_B5: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new (GTK_PAPER_NAME_B5)); - break; - case wxPAPER_LETTER: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new (GTK_PAPER_NAME_LETTER)); - break; - case wxPAPER_LEGAL: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new (GTK_PAPER_NAME_LEGAL)); - break; - case wxPAPER_EXECUTIVE: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new (GTK_PAPER_NAME_EXECUTIVE)); - break; - case wxPAPER_ENV_10: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "na_number-10")); - break; - case wxPAPER_ENV_C5: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "iso-c5")); - break; - case wxPAPER_ENV_C6: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "iso-c6")); - break; - case wxPAPER_ENV_B5: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "iso-c5b5")); - break; - case wxPAPER_ENV_MONARCH: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "na_monarch")); - break; - case wxPAPER_CSHEET: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "engineering-c")); - break; - case wxPAPER_DSHEET: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "engineering-d")); - break; - case wxPAPER_ESHEET: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "engineering-e")); - break; - case wxPAPER_LETTERSMALL: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "letter")); - break; - case wxPAPER_TABLOID: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "engineering-b")); - break; - case wxPAPER_LEDGER: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "ledger")); - break; - case wxPAPER_STATEMENT: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "statement")); - break; - case wxPAPER_A4SMALL: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new (GTK_PAPER_NAME_A4)); - break; - case wxPAPER_B4: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "iso-b4")); - break; - case wxPAPER_FOLIO: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "folio")); - break; - case wxPAPER_QUARTO: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "quarto")); - break; - case wxPAPER_10X14: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "10x14")); - break; - case wxPAPER_11X17: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "ledger")); - break; - case wxPAPER_NOTE: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "letter")); - break; - case wxPAPER_ENV_9: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "na-number-9-envelope")); - break; - case wxPAPER_ENV_11: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "number-11")); - break; - case wxPAPER_ENV_12: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "number-12")); - break; - case wxPAPER_ENV_14: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "number-14")); - break; - case wxPAPER_ENV_DL: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "iso-designated")); - break; - case wxPAPER_ENV_C3: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "iso-c3")); - break; - case wxPAPER_ENV_C4: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "iso-c4")); - break; - case wxPAPER_ENV_C65: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "c6/c5")); - break; - case wxPAPER_ENV_B4: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "iso-b4")); - break; - case wxPAPER_ENV_B6: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "iso-b6")); - break; - case wxPAPER_ENV_ITALY: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "Italian")); - break; - case wxPAPER_ENV_PERSONAL: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "personal")); - break; - case wxPAPER_FANFOLD_US: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "fanfold-us")); - break; - case wxPAPER_FANFOLD_STD_GERMAN: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "fanfold-European")); - break; - case wxPAPER_FANFOLD_LGL_GERMAN: gtk_print_settings_set_paper_size(m_config, gtk_paper_size_new ((const gchar*) "foolscap")); - break; - case wxPAPER_NONE: - default: break; - } + GtkPaperSize* paperSize = wxGetGtkPaperSize(data.GetPaperId(), data.GetPaperSize()); + gtk_print_settings_set_paper_size(m_config, paperSize); + gtk_paper_size_free(paperSize); gtk_print_settings_set_printer(m_config, data.GetPrinterName().utf8_str()); @@ -750,15 +769,15 @@ int wxGtkPageSetupDialog::ShowModal() GtkPageSetup* oldPageSetup = native->GetPageSetupFromSettings(nativeData); // If the user used a custom paper format the last time he printed, we have to restore it too. - if (m_pageDialogData.GetPrintData().GetPaperId() == wxPAPER_NONE) + wxPaperSize paperId = m_pageDialogData.GetPrintData().GetPaperId(); + if (paperId == wxPAPER_NONE) { wxSize customPaperSize = m_pageDialogData.GetPaperSize(); if (customPaperSize.GetWidth() > 0 && customPaperSize.GetHeight() > 0) { - wxString title = _("Custom size"); - GtkPaperSize* customSize = gtk_paper_size_new_custom ("custom", title.mb_str(), (gdouble) customPaperSize.GetWidth(), (gdouble) customPaperSize.GetHeight(), GTK_UNIT_MM); + GtkPaperSize* customSize = wxGetGtkPaperSize(paperId, customPaperSize); gtk_page_setup_set_paper_size_and_default_margins (oldPageSetup, customSize); - g_object_unref(customSize); + gtk_paper_size_free(customSize); } }