From 2b1f9633ee2cd86af59ad4cbf31ef3b7233db6d8 Mon Sep 17 00:00:00 2001 From: John Schoenick Date: Fri, 23 May 2014 16:05:42 -0700 Subject: [PATCH] Bug 870021 - Part 5.2 - Ask content to compute its intrinsic size in nsImageFrame. r=roc --- layout/generic/nsImageFrame.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/layout/generic/nsImageFrame.cpp b/layout/generic/nsImageFrame.cpp index 31e8d073974..e47bad54e89 100644 --- a/layout/generic/nsImageFrame.cpp +++ b/layout/generic/nsImageFrame.cpp @@ -734,9 +734,29 @@ nsImageFrame::ComputeSize(nsRenderingContext *aRenderingContext, nsPresContext *presContext = PresContext(); EnsureIntrinsicSizeAndRatio(presContext); + nsCOMPtr imageLoader = do_QueryInterface(mContent); + NS_ASSERTION(imageLoader, "No content node??"); + mozilla::IntrinsicSize intrinsicSize(mIntrinsicSize); + + if (intrinsicSize.width.GetUnit() == eStyleUnit_Coord) { + uint32_t width; + if (NS_SUCCEEDED(imageLoader->GetNaturalWidth(&width))) { + nscoord appWidth = nsPresContext::CSSPixelsToAppUnits((int32_t)width); + intrinsicSize.width.SetCoordValue(appWidth); + } + } + + if (intrinsicSize.height.GetUnit() == eStyleUnit_Coord) { + uint32_t height; + if (NS_SUCCEEDED(imageLoader->GetNaturalHeight(&height))) { + nscoord appHeight = nsPresContext::CSSPixelsToAppUnits((int32_t)height); + intrinsicSize.height.SetCoordValue(appHeight); + } + } + return nsLayoutUtils::ComputeSizeWithIntrinsicDimensions( aRenderingContext, this, - mIntrinsicSize, mIntrinsicRatio, aCBSize, + intrinsicSize, mIntrinsicRatio, aCBSize, aMargin, aBorder, aPadding); }