Chromium Code Reviews| Index: printing/printing_context_cairo.cc |
| =================================================================== |
| --- printing/printing_context_cairo.cc (revision 67925) |
| +++ printing/printing_context_cairo.cc (working copy) |
| @@ -6,18 +6,23 @@ |
| #include <gtk/gtk.h> |
| #include <gtk/gtkprintunixdialog.h> |
| +#include <unicode/ulocdata.h> |
| +#include <unicode/uset.h> |
|
jungshik at Google
2010/12/03 19:34:55
nit: Do you need to include uset.h? I guess not.
|
| #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 +42,45 @@ |
| 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. |
| + // TODO(sanjeevr): We need a better feedback loop between the cloud print |
| + // dialog and this code. |
|
jungshik at Google
2010/12/03 19:34:55
Can you also mention that relying on app_locale do
|
| + 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; |
| } |