From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- image/Resolution.h | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 image/Resolution.h (limited to 'image/Resolution.h') diff --git a/image/Resolution.h b/image/Resolution.h new file mode 100644 index 0000000000..b305b867b2 --- /dev/null +++ b/image/Resolution.h @@ -0,0 +1,90 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_image_Resolution_h +#define mozilla_image_Resolution_h + +#include "mozilla/Assertions.h" +#include + +namespace mozilla { +namespace image { + +/** + * The resolution of an image, in dppx. + */ +struct Resolution { + Resolution() = default; + Resolution(float aX, float aY) : mX(aX), mY(aY) { + MOZ_ASSERT(mX != 0.0f); + MOZ_ASSERT(mY != 0.0f); + } + + bool operator==(const Resolution& aOther) const { + return mX == aOther.mX && mY == aOther.mY; + } + bool operator!=(const Resolution& aOther) const { return !(*this == aOther); } + + float mX = 1.0f; + float mY = 1.0f; + + void ScaleBy(float aScale) { + if (MOZ_LIKELY(aScale != 0.0f)) { + mX *= aScale; + mY *= aScale; + } + } + + void ApplyXTo(int32_t& aWidth) const { + if (mX != 1.0f) { + aWidth = std::round(float(aWidth) / mX); + } + } + + void ApplyXTo(float& aWidth) const { + if (mX != 1.0f) { + aWidth /= mX; + } + } + + void ApplyYTo(int32_t& aHeight) const { + if (mY != 1.0f) { + aHeight = std::round(float(aHeight) / mY); + } + } + + void ApplyYTo(float& aHeight) const { + if (mY != 1.0f) { + aHeight /= mY; + } + } + + void ApplyTo(int32_t& aWidth, int32_t& aHeight) const { + ApplyXTo(aWidth); + ApplyYTo(aHeight); + } + + void ApplyTo(float& aWidth, float& aHeight) const { + ApplyXTo(aWidth); + ApplyYTo(aHeight); + } + + void ApplyInverseTo(int32_t& aWidth, int32_t& aHeight) { + if (mX != 1.0f) { + aWidth = std::round(float(aWidth) * mX); + } + if (mY != 1.0f) { + aHeight = std::round(float(aHeight) * mY); + } + } +}; + +} // namespace image + +using ImageResolution = image::Resolution; + +} // namespace mozilla + +#endif -- cgit v1.2.3