blob: f963e2831c879d3fe7bbd4d8298dc9039eed1542 [file] [log] [blame]
xloua4288122018-04-14 00:03:331// Copyright 2018 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
5#include "printing/nup_parameters.h"
6
7#include <algorithm>
8#include <cmath>
9
10#include "base/logging.h"
11
12namespace printing {
13
14NupParameters::NupParameters() {
15 Clear();
16}
17
18void NupParameters::Clear() {
19 landscape_ = false;
20 num_pages_on_x_axis_ = 1;
21 num_pages_on_y_axis_ = 1;
22}
23
24// static
xlou8252cb82018-07-13 00:32:5825bool NupParameters::IsSupported(int pages_per_sheet) {
xloua4288122018-04-14 00:03:3326 // Supports N-up: 1 2 4 6 9 16
27
xlou8252cb82018-07-13 00:32:5828 return pages_per_sheet == 1 || pages_per_sheet == 2 || pages_per_sheet == 4 ||
29 pages_per_sheet == 6 || pages_per_sheet == 9 || pages_per_sheet == 16;
xloua4288122018-04-14 00:03:3330}
31
xlou8252cb82018-07-13 00:32:5832void NupParameters::SetParameters(int pages_per_sheet,
xloua4288122018-04-14 00:03:3333 bool is_source_landscape) {
xlou8252cb82018-07-13 00:32:5834 DCHECK(IsSupported(pages_per_sheet));
xloua4288122018-04-14 00:03:3335
xlou8252cb82018-07-13 00:32:5836 switch (pages_per_sheet) {
xloua4288122018-04-14 00:03:3337 case 1:
38 num_pages_on_x_axis_ = 1;
39 num_pages_on_y_axis_ = 1;
40 break;
41 case 2:
42 if (!is_source_landscape) {
43 num_pages_on_x_axis_ = 2;
44 num_pages_on_y_axis_ = 1;
45 landscape_ = true;
46 } else {
47 num_pages_on_x_axis_ = 1;
48 num_pages_on_y_axis_ = 2;
49 }
50 break;
51 case 6:
52 if (!is_source_landscape) {
53 num_pages_on_x_axis_ = 3;
54 num_pages_on_y_axis_ = 2;
55 landscape_ = true;
56 } else {
57 num_pages_on_x_axis_ = 2;
58 num_pages_on_y_axis_ = 3;
59 }
60 break;
61 case 4:
62 case 9:
63 case 16:
xlou8252cb82018-07-13 00:32:5864 num_pages_on_x_axis_ = std::sqrt(pages_per_sheet);
65 num_pages_on_y_axis_ = std::sqrt(pages_per_sheet);
xloua4288122018-04-14 00:03:3366 if (is_source_landscape)
67 landscape_ = true;
68 break;
69 default:
70 NOTREACHED();
71 }
72}
73
74} // namespace printing