Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(747)

Unified Diff: printing/printing_context_cairo.cc

Issue 5636001: On Chrome OS, use the application locale to determine the default paper size ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Review comments addressed Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « printing/printing_context_cairo.h ('k') | printing/printing_context_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
« no previous file with comments | « printing/printing_context_cairo.h ('k') | printing/printing_context_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698