blob: 8e1e2b9e6290a6b76c8cae4f310c34a42b72c741 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "pdf/page_orientation.h"
#include <type_traits>
namespace chrome_pdf {
namespace {
// Adds two PageOrientation values together. This works because the underlying
// integer values have been chosen to allow modular arithmetic.
PageOrientation AddOrientations(PageOrientation first, PageOrientation second) {
using IntType = std::underlying_type<PageOrientation>::type;
constexpr auto kOrientationCount =
static_cast<IntType>(PageOrientation::kLast) + 1;
auto first_int = static_cast<IntType>(first);
auto second_int = static_cast<IntType>(second);
return static_cast<PageOrientation>((first_int + second_int) %
kOrientationCount);
}
} // namespace
PageOrientation RotateClockwise(PageOrientation orientation) {
return AddOrientations(orientation, PageOrientation::kClockwise90);
}
PageOrientation RotateCounterclockwise(PageOrientation orientation) {
// Adding `kLast` is equivalent to rotating one step counterclockwise.
return AddOrientations(orientation, PageOrientation::kLast);
}
} // namespace chrome_pdf