diff options
author | Andy <webmaster@RealityRipple.com> | 2020-07-31 13:01:18 -0700 |
---|---|---|
committer | Andy <webmaster@RealityRipple.com> | 2020-07-31 13:01:18 -0700 |
commit | 232f987cf45aad65d20e79d283f14c72771c9bc8 (patch) | |
tree | 1a794fa80b38b0248439085c8ce76b6dfce1cb3a /image | |
parent | 091749192cc7595a0013850fb450a5c1b6dde20b (diff) | |
download | uxp-232f987cf45aad65d20e79d283f14c72771c9bc8.tar.gz |
Issue #1619 - Convert Intrinsic Ratio to Float
https://bugzilla.mozilla.org/show_bug.cgi?id=1547792
Aspect Ratio handling simplified by using floating point integers:
- Multiplication of value (or inverse value) to a known side for Scaling
- No unequal equal values such as "4/3" vs "8/6" vs "20/15"
- Truly "Empty" aspect ratios, even if one dimension is not 0
Diffstat (limited to 'image')
-rw-r--r-- | image/ClippedImage.cpp | 4 | ||||
-rw-r--r-- | image/ClippedImage.h | 2 | ||||
-rw-r--r-- | image/DynamicImage.cpp | 6 | ||||
-rw-r--r-- | image/ImageWrapper.cpp | 4 | ||||
-rw-r--r-- | image/OrientedImage.cpp | 4 | ||||
-rw-r--r-- | image/OrientedImage.h | 2 | ||||
-rw-r--r-- | image/RasterImage.cpp | 5 | ||||
-rw-r--r-- | image/VectorImage.cpp | 2 | ||||
-rw-r--r-- | image/imgIContainer.idl | 4 |
9 files changed, 18 insertions, 15 deletions
diff --git a/image/ClippedImage.cpp b/image/ClippedImage.cpp index 5394718512..6372f59505 100644 --- a/image/ClippedImage.cpp +++ b/image/ClippedImage.cpp @@ -242,13 +242,13 @@ ClippedImage::GetIntrinsicSize(nsSize* aSize) } NS_IMETHODIMP -ClippedImage::GetIntrinsicRatio(nsSize* aRatio) +ClippedImage::GetIntrinsicRatio(AspectRatio* aRatio) { if (!ShouldClip()) { return InnerImage()->GetIntrinsicRatio(aRatio); } - *aRatio = nsSize(mClip.width, mClip.height); + *aRatio = AspectRatio::FromSize(mClip.width, mClip.height); return NS_OK; } diff --git a/image/ClippedImage.h b/image/ClippedImage.h index 140cc19090..65963b7562 100644 --- a/image/ClippedImage.h +++ b/image/ClippedImage.h @@ -35,7 +35,7 @@ public: NS_IMETHOD GetWidth(int32_t* aWidth) override; NS_IMETHOD GetHeight(int32_t* aHeight) override; NS_IMETHOD GetIntrinsicSize(nsSize* aSize) override; - NS_IMETHOD GetIntrinsicRatio(nsSize* aRatio) override; + NS_IMETHOD GetIntrinsicRatio(AspectRatio* aRatio) override; NS_IMETHOD_(already_AddRefed<SourceSurface>) GetFrame(uint32_t aWhichFrame, uint32_t aFlags) override; NS_IMETHOD_(already_AddRefed<SourceSurface>) diff --git a/image/DynamicImage.cpp b/image/DynamicImage.cpp index 670595aecb..aeb1fcf78e 100644 --- a/image/DynamicImage.cpp +++ b/image/DynamicImage.cpp @@ -136,10 +136,10 @@ DynamicImage::GetIntrinsicSize(nsSize* aSize) } NS_IMETHODIMP -DynamicImage::GetIntrinsicRatio(nsSize* aSize) +DynamicImage::GetIntrinsicRatio(AspectRatio* aRatio) { - IntSize intSize(mDrawable->Size()); - *aSize = nsSize(intSize.width, intSize.height); + auto size = mDrawable->Size(); + *aRatio = AspectRatio::FromSize(size); return NS_OK; } diff --git a/image/ImageWrapper.cpp b/image/ImageWrapper.cpp index f7068dfc58..5ed6c78179 100644 --- a/image/ImageWrapper.cpp +++ b/image/ImageWrapper.cpp @@ -146,9 +146,9 @@ ImageWrapper::GetIntrinsicSize(nsSize* aSize) } NS_IMETHODIMP -ImageWrapper::GetIntrinsicRatio(nsSize* aSize) +ImageWrapper::GetIntrinsicRatio(AspectRatio* aRatio) { - return mInnerImage->GetIntrinsicRatio(aSize); + return mInnerImage->GetIntrinsicRatio(aRatio); } NS_IMETHODIMP_(Orientation) diff --git a/image/OrientedImage.cpp b/image/OrientedImage.cpp index 9489ceafd0..0b6560df1d 100644 --- a/image/OrientedImage.cpp +++ b/image/OrientedImage.cpp @@ -59,12 +59,12 @@ OrientedImage::GetIntrinsicSize(nsSize* aSize) } NS_IMETHODIMP -OrientedImage::GetIntrinsicRatio(nsSize* aRatio) +OrientedImage::GetIntrinsicRatio(AspectRatio* aRatio) { nsresult rv = InnerImage()->GetIntrinsicRatio(aRatio); if (mOrientation.SwapsWidthAndHeight()) { - swap(aRatio->width, aRatio->height); + *aRatio = aRatio->Inverted(); } return rv; diff --git a/image/OrientedImage.h b/image/OrientedImage.h index 604ab3d4f5..b77571f4a3 100644 --- a/image/OrientedImage.h +++ b/image/OrientedImage.h @@ -31,7 +31,7 @@ public: NS_IMETHOD GetWidth(int32_t* aWidth) override; NS_IMETHOD GetHeight(int32_t* aHeight) override; NS_IMETHOD GetIntrinsicSize(nsSize* aSize) override; - NS_IMETHOD GetIntrinsicRatio(nsSize* aRatio) override; + NS_IMETHOD GetIntrinsicRatio(AspectRatio* aRatio) override; NS_IMETHOD_(already_AddRefed<SourceSurface>) GetFrame(uint32_t aWhichFrame, uint32_t aFlags) override; NS_IMETHOD_(already_AddRefed<SourceSurface>) diff --git a/image/RasterImage.cpp b/image/RasterImage.cpp index b67ec3bef4..5725aee3a4 100644 --- a/image/RasterImage.cpp +++ b/image/RasterImage.cpp @@ -240,13 +240,14 @@ RasterImage::GetIntrinsicSize(nsSize* aSize) //****************************************************************************** NS_IMETHODIMP -RasterImage::GetIntrinsicRatio(nsSize* aRatio) +RasterImage::GetIntrinsicRatio(AspectRatio* aRatio) { if (mError) { return NS_ERROR_FAILURE; } - *aRatio = nsSize(mSize.width, mSize.height); + *aRatio = AspectRatio::FromSize(mSize); + return NS_OK; } diff --git a/image/VectorImage.cpp b/image/VectorImage.cpp index 3028c1c2ec..3fcb296f5f 100644 --- a/image/VectorImage.cpp +++ b/image/VectorImage.cpp @@ -628,7 +628,7 @@ VectorImage::GetIntrinsicSize(nsSize* aSize) //****************************************************************************** NS_IMETHODIMP -VectorImage::GetIntrinsicRatio(nsSize* aRatio) +VectorImage::GetIntrinsicRatio(AspectRatio* aRatio) { if (mError || !mIsFullyLoaded) { return NS_ERROR_FAILURE; diff --git a/image/imgIContainer.idl b/image/imgIContainer.idl index 20c949037f..ba1c494af6 100644 --- a/image/imgIContainer.idl +++ b/image/imgIContainer.idl @@ -12,6 +12,7 @@ #include "gfxMatrix.h" #include "gfxRect.h" #include "mozilla/gfx/2D.h" +#include "mozilla/AspectRatio.h" #include "mozilla/Maybe.h" #include "mozilla/RefPtr.h" #include "nsRect.h" @@ -55,6 +56,7 @@ native SamplingFilter(mozilla::gfx::SamplingFilter); native nsIntRectByVal(nsIntRect); [ref] native nsIntSize(nsIntSize); native nsSize(nsSize); +native AspectRatio(mozilla::AspectRatio); [ptr] native nsIFrame(nsIFrame); native TempRefImageContainer(already_AddRefed<mozilla::layers::ImageContainer>); [ref] native ImageRegion(mozilla::image::ImageRegion); @@ -101,7 +103,7 @@ interface imgIContainer : nsISupports * The (dimensionless) intrinsic ratio of this image. In the case of any * error, an exception will be thrown. */ - [noscript] readonly attribute nsSize intrinsicRatio; + [noscript] readonly attribute AspectRatio intrinsicRatio; /** * Given a size at which this image will be displayed, and the drawing |