1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
10 #include "mozilla/gfx/BaseSize.h"
11 #include "mozilla/gfx/Point.h"
13 // Maximum allowable size
14 #define NS_MAXSIZE nscoord_MAX
17 typedef nsIntSize gfxIntSize
;
19 struct nsSize
: public mozilla::gfx::BaseSize
<nscoord
, nsSize
> {
20 typedef mozilla::gfx::BaseSize
<nscoord
, nsSize
> Super
;
23 nsSize(nscoord aWidth
, nscoord aHeight
) : Super(aWidth
, aHeight
) {}
25 inline nsIntSize
ScaleToNearestPixels(float aXScale
, float aYScale
,
26 nscoord aAppUnitsPerPixel
) const;
27 inline nsIntSize
ToNearestPixels(nscoord aAppUnitsPerPixel
) const;
29 // Converts this size from aFromAPP, an appunits per pixel ratio, to aToAPP.
30 inline nsSize
ConvertAppUnits(int32_t aFromAPP
, int32_t aToAPP
) const;
33 struct nsIntSize
: public mozilla::gfx::BaseSize
<int32_t, nsIntSize
> {
34 typedef mozilla::gfx::BaseSize
<int32_t, nsIntSize
> Super
;
36 nsIntSize() : Super() {}
37 nsIntSize(int32_t aWidth
, int32_t aHeight
) : Super(aWidth
, aHeight
) {}
39 inline nsSize
ToAppUnits(nscoord aAppUnitsPerPixel
) const;
40 operator mozilla::gfx::IntSize() const { return mozilla::gfx::IntSize(width
, height
); };
44 nsSize::ScaleToNearestPixels(float aXScale
, float aYScale
,
45 nscoord aAppUnitsPerPixel
) const
48 NSToIntRoundUp(NSAppUnitsToDoublePixels(width
, aAppUnitsPerPixel
) * aXScale
),
49 NSToIntRoundUp(NSAppUnitsToDoublePixels(height
, aAppUnitsPerPixel
) * aYScale
));
53 nsSize::ToNearestPixels(nscoord aAppUnitsPerPixel
) const
55 return ScaleToNearestPixels(1.0f
, 1.0f
, aAppUnitsPerPixel
);
59 nsSize::ConvertAppUnits(int32_t aFromAPP
, int32_t aToAPP
) const {
60 if (aFromAPP
!= aToAPP
) {
62 size
.width
= NSToCoordRound(NSCoordScale(width
, aFromAPP
, aToAPP
));
63 size
.height
= NSToCoordRound(NSCoordScale(height
, aFromAPP
, aToAPP
));
70 nsIntSize::ToAppUnits(nscoord aAppUnitsPerPixel
) const
72 return nsSize(NSIntPixelsToAppUnits(width
, aAppUnitsPerPixel
),
73 NSIntPixelsToAppUnits(height
, aAppUnitsPerPixel
));