[M120 Migration][MM] Fix EME AD insert issue
[platform/framework/web/chromium-efl.git] / printing / nup_parameters.cc
1 // Copyright 2018 The Chromium Authors
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/check.h"
11 #include "base/notreached.h"
12
13 namespace printing {
14
15 NupParameters::NupParameters(int pages_per_sheet, bool is_source_landscape) {
16   SetParameters(pages_per_sheet, is_source_landscape);
17 }
18
19 // static
20 bool NupParameters::IsSupported(int pages_per_sheet) {
21   // Supports N-up: 1 2 4 6 9 16
22
23   return pages_per_sheet == 1 || pages_per_sheet == 2 || pages_per_sheet == 4 ||
24          pages_per_sheet == 6 || pages_per_sheet == 9 || pages_per_sheet == 16;
25 }
26
27 void NupParameters::SetParameters(int pages_per_sheet,
28                                   bool is_source_landscape) {
29   DCHECK(IsSupported(pages_per_sheet));
30
31   switch (pages_per_sheet) {
32     case 1:
33       num_pages_on_x_axis_ = 1;
34       num_pages_on_y_axis_ = 1;
35       break;
36     case 2:
37       if (!is_source_landscape) {
38         num_pages_on_x_axis_ = 2;
39         num_pages_on_y_axis_ = 1;
40         landscape_ = true;
41       } else {
42         num_pages_on_x_axis_ = 1;
43         num_pages_on_y_axis_ = 2;
44       }
45       break;
46     case 6:
47       if (!is_source_landscape) {
48         num_pages_on_x_axis_ = 3;
49         num_pages_on_y_axis_ = 2;
50         landscape_ = true;
51       } else {
52         num_pages_on_x_axis_ = 2;
53         num_pages_on_y_axis_ = 3;
54       }
55       break;
56     case 4:
57     case 9:
58     case 16:
59       num_pages_on_x_axis_ = std::sqrt(pages_per_sheet);
60       num_pages_on_y_axis_ = std::sqrt(pages_per_sheet);
61       if (is_source_landscape)
62         landscape_ = true;
63       break;
64     default:
65       NOTREACHED();
66   }
67 }
68
69 }  // namespace printing