nup_parameters.cc 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // 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. #include "printing/nup_parameters.h"
  5. #include <algorithm>
  6. #include <cmath>
  7. #include "base/check.h"
  8. #include "base/notreached.h"
  9. namespace printing {
  10. NupParameters::NupParameters(int pages_per_sheet, bool is_source_landscape) {
  11. SetParameters(pages_per_sheet, is_source_landscape);
  12. }
  13. // static
  14. bool NupParameters::IsSupported(int pages_per_sheet) {
  15. // Supports N-up: 1 2 4 6 9 16
  16. return pages_per_sheet == 1 || pages_per_sheet == 2 || pages_per_sheet == 4 ||
  17. pages_per_sheet == 6 || pages_per_sheet == 9 || pages_per_sheet == 16;
  18. }
  19. void NupParameters::SetParameters(int pages_per_sheet,
  20. bool is_source_landscape) {
  21. DCHECK(IsSupported(pages_per_sheet));
  22. switch (pages_per_sheet) {
  23. case 1:
  24. num_pages_on_x_axis_ = 1;
  25. num_pages_on_y_axis_ = 1;
  26. break;
  27. case 2:
  28. if (!is_source_landscape) {
  29. num_pages_on_x_axis_ = 2;
  30. num_pages_on_y_axis_ = 1;
  31. landscape_ = true;
  32. } else {
  33. num_pages_on_x_axis_ = 1;
  34. num_pages_on_y_axis_ = 2;
  35. }
  36. break;
  37. case 6:
  38. if (!is_source_landscape) {
  39. num_pages_on_x_axis_ = 3;
  40. num_pages_on_y_axis_ = 2;
  41. landscape_ = true;
  42. } else {
  43. num_pages_on_x_axis_ = 2;
  44. num_pages_on_y_axis_ = 3;
  45. }
  46. break;
  47. case 4:
  48. case 9:
  49. case 16:
  50. num_pages_on_x_axis_ = std::sqrt(pages_per_sheet);
  51. num_pages_on_y_axis_ = std::sqrt(pages_per_sheet);
  52. if (is_source_landscape)
  53. landscape_ = true;
  54. break;
  55. default:
  56. NOTREACHED();
  57. }
  58. }
  59. } // namespace printing