| Index: printing/printing_context_cairo.cc
|
| ===================================================================
|
| --- printing/printing_context_cairo.cc (revision 67925)
|
| +++ printing/printing_context_cairo.cc (working copy)
|
| @@ -6,18 +6,22 @@
|
|
|
| #include <gtk/gtk.h>
|
| #include <gtk/gtkprintunixdialog.h>
|
| +#include <unicode/ulocdata.h>
|
|
|
| #include "base/logging.h"
|
| +#include "printing/native_metafile.h"
|
| #include "printing/print_settings_initializer_gtk.h"
|
| +#include "printing/units.h"
|
|
|
| namespace printing {
|
|
|
| // static
|
| -PrintingContext* PrintingContext::Create() {
|
| - return static_cast<PrintingContext*>(new PrintingContextCairo);
|
| + PrintingContext* PrintingContext::Create(const std::string& app_locale) {
|
| + return static_cast<PrintingContext*>(new PrintingContextCairo(app_locale));
|
| }
|
|
|
| -PrintingContextCairo::PrintingContextCairo() : PrintingContext() {
|
| + PrintingContextCairo::PrintingContextCairo(const std::string& app_locale)
|
| + : PrintingContext(app_locale) {
|
| }
|
|
|
| PrintingContextCairo::~PrintingContextCairo() {
|
| @@ -37,7 +41,46 @@
|
| DCHECK(!in_print_job_);
|
|
|
| ResetSettings();
|
| +#if defined(OS_CHROMEOS)
|
| + // For Chrome OS use default values based on the app locale rather than rely
|
| + // on GTK. Note that relying on the app locale does not work if the user uses
|
| + // Chinese ChromeOS in the US.
|
| + // TODO(sanjeevr): We need a better feedback loop between the cloud print
|
| + // dialog and this code.
|
| + int dpi = 300;
|
| + gfx::Size physical_size_device_units;
|
| + gfx::Rect printable_area_device_units;
|
| + int32_t width = 0;
|
| + int32_t height = 0;
|
| + UErrorCode error = U_ZERO_ERROR;
|
| + ulocdata_getPaperSize(app_locale_.c_str(), &height, &width, &error);
|
| + if (error != U_ZERO_ERROR) {
|
| + // If the call failed, assume a paper size of 8.5 x 11 inches.
|
| + LOG(WARNING) << "ulocdata_getPaperSize failed, using 8.5 x 11, error: "
|
| + << error;
|
| + width = static_cast<int>(8.5 * dpi);
|
| + height = static_cast<int>(11 * dpi);
|
| + } else {
|
| + // ulocdata_getPaperSize returns the width and height in mm.
|
| + // Convert this to pixels based on the dpi.
|
| + width = static_cast<int>(ConvertUnitDouble(width, 25.4, 1.0) * dpi);
|
| + height = static_cast<int>(ConvertUnitDouble(height, 25.4, 1.0) * dpi);
|
| + }
|
|
|
| + physical_size_device_units.SetSize(width, height);
|
| + printable_area_device_units.SetRect(
|
| + static_cast<int>(NativeMetafile::kLeftMarginInInch * dpi),
|
| + static_cast<int>(NativeMetafile::kTopMarginInInch * dpi),
|
| + width - (NativeMetafile::kLeftMarginInInch +
|
| + NativeMetafile::kRightMarginInInch) * dpi,
|
| + height - (NativeMetafile::kTopMarginInInch +
|
| + NativeMetafile::kBottomMarginInInch) * dpi);
|
| +
|
| + settings_.set_dpi(dpi);
|
| + settings_.SetPrinterPrintableArea(physical_size_device_units,
|
| + printable_area_device_units,
|
| + dpi);
|
| +#else // defined(OS_CHROMEOS)
|
| GtkWidget* dialog = gtk_print_unix_dialog_new(NULL, NULL);
|
| GtkPrintSettings* settings =
|
| gtk_print_unix_dialog_get_settings(GTK_PRINT_UNIX_DIALOG(dialog));
|
| @@ -51,6 +94,7 @@
|
| g_object_unref(settings);
|
| // |page_setup| is owned by dialog, so it does not need to be unref'ed.
|
| gtk_widget_destroy(dialog);
|
| +#endif // defined(OS_CHROMEOS)
|
|
|
| return OK;
|
| }
|
|
|