printing_context_mojom_traits.cc 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "printing/mojom/printing_context_mojom_traits.h"
  5. #include <string>
  6. #include "build/build_config.h"
  7. #include "mojo/public/cpp/base/string16_mojom_traits.h"
  8. #include "printing/mojom/print.mojom.h"
  9. #include "printing/page_setup.h"
  10. #include "printing/print_settings.h"
  11. #include "ui/gfx/geometry/mojom/geometry.mojom-shared.h"
  12. #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
  13. #include "ui/gfx/geometry/size.h"
  14. #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  15. #include "mojo/public/mojom/base/values.mojom.h"
  16. #endif
  17. namespace mojo {
  18. // static
  19. bool StructTraits<printing::mojom::PageMarginsDataView, printing::PageMargins>::
  20. Read(printing::mojom::PageMarginsDataView data,
  21. printing::PageMargins* out) {
  22. out->header = data.header();
  23. out->footer = data.footer();
  24. out->left = data.left();
  25. out->right = data.right();
  26. out->top = data.top();
  27. out->bottom = data.bottom();
  28. return true;
  29. }
  30. // static
  31. bool StructTraits<printing::mojom::PageSetupDataView, printing::PageSetup>::
  32. Read(printing::mojom::PageSetupDataView data, printing::PageSetup* out) {
  33. gfx::Size physical_size;
  34. gfx::Rect printable_area;
  35. gfx::Rect overlay_area;
  36. gfx::Rect content_area;
  37. printing::PageMargins effective_margins;
  38. printing::PageMargins requested_margins;
  39. if (!data.ReadPhysicalSize(&physical_size) ||
  40. !data.ReadPrintableArea(&printable_area) ||
  41. !data.ReadOverlayArea(&overlay_area) ||
  42. !data.ReadContentArea(&content_area) ||
  43. !data.ReadEffectiveMargins(&effective_margins) ||
  44. !data.ReadRequestedMargins(&requested_margins)) {
  45. return false;
  46. }
  47. printing::PageSetup page_setup(physical_size, printable_area,
  48. requested_margins, data.forced_margins(),
  49. data.text_height());
  50. if (page_setup.overlay_area() != overlay_area)
  51. return false;
  52. if (page_setup.content_area() != content_area)
  53. return false;
  54. if (!effective_margins.Equals(page_setup.effective_margins()))
  55. return false;
  56. *out = page_setup;
  57. return true;
  58. }
  59. // static
  60. bool StructTraits<printing::mojom::RequestedMediaDataView,
  61. printing::PrintSettings::RequestedMedia>::
  62. Read(printing::mojom::RequestedMediaDataView data,
  63. printing::PrintSettings::RequestedMedia* out) {
  64. return data.ReadSizeMicrons(&out->size_microns) &&
  65. data.ReadVendorId(&out->vendor_id);
  66. }
  67. // static
  68. bool StructTraits<
  69. printing::mojom::PrintSettingsDataView,
  70. printing::PrintSettings>::Read(printing::mojom::PrintSettingsDataView data,
  71. printing::PrintSettings* out) {
  72. printing::PageRanges ranges;
  73. if (!data.ReadRanges(&ranges))
  74. return false;
  75. out->set_ranges(ranges);
  76. out->set_selection_only(data.selection_only());
  77. out->set_margin_type(data.margin_type());
  78. std::u16string title;
  79. if (!data.ReadTitle(&title))
  80. return false;
  81. out->set_title(title);
  82. std::u16string url;
  83. if (!data.ReadUrl(&url))
  84. return false;
  85. out->set_url(url);
  86. out->set_display_header_footer(data.display_header_footer());
  87. out->set_should_print_backgrounds(data.should_print_backgrounds());
  88. out->set_collate(data.collate());
  89. out->set_color(data.color());
  90. out->set_copies(data.copies());
  91. out->set_duplex_mode(data.duplex_mode());
  92. std::u16string device_name;
  93. if (!data.ReadDeviceName(&device_name))
  94. return false;
  95. out->set_device_name(device_name);
  96. printing::PrintSettings::RequestedMedia requested_media;
  97. if (!data.ReadRequestedMedia(&requested_media))
  98. return false;
  99. out->set_requested_media(requested_media);
  100. printing::PageSetup page_setup;
  101. if (!data.ReadPageSetupDeviceUnits(&page_setup))
  102. return false;
  103. out->set_page_setup_device_units(page_setup);
  104. gfx::Size dpi;
  105. if (!data.ReadDpi(&dpi))
  106. return false;
  107. out->set_dpi_xy(dpi.width(), dpi.height());
  108. out->set_scale_factor(data.scale_factor());
  109. out->set_rasterize_pdf(data.rasterize_pdf());
  110. out->SetOrientation(data.landscape());
  111. out->set_supports_alpha_blend(data.supports_alpha_blend());
  112. #if BUILDFLAG(IS_WIN)
  113. out->set_printer_language_type(data.printer_language_type());
  114. #endif // BUILDFLAG(IS_WIN)
  115. out->set_is_modifiable(data.is_modifiable());
  116. // `SetCustomMargins()` has side effect of explicitly setting `margin_type_`
  117. // so only want to apply this if the type was for `kCustomMargins`.
  118. if (data.margin_type() == printing::mojom::MarginType::kCustomMargins) {
  119. printing::PageMargins requested_margins;
  120. if (!data.ReadRequestedCustomMarginsInPoints(&requested_margins))
  121. return false;
  122. out->SetCustomMargins(requested_margins);
  123. }
  124. out->set_pages_per_sheet(data.pages_per_sheet());
  125. #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  126. DCHECK(out->advanced_settings().empty());
  127. if (!data.ReadAdvancedSettings(&out->advanced_settings()))
  128. return false;
  129. #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  130. #if BUILDFLAG(IS_CHROMEOS)
  131. out->set_send_user_info(data.send_user_info());
  132. std::string username;
  133. if (!data.ReadUsername(&username))
  134. return false;
  135. out->set_username(username);
  136. std::string pin_value;
  137. if (!data.ReadPinValue(&pin_value))
  138. return false;
  139. out->set_pin_value(pin_value);
  140. #endif // BUILDFLAG(IS_CHROMEOS)
  141. return true;
  142. }
  143. } // namespace mojo