зеркало из https://github.com/mozilla/pjs.git
Bug 39944. Round auto height/width images to nearest pixel to avoid divergence. r=buster,scc
This commit is contained in:
Родитель
1e319e6828
Коммит
7311c9fa51
|
@ -326,6 +326,10 @@ nsHTMLImageLoader::GetDesiredSize(nsIPresContext* aPresContext,
|
||||||
maxWidth = maxHeight = NS_UNCONSTRAINEDSIZE;
|
maxWidth = maxHeight = NS_UNCONSTRAINEDSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float p2t, t2p;
|
||||||
|
aPresContext->GetPixelsToTwips(&p2t);
|
||||||
|
aPresContext->GetTwipsToPixels(&t2p);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
PRBool haveComputedSize = PR_FALSE;
|
PRBool haveComputedSize = PR_FALSE;
|
||||||
PRBool needIntrinsicImageSize = PR_FALSE;
|
PRBool needIntrinsicImageSize = PR_FALSE;
|
||||||
|
@ -348,6 +352,12 @@ nsHTMLImageLoader::GetDesiredSize(nsIPresContext* aPresContext,
|
||||||
? (float) mIntrinsicImageSize.width
|
? (float) mIntrinsicImageSize.width
|
||||||
: (float) mIntrinsicImageSize.height; // avoid divide by zero
|
: (float) mIntrinsicImageSize.height; // avoid divide by zero
|
||||||
float height = (float) mIntrinsicImageSize.height;
|
float height = (float) mIntrinsicImageSize.height;
|
||||||
|
|
||||||
|
// snap the width to the nearest pixel value to prevent a
|
||||||
|
// feedback loop.
|
||||||
|
PRInt32 pixelWidth = NSTwipsToIntPixels(newWidth + nscoord(p2t / 2), t2p);
|
||||||
|
newWidth = NSIntPixelsToTwips(pixelWidth, p2t);
|
||||||
|
|
||||||
newHeight = (nscoord)
|
newHeight = (nscoord)
|
||||||
NSToIntRound(newWidth * height / width);
|
NSToIntRound(newWidth * height / width);
|
||||||
newHeight = MINMAX(newHeight, minHeight, maxHeight);
|
newHeight = MINMAX(newHeight, minHeight, maxHeight);
|
||||||
|
@ -371,6 +381,12 @@ nsHTMLImageLoader::GetDesiredSize(nsIPresContext* aPresContext,
|
||||||
float height = mIntrinsicImageSize.height
|
float height = mIntrinsicImageSize.height
|
||||||
? (float) mIntrinsicImageSize.height
|
? (float) mIntrinsicImageSize.height
|
||||||
: (float) mIntrinsicImageSize.width; // avoid divide by zero
|
: (float) mIntrinsicImageSize.width; // avoid divide by zero
|
||||||
|
|
||||||
|
// snap the height to the nearest pixel value to prevent a
|
||||||
|
// feedback loop.
|
||||||
|
PRInt32 pixelHeight = NSTwipsToIntPixels(newHeight + nscoord(p2t / 2), t2p);
|
||||||
|
newHeight = NSIntPixelsToTwips(pixelHeight, p2t);
|
||||||
|
|
||||||
newWidth = (nscoord)
|
newWidth = (nscoord)
|
||||||
NSToIntRound(newHeight * width / height);
|
NSToIntRound(newHeight * width / height);
|
||||||
newWidth = MINMAX(newWidth, minWidth, maxWidth);
|
newWidth = MINMAX(newWidth, minWidth, maxWidth);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче