[go: nahoru, domu]

blob: 920c91c5bc448c62732095579095baf3e90e95e6 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/arc/print/print_mojom_traits.h"
#include "base/strings/stringprintf.h"
#include "printing/mojom/print.mojom.h"
#include "printing/units.h"
namespace mojo {
namespace {
// Transform paper size to Mojo type.
arc::mojom::PrintMediaSizePtr ToMediaSize(
const printing::PrinterSemanticCapsAndDefaults::Paper& paper) {
gfx::Size size_mil =
gfx::ScaleToRoundedSize(paper.size_um, 1.0f / printing::kMicronsPerMil);
return arc::mojom::PrintMediaSize::New(paper.vendor_id, paper.display_name,
size_mil.width(), size_mil.height());
}
arc::mojom::PrintDuplexMode ToArcDuplexMode(printing::mojom::DuplexMode mode) {
switch (mode) {
case printing::mojom::DuplexMode::kLongEdge:
return arc::mojom::PrintDuplexMode::LONG_EDGE;
case printing::mojom::DuplexMode::kShortEdge:
return arc::mojom::PrintDuplexMode::SHORT_EDGE;
case printing::mojom::DuplexMode::kSimplex:
return arc::mojom::PrintDuplexMode::NONE;
default:
NOTREACHED();
}
return arc::mojom::PrintDuplexMode::NONE;
}
} // namespace
std::string StructTraits<arc::mojom::PrintResolutionDataView, gfx::Size>::id(
const gfx::Size& size) {
return base::StringPrintf("%dx%d", size.width(), size.height());
}
std::vector<arc::mojom::PrintMediaSizePtr>
StructTraits<arc::mojom::PrinterCapabilitiesDataView,
printing::PrinterSemanticCapsAndDefaults>::
media_sizes(const printing::PrinterSemanticCapsAndDefaults& caps) {
std::vector<arc::mojom::PrintMediaSizePtr> sizes;
sizes.reserve(caps.papers.size());
for (const auto& paper : caps.papers)
sizes.emplace_back(ToMediaSize(paper));
return sizes;
}
arc::mojom::PrintMarginsPtr
StructTraits<arc::mojom::PrinterCapabilitiesDataView,
printing::PrinterSemanticCapsAndDefaults>::
min_margins(const printing::PrinterSemanticCapsAndDefaults& caps) {
return arc::mojom::PrintMargins::New(0, 0, 0, 0);
}
arc::mojom::PrintColorMode
StructTraits<arc::mojom::PrinterCapabilitiesDataView,
printing::PrinterSemanticCapsAndDefaults>::
color_modes(const printing::PrinterSemanticCapsAndDefaults& caps) {
auto color_modes = static_cast<arc::mojom::PrintColorMode>(0);
if (caps.bw_model != printing::UNKNOWN_COLOR_MODEL) {
color_modes = static_cast<arc::mojom::PrintColorMode>(
static_cast<uint32_t>(color_modes) |
static_cast<uint32_t>(arc::mojom::PrintColorMode::MONOCHROME));
}
if (caps.color_model != printing::UNKNOWN_COLOR_MODEL) {
color_modes = static_cast<arc::mojom::PrintColorMode>(
static_cast<uint32_t>(color_modes) |
static_cast<uint32_t>(arc::mojom::PrintColorMode::COLOR));
}
return color_modes;
}
arc::mojom::PrintDuplexMode
StructTraits<arc::mojom::PrinterCapabilitiesDataView,
printing::PrinterSemanticCapsAndDefaults>::
duplex_modes(const printing::PrinterSemanticCapsAndDefaults& caps) {
uint32_t duplex_modes = 0;
for (printing::mojom::DuplexMode mode : caps.duplex_modes) {
duplex_modes |= static_cast<uint32_t>(ToArcDuplexMode(mode));
}
return static_cast<arc::mojom::PrintDuplexMode>(duplex_modes);
}
arc::mojom::PrintAttributesPtr
StructTraits<arc::mojom::PrinterCapabilitiesDataView,
printing::PrinterSemanticCapsAndDefaults>::
defaults(const printing::PrinterSemanticCapsAndDefaults& caps) {
arc::mojom::PrintDuplexMode default_duplex_mode =
ToArcDuplexMode(caps.duplex_default);
return arc::mojom::PrintAttributes::New(
ToMediaSize(caps.default_paper), caps.default_dpi,
arc::mojom::PrintMargins::New(0, 0, 0, 0),
caps.color_default ? arc::mojom::PrintColorMode::COLOR
: arc::mojom::PrintColorMode::MONOCHROME,
default_duplex_mode);
}
} // namespace mojo