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

#ifndef PRINTING_NUP_PARAMETERS_H_
#define PRINTING_NUP_PARAMETERS_H_

#include "printing/printing_export.h"

namespace printing {

class PRINTING_EXPORT NupParameters {
 public:
  NupParameters();

  // Whether or not the input |pages_per_sheet| is a supported N-up value.
  // Supported values are: 1 2 4 6 9 16
  static bool IsSupported(int pages_per_sheet);

  // Orientation of the to-be-generated N-up PDF document.
  bool landscape() const { return landscape_; }
  int num_pages_on_x_axis() const { return num_pages_on_x_axis_; }
  int num_pages_on_y_axis() const { return num_pages_on_y_axis_; }

  // Calculates the |num_pages_on_x_axis_|, |num_pages_on_y_axis_| and
  // |landscape_| based on the input.  |is_source_landscape| is true if the
  // source document orientation is landscape.
  // Callers should check |pages_per_sheet| values with IsSupported() first,
  // and only pass in supported values.
  void SetParameters(int pages_per_sheet, bool is_source_landscape);

  // Turns off N-up mode by resetting |num_pages_on_x_axis| = 1,
  // |num_pages_on_y_axis| = 1, and |landscape_| = false
  void Clear();

 private:
  int num_pages_on_x_axis_;
  int num_pages_on_y_axis_;
  bool landscape_;
};

}  // namespace printing

#endif  // PRINTING_NUP_PARAMETERS_H_
