Improve conversion between wxPaperSize and GtkPaperSize

by using a table to map the screwy Windows DMPAPER_* stuff, which wxWidgets stupidly uses.
Eliminates many "Gtk-WARNING **: Unknown paper size", and the occasional
"GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed".
And fixes approximately one zillion memory leaks.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76268 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett
2014-04-04 06:05:23 +00:00
parent fcec1f4e02
commit 15dd9e117c

View File

@@ -43,11 +43,6 @@
#include <gtk/gtkpagesetupunixdialog.h>
#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<GtkPaperSize*>(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<wxPaperSize>(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);
}
}