author | Cameron McCormack <cam@mcc.id.au> |
Fri, 17 Apr 2020 02:57:44 +0000 | |
changeset 524540 | 35f6bf00a95e1b8d5d9961af6284cf37f96a1167 |
parent 524539 | 65aaf1efc60cc2787227ea62a333dcae253c4309 |
child 524541 | c30a54ef15b5212e9c6abd12b1f200d837cf6346 |
push id | 37321 |
push user | dluca@mozilla.com |
push date | Fri, 17 Apr 2020 09:38:52 +0000 |
treeherder | mozilla-central@24537fed53e6 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | tnikkel |
bugs | 1616411 |
milestone | 77.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -24,16 +24,17 @@ #include "mozilla/MemoryReporting.h" #include "mozilla/PerfStats.h" #include "mozilla/PresShell.h" #include "mozilla/ServoStyleSetInlines.h" #include "mozilla/StaticPrefs_apz.h" #include "mozilla/StaticPrefs_dom.h" #include "mozilla/StaticPrefs_font.h" #include "mozilla/StaticPrefs_gfx.h" +#include "mozilla/StaticPrefs_image.h" #include "mozilla/StaticPrefs_layers.h" #include "mozilla/StaticPrefs_layout.h" #include "mozilla/Unused.h" #include "mozilla/ViewportFrame.h" #include "nsCharTraits.h" #include "mozilla/dom/BrowserChild.h" #include "mozilla/dom/Document.h" #include "mozilla/dom/DocumentInlines.h" @@ -7597,31 +7598,41 @@ nsLayoutUtils::SurfaceFromElementResult } nsCOMPtr<imgIContainer> imgContainer; rv = imgRequest->GetImage(getter_AddRefs(imgContainer)); if (NS_FAILED(rv)) { return result; } + nsCOMPtr<nsIContent> content = do_QueryInterface(aElement); + + // Ensure that the image is oriented the same way as it's displayed. + auto orientation = StaticPrefs::image_honor_orientation_metadata() + ? StyleImageOrientation::FromImage + : StyleImageOrientation::None; + if (nsIFrame* f = content->GetPrimaryFrame()) { + orientation = f->StyleVisibility()->mImageOrientation; + } + imgContainer = OrientImage(imgContainer, orientation); + uint32_t noRasterize = aSurfaceFlags & SFE_NO_RASTERIZING_VECTORS; uint32_t whichFrame = (aSurfaceFlags & SFE_WANT_FIRST_FRAME_IF_IMAGE) ? (uint32_t)imgIContainer::FRAME_FIRST : (uint32_t)imgIContainer::FRAME_CURRENT; uint32_t frameFlags = imgIContainer::FLAG_SYNC_DECODE | imgIContainer::FLAG_ASYNC_NOTIFY; if (aSurfaceFlags & SFE_NO_COLORSPACE_CONVERSION) frameFlags |= imgIContainer::FLAG_DECODE_NO_COLORSPACE_CONVERSION; if (aSurfaceFlags & SFE_ALLOW_NON_PREMULT) { frameFlags |= imgIContainer::FLAG_DECODE_NO_PREMULTIPLY_ALPHA; } int32_t imgWidth, imgHeight; - nsCOMPtr<nsIContent> content = do_QueryInterface(aElement); HTMLImageElement* element = HTMLImageElement::FromNodeOrNull(content); if (aSurfaceFlags & SFE_USE_ELEMENT_SIZE_IF_VECTOR && element && imgContainer->GetType() == imgIContainer::TYPE_VECTOR) { // We're holding a strong ref to "element" via "content". imgWidth = MOZ_KnownLive(element)->Width(); imgHeight = MOZ_KnownLive(element)->Height(); } else { rv = imgContainer->GetWidth(&imgWidth);