Bug 369370 - pop-up window image zoom-out leads to wrong (broken) display. r=jst, a.19=damons
git-svn-id: svn://10.0.0.236/trunk@250595 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
25b2058d2b
commit
a319041510
@ -126,6 +126,8 @@ protected:
|
||||
|
||||
void UpdateTitleAndCharset();
|
||||
|
||||
nsresult ScrollImageTo(PRInt32 aX, PRInt32 aY, PRBool restoreImage);
|
||||
|
||||
float GetRatio() {
|
||||
return PR_MIN((float)mVisibleWidth / mImageWidth,
|
||||
(float)mVisibleHeight / mImageHeight);
|
||||
@ -425,6 +427,10 @@ nsImageDocument::ShrinkToFit()
|
||||
image->SetWidth(PR_MAX(1, NSToCoordFloor(GetRatio() * mImageWidth)));
|
||||
image->SetHeight(PR_MAX(1, NSToCoordFloor(GetRatio() * mImageHeight)));
|
||||
|
||||
// The view might have been scrolled when zooming in, scroll back to the
|
||||
// origin now that we're showing a shrunk-to-window version.
|
||||
(void) ScrollImageTo(0, 0, PR_FALSE);
|
||||
|
||||
imageContent->SetAttr(kNameSpaceID_None, nsGkAtoms::style,
|
||||
NS_LITERAL_STRING("cursor: -moz-zoom-in"), PR_TRUE);
|
||||
|
||||
@ -437,11 +443,19 @@ nsImageDocument::ShrinkToFit()
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImageDocument::RestoreImageTo(PRInt32 aX, PRInt32 aY)
|
||||
{
|
||||
return ScrollImageTo(aX, aY, PR_TRUE);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsImageDocument::ScrollImageTo(PRInt32 aX, PRInt32 aY, PRBool restoreImage)
|
||||
{
|
||||
float ratio = GetRatio();
|
||||
|
||||
RestoreImage();
|
||||
FlushPendingNotifications(Flush_Layout);
|
||||
if (restoreImage) {
|
||||
RestoreImage();
|
||||
FlushPendingNotifications(Flush_Layout);
|
||||
}
|
||||
|
||||
nsIPresShell *shell = GetPrimaryShell();
|
||||
if (!shell)
|
||||
|
||||
@ -59,6 +59,8 @@ _TEST_FILES = test_bug1682.html \
|
||||
test_bug324378.html \
|
||||
test_bug332848.xhtml \
|
||||
test_bug359657.html \
|
||||
test_bug369370.html \
|
||||
bug369370-popup.png \
|
||||
test_bug380383.html \
|
||||
test_bug386495.html \
|
||||
test_bug391777.html \
|
||||
|
||||
BIN
mozilla/content/html/document/test/bug369370-popup.png
Normal file
BIN
mozilla/content/html/document/test/bug369370-popup.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.0 KiB |
101
mozilla/content/html/document/test/test_bug369370.html
Normal file
101
mozilla/content/html/document/test/test_bug369370.html
Normal file
@ -0,0 +1,101 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=369370
|
||||
-->
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>Test for Bug 369370</title>
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript">
|
||||
/*
|
||||
* Test strategy:
|
||||
*/
|
||||
function makeClickFor(x, y) {
|
||||
var event = kidDoc.createEvent("mouseevent");
|
||||
event.initMouseEvent("click",
|
||||
true, true, kidWin, 1, // bubbles, cancelable, view, single-click
|
||||
x, y, x, y, // screen X/Y, client X/Y
|
||||
false, false, false, false, // no key modifiers
|
||||
0, null); // left click, not relatedTarget
|
||||
return event;
|
||||
}
|
||||
|
||||
function childLoaded() {
|
||||
kidDoc = kidWin.document;
|
||||
ok(true, "Child window loaded");
|
||||
|
||||
var elements = kidDoc.getElementsByTagName("img");
|
||||
is(elements.length, 1, "looking for imagedoc img");
|
||||
var img = elements[0];
|
||||
|
||||
is(kidDoc.documentElement.clientWidth, 400, "Checking doc width");
|
||||
is(kidDoc.documentElement.clientHeight, 300, "Checking doc height");
|
||||
|
||||
// Image just loaded and is scaled to window size.
|
||||
is(img.width, 378, "image width");
|
||||
is(img.height, 284, "image height");
|
||||
is(kidDoc.body.scrollLeft, 0, "Checking scrollLeft");
|
||||
is(kidDoc.body.scrollTop, 0, "Checking scrollTop");
|
||||
|
||||
// ========== test 1 ==========
|
||||
// Click in the upper left to zoom in
|
||||
var event = makeClickFor(25,25);
|
||||
img.dispatchEvent(event);
|
||||
ok(true, "----- click 1 -----");
|
||||
|
||||
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");
|
||||
|
||||
// ========== test 2 ==========
|
||||
// Click there again to zoom out
|
||||
event = makeClickFor(25,25);
|
||||
img.dispatchEvent(event);
|
||||
ok(true, "----- click 2 -----");
|
||||
|
||||
is(img.width, 378, "image width");
|
||||
is(img.height, 284, "image height");
|
||||
is(kidDoc.body.scrollLeft, 0, "Checking scrollLeft");
|
||||
is(kidDoc.body.scrollTop, 0, "Checking scrollTop");
|
||||
|
||||
// ========== test 3 ==========
|
||||
// Click in the lower right to zoom in
|
||||
event = makeClickFor(350, 250);
|
||||
img.dispatchEvent(event);
|
||||
ok(true, "----- click 3 -----");
|
||||
|
||||
is(img.width, 800, "image width");
|
||||
is(img.height, 600, "image height");
|
||||
is(kidDoc.body.scrollLeft, 408, "Checking scrollLeft");
|
||||
is(kidDoc.body.scrollTop, 316, "Checking scrollTop");
|
||||
|
||||
// ========== test 4 ==========
|
||||
// Click there again to zoom out
|
||||
event = makeClickFor(350, 250);
|
||||
img.dispatchEvent(event);
|
||||
ok(true, "----- click 4 -----");
|
||||
|
||||
is(img.width, 378, "image width");
|
||||
is(img.height, 284, "image height");
|
||||
is(kidDoc.body.scrollLeft, 0, "Checking scrollLeft");
|
||||
is(kidDoc.body.scrollTop, 0, "Checking scrollTop");
|
||||
|
||||
kidWin.close();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var kidWin = window.open("bug369370-popup.png", "bug369370", "width=400,height=300");
|
||||
var kidDoc; // will init onload
|
||||
ok(kidWin, "opened child window");
|
||||
kidWin.onload = childLoaded;
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
x
Reference in New Issue
Block a user