// Copyright 2017 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.

module printing.mojom;

import "chrome/services/printing/public/mojom/pdf_render_settings.mojom";
import "mojo/public/mojom/base/shared_memory.mojom";

struct PwgRasterSettings {
  enum TransformType {
    TRANSFORM_NORMAL,
    TRANSFORM_ROTATE_180,
    TRANSFORM_FLIP_HORIZONTAL,
    TRANSFORM_FLIP_VERTICAL
  };

  enum DuplexMode {
    SIMPLEX,
    LONG_EDGE,
    SHORT_EDGE,
  };

  DuplexMode duplex_mode;

  // How to transform odd-numbered pages.
  TransformType odd_page_transform;

  // Rotate all pages (on top of odd-numbered page transform).
  bool rotate_all_pages;

  // Rasterize pages in reverse order.
  bool reverse_page_order;

  // Rasterize pages in color.
  bool use_color;
};

interface PdfToPwgRasterConverter {
  Convert(mojo_base.mojom.ReadOnlySharedMemoryRegion pdf_region,
          PdfRenderSettings pdf_settings,
          PwgRasterSettings pwg_raster_settings)
      => (mojo_base.mojom.ReadOnlySharedMemoryRegion? pwg_raster_region,
          uint32 page_count);
};
