blob: 1e5a959422dc552e208c184ad796b77e095da2d9 [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
25bool NupParameters::IsSupported(int num_pages_per_sheet) {
26 // Supports N-up: 1 2 4 6 9 16
27
28 return num_pages_per_sheet == 1 || num_pages_per_sheet == 2 ||
29 num_pages_per_sheet == 4 || num_pages_per_sheet == 6 ||
30 num_pages_per_sheet == 9 || num_pages_per_sheet == 16;
31}
32
33void NupParameters::SetParameters(int num_pages_per_sheet,
34 bool is_source_landscape) {
35 DCHECK(IsSupported(num_pages_per_sheet));
36
37 switch (num_pages_per_sheet) {
38 case 1:
39 num_pages_on_x_axis_ = 1;
40 num_pages_on_y_axis_ = 1;
41 break;
42 case 2:
43 if (!is_source_landscape) {
44 num_pages_on_x_axis_ = 2;
45 num_pages_on_y_axis_ = 1;
46 landscape_ = true;
47 } else {
48 num_pages_on_x_axis_ = 1;
49 num_pages_on_y_axis_ = 2;
50 }
51 break;
52 case 6:
53 if (!is_source_landscape) {
54 num_pages_on_x_axis_ = 3;
55 num_pages_on_y_axis_ = 2;
56 landscape_ = true;
57 } else {
58 num_pages_on_x_axis_ = 2;
59 num_pages_on_y_axis_ = 3;
60 }
61 break;
62 case 4:
63 case 9:
64 case 16:
65 num_pages_on_x_axis_ = std::sqrt(num_pages_per_sheet);
66 num_pages_on_y_axis_ = std::sqrt(num_pages_per_sheet);
67 if (is_source_landscape)
68 landscape_ = true;
69 break;
70 default:
71 NOTREACHED();
72 }
73}
74
75} // namespace printing