910e62b5创建于 1月15日历史提交
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module printing.mojom;

import "printing/mojom/print.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";

// Basic information for a specific printer.
// Corresponds to `printing::PrinterBasicInfo` in
// printing/backend/print_backend.h.
struct PrinterBasicInfo {
  string printer_name;
  string display_name;
  string printer_description;
  map<string, string> options;
};

// Margins for a paper.
// Corresponds to `printing::PaperMargins` in
// printing/backend/print_backend.h.
[EnableIf=is_chromeos]
struct PaperMargins {
  int32 top_margin_um;
  int32 right_margin_um;
  int32 bottom_margin_um;
  int32 left_margin_um;
};

// Paper used by printer semantic capabilities and defaults.
// Corresponds to `printing::PrinterSemanticCapsAndDefaults::Paper` in
// printing/backend/print_backend.h.
struct Paper {
  string display_name;
  string vendor_id;
  gfx.mojom.Size size_um;
  gfx.mojom.Rect printable_area_um;
  int32 max_height_um;
  bool has_borderless_variant;
  [EnableIf=is_chromeos]
  PaperMargins? supported_margins_um;
};

// Media type used by printer semantic capabilities and defaults.
// Corresponds to `printing::PrinterSemanticCapsAndDefaults::MediaType` in
// printing/backend/print_backend.h.
struct MediaType {
  string display_name;
  string vendor_id;
};

// An advanced capability value for ChromeOS printing.
// Paper used by printer semantic capabilities and defaults.
// Corresponds to `printing::AdvancedCapabilityValue` in
// printing/backend/print_backend.h.
[EnableIf=is_chromeos]
struct AdvancedCapabilityValue {
  string name;
  string display_name;
};

// The type of the values for advanced capabilities.
// Corresponds to `printing::AdvancedCapability::Type` in
// printing/backend/print_backend.h.
[EnableIf=is_chromeos]
enum AdvancedCapabilityType {
  kString,
  kBoolean,
  kFloat,
  kInteger,
};

// An advanced capability for ChromeOS printing.
// Corresponds to `printing::AdvancedCapability` in
// printing/backend/print_backend.h.
[EnableIf=is_chromeos]
struct AdvancedCapability {
  string name;
  string display_name;
  AdvancedCapabilityType type;
  string default_value;
  array<AdvancedCapabilityValue> values;
};

// Attributes of a Page Output Quality of XPS printer for Windows printing.
// Corresponds to `printing::PageOutpuQualityAttribute` in
// printing/backend/print_backend.h.
[EnableIf=is_win]
struct PageOutputQualityAttribute {
  string display_name;
  string name;
};

// Page Output Quality from XPS printer for Windows printing. Corresponds to
// `printing::PageOutputQuality` in printing/backend/print_backend.h.
[EnableIf=is_win]
struct PageOutputQuality {
  array<PageOutputQualityAttribute> qualities;  // No duplicates.
  string? default_quality;  // Default selection of `qualities`.
                            // Null if no default.
};

// The semantic capabilities and defaults used for a printer.
// Corresponds to `printing::PrinterSemanticCapsAndDefaults` in
// printing/backend/print_backend.h.
struct PrinterSemanticCapsAndDefaults {
  bool collate_capable = false;
  bool collate_default = false;
  int32 copies_max = 1;  // Valid values are only >= 1.
  array<DuplexMode> duplex_modes;
  DuplexMode duplex_default = kUnknownDuplexMode;
  bool color_changeable = false;
  bool color_default = false;
  ColorModel color_model = kUnknownColorModel;
  ColorModel bw_model = kUnknownColorModel;
  array<Paper> papers;  // Empty and duplicates allowed.
  array<Paper> user_defined_papers;
  Paper default_paper;
  array<gfx.mojom.Size> dpis;  // Duplicates allowed.
  gfx.mojom.Size default_dpi;

  [EnableIf=is_chromeos]
  bool pin_supported = false;
  [EnableIf=is_chromeos]
  array<AdvancedCapability> advanced_capabilities;

  // Null if feature flag `kReadPrinterCapabilitiesWithXps` is disabled.
  // Null if printer doesn't have this capability.
  [EnableIf=is_win]
  PageOutputQuality? page_output_quality;

  array<MediaType>? media_types;  // Allowed to be empty.
  MediaType? default_media_type;

  // Print scaling capability
  [EnableIf=is_chromeos]
  array<PrintScalingType> print_scaling_types;  // Allowed to be empty.
  [EnableIf=is_chromeos]
  PrintScalingType print_scaling_type_default = kUnknownPrintScalingType;
};