mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 812899 part 2. Change the centering code in nsImageDocument to only try vertically centering via auto margins when we're not overflowing in the vertical direction, because if we _are_ overflowing that should cut off part of the image per spec. r=khuey
This commit is contained in:
parent
f155474462
commit
195442c101
@ -414,7 +414,11 @@ ImageDocument::RestoreImage()
|
||||
imageContent->UnsetAttr(kNameSpaceID_None, nsGkAtoms::height, true);
|
||||
|
||||
if (ImageIsOverflowing()) {
|
||||
SetModeClass(eOverflowing);
|
||||
if (!mImageIsOverflowingVertically) {
|
||||
SetModeClass(eOverflowingHorizontalOnly);
|
||||
} else {
|
||||
SetModeClass(eOverflowingVertical);
|
||||
}
|
||||
}
|
||||
else {
|
||||
SetModeClass(eNone);
|
||||
@ -506,10 +510,16 @@ ImageDocument::SetModeClass(eModeClasses mode)
|
||||
classList->Remove(NS_LITERAL_STRING("shrinkToFit"), rv);
|
||||
}
|
||||
|
||||
if (mode == eOverflowing) {
|
||||
classList->Add(NS_LITERAL_STRING("overflowing"), rv);
|
||||
if (mode == eOverflowingVertical) {
|
||||
classList->Add(NS_LITERAL_STRING("overflowingVertical"), rv);
|
||||
} else {
|
||||
classList->Remove(NS_LITERAL_STRING("overflowing"), rv);
|
||||
classList->Remove(NS_LITERAL_STRING("overflowingVertical"), rv);
|
||||
}
|
||||
|
||||
if (mode == eOverflowingHorizontalOnly) {
|
||||
classList->Add(NS_LITERAL_STRING("overflowingHorizontalOnly"), rv);
|
||||
} else {
|
||||
classList->Remove(NS_LITERAL_STRING("overflowingHorizontalOnly"), rv);
|
||||
}
|
||||
}
|
||||
|
||||
@ -682,17 +692,26 @@ ImageDocument::CheckOverflowing(bool changeState)
|
||||
}
|
||||
|
||||
bool imageWasOverflowing = ImageIsOverflowing();
|
||||
bool imageWasOverflowingVertically = mImageIsOverflowingVertically;
|
||||
mImageIsOverflowingHorizontally = mImageWidth > mVisibleWidth;
|
||||
mImageIsOverflowingVertically = mImageHeight > mVisibleHeight;
|
||||
bool windowBecameBigEnough = imageWasOverflowing && !ImageIsOverflowing();
|
||||
bool verticalOverflowChanged =
|
||||
mImageIsOverflowingVertically != imageWasOverflowingVertically;
|
||||
|
||||
if (changeState || mShouldResize || mFirstResize ||
|
||||
windowBecameBigEnough) {
|
||||
windowBecameBigEnough || verticalOverflowChanged) {
|
||||
if (ImageIsOverflowing() && (changeState || mShouldResize)) {
|
||||
ShrinkToFit();
|
||||
}
|
||||
else if (mImageIsResized || mFirstResize || windowBecameBigEnough) {
|
||||
RestoreImage();
|
||||
} else if (!mImageIsResized && verticalOverflowChanged) {
|
||||
if (mImageIsOverflowingVertically) {
|
||||
SetModeClass(eOverflowingVertical);
|
||||
} else {
|
||||
SetModeClass(eOverflowingHorizontalOnly);
|
||||
}
|
||||
}
|
||||
}
|
||||
mFirstResize = false;
|
||||
|
@ -101,7 +101,8 @@ protected:
|
||||
enum eModeClasses {
|
||||
eNone,
|
||||
eShrinkToFit,
|
||||
eOverflowing
|
||||
eOverflowingVertical, // And maybe horizontal too.
|
||||
eOverflowingHorizontalOnly
|
||||
};
|
||||
void SetModeClass(eModeClasses mode);
|
||||
|
||||
|
@ -88,8 +88,53 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=369370
|
||||
is(kidDoc.body.scrollLeft, 0, "Checking scrollLeft");
|
||||
is(kidDoc.body.scrollTop, 0, "Checking scrollTop");
|
||||
|
||||
kidWin.close();
|
||||
SimpleTest.finish();
|
||||
// ========== test 5 ==========
|
||||
// Click in the upper left to zoom in again
|
||||
event = makeClickFor(25, 25);
|
||||
img.dispatchEvent(event);
|
||||
ok(true, "----- click 5 -----");
|
||||
is(img.width, 800, "image width");
|
||||
is(img.height, 600, "image height");
|
||||
is(kidDoc.body.scrollLeft, 0, "Checking scrollLeft");
|
||||
is(kidDoc.body.scrollTop, 0, "Checking scrollTop");
|
||||
is(img.getBoundingClientRect().top, 0, "Image is in view vertically");
|
||||
|
||||
// ========== test 6 ==========
|
||||
// Now try resizing the window so the image fits vertically.
|
||||
function test6() {
|
||||
kidWin.addEventListener("resize", function resizeListener() {
|
||||
kidWin.removeEventListener("resize", resizeListener);
|
||||
// Give the image document time to respond
|
||||
SimpleTest.executeSoon(function() {
|
||||
is(img.height, 600, "image height");
|
||||
is(img.getBoundingClientRect().top, 25, "Image is vertically centered");
|
||||
test7();
|
||||
});
|
||||
});
|
||||
|
||||
var decorationSize = kidWin.outerHeight - kidWin.innerHeight;
|
||||
kidWin.resizeTo(400, 600 + 50 + decorationSize);
|
||||
}
|
||||
|
||||
// ========== test 7 ==========
|
||||
// Now try resizing the window so the image no longer fits vertically.
|
||||
function test7() {
|
||||
kidWin.addEventListener("resize", function resizeListener() {
|
||||
kidWin.removeEventListener("resize", resizeListener);
|
||||
// Give the image document time to respond
|
||||
SimpleTest.executeSoon(function() {
|
||||
is(img.height, 600, "image height");
|
||||
is(img.getBoundingClientRect().top, 0, "Image is at top again");
|
||||
kidWin.close();
|
||||
SimpleTest.finish();
|
||||
});
|
||||
});
|
||||
|
||||
var decorationSize = kidWin.outerHeight - kidWin.innerHeight;
|
||||
kidWin.resizeTo(400, 300 + decorationSize);
|
||||
}
|
||||
|
||||
test6();
|
||||
}
|
||||
var kidWin;
|
||||
var kidDoc;
|
||||
|
@ -9,7 +9,7 @@
|
||||
*/
|
||||
|
||||
@media not print {
|
||||
.overflowing {
|
||||
.overflowingVertical, .overflowingHorizontalOnly {
|
||||
cursor: zoom-out;
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,13 @@
|
||||
left: 0;
|
||||
}
|
||||
|
||||
img.overflowingVertical {
|
||||
/* If we're overflowing vertically, we need to set margin-top to
|
||||
0. Otherwise we'll end up trying to vertically center, and end
|
||||
up cutting off the top part of the image. */
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.completeRotation {
|
||||
transition: transform 0.3s ease 0s;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user