Bug 364719 - "Resizers of images are positioned wrongly when page is scrolled" [p=mfenniak-moz@mathieu.fenniak.net (Mathieu Fenniak) / chris@pearce.org.nz (Chris Pearce [cpearce]) r=peterv r+sr=roc a=blocking1.9+]

This commit is contained in:
2008-01-21 23:39:06 -08:00
parent 0b98da0a96
commit b80b7d72ad
8 changed files with 134 additions and 88 deletions

View File

@@ -106,7 +106,7 @@ nsHTMLEditor::GetAbsolutelyPositionedSelectionContainer(nsIDOMElement **_retval)
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(element);
nsCOMPtr<nsIDOMNode> resultNode;
do {
while (!resultNode && !nsEditor::NodeIsType(node, nsEditProperty::html)) {
res = mHTMLCSSUtils->GetComputedProperty(node, nsEditProperty::cssPosition,
positionStr);
if (NS_FAILED(res)) return res;
@@ -118,8 +118,7 @@ nsHTMLEditor::GetAbsolutelyPositionedSelectionContainer(nsIDOMElement **_retval)
if (NS_FAILED(res)) return res;
node.swap(parentNode);
}
} while (!resultNode &&
!nsEditor::NodeIsType(node, nsEditProperty::html));
}
element = do_QueryInterface(resultNode );
*_retval = element;
@@ -315,16 +314,16 @@ nsHTMLEditor::HideGrabber()
nsCOMPtr<nsIPresShell> ps = do_QueryReferent(mPresShellWeak);
if (!ps) return NS_ERROR_NOT_INITIALIZED;
// get the root content node.
nsCOMPtr<nsIDOMNode> parentNode;
res = mGrabber->GetParentNode(getter_AddRefs(parentNode));
NS_ENSURE_SUCCESS(res, res);
nsIDOMElement *rootElement = GetRoot();
nsCOMPtr<nsIContent> parentContent = do_QueryInterface(parentNode);
if (!parentContent) return NS_ERROR_NULL_POINTER;
nsCOMPtr<nsIContent> rootContent = do_QueryInterface(rootElement);
if (!rootContent) return NS_ERROR_NULL_POINTER;
DeleteRefToAnonymousNode(mGrabber, rootContent, ps);
DeleteRefToAnonymousNode(mGrabber, parentContent, ps);
mGrabber = nsnull;
DeleteRefToAnonymousNode(mPositioningShadow, rootContent, ps);
DeleteRefToAnonymousNode(mPositioningShadow, parentContent, ps);
mPositioningShadow = nsnull;
return NS_OK;
@@ -346,11 +345,13 @@ nsHTMLEditor::ShowGrabberOnElement(nsIDOMElement * aElement)
// first, let's keep track of that element...
mAbsolutelyPositionedObject = aElement;
nsIDOMElement *rootElement = GetRoot();
if (!rootElement) return NS_ERROR_NULL_POINTER;
nsCOMPtr<nsIDOMNode> parentNode;
res = aElement->GetParentNode(getter_AddRefs(parentNode));
NS_ENSURE_SUCCESS(res, res);
res = CreateGrabber(parentNode, getter_AddRefs(mGrabber));
NS_ENSURE_SUCCESS(res, res);
res = CreateGrabber(rootElement, getter_AddRefs(mGrabber));
if (NS_FAILED(res)) return res;
// and set its position
return RefreshGrabber();
}
@@ -358,16 +359,17 @@ nsHTMLEditor::ShowGrabberOnElement(nsIDOMElement * aElement)
nsresult
nsHTMLEditor::StartMoving(nsIDOMElement *aHandle)
{
nsIDOMElement *rootElement = GetRoot();
if (!rootElement) return NS_ERROR_NULL_POINTER;
nsCOMPtr<nsIDOMNode> parentNode;
nsresult res = mGrabber->GetParentNode(getter_AddRefs(parentNode));
NS_ENSURE_SUCCESS(res, res);
// now, let's create the resizing shadow
nsresult result = CreateShadow(getter_AddRefs(mPositioningShadow),
rootElement, mAbsolutelyPositionedObject);
if (NS_FAILED(result)) return result;
result = SetShadowPosition(mPositioningShadow, mAbsolutelyPositionedObject,
res = CreateShadow(getter_AddRefs(mPositioningShadow),
parentNode, mAbsolutelyPositionedObject);
NS_ENSURE_SUCCESS(res,res);
res = SetShadowPosition(mPositioningShadow, mAbsolutelyPositionedObject,
mPositionedObjectX, mPositionedObjectY);
if (NS_FAILED(result)) return result;
NS_ENSURE_SUCCESS(res,res);
// make the shadow appear
mPositioningShadow->RemoveAttribute(NS_LITERAL_STRING("class"));
@@ -381,7 +383,7 @@ nsHTMLEditor::StartMoving(nsIDOMElement *aHandle)
mPositionedObjectHeight);
mIsMoving = PR_TRUE;
return result;
return res;
}
void
@@ -421,14 +423,15 @@ nsHTMLEditor::EndMoving()
nsCOMPtr<nsIPresShell> ps = do_QueryReferent(mPresShellWeak);
if (!ps) return NS_ERROR_NOT_INITIALIZED;
// get the root content node.
nsCOMPtr<nsIDOMNode> parentNode;
nsresult res = mGrabber->GetParentNode(getter_AddRefs(parentNode));
NS_ENSURE_SUCCESS(res, res);
nsIDOMElement *rootElement = GetRoot();
nsCOMPtr<nsIContent> parentContent( do_QueryInterface(parentNode) );
if (!parentContent) return NS_ERROR_FAILURE;
nsCOMPtr<nsIContent> rootContent( do_QueryInterface(rootElement) );
if (!rootContent) return NS_ERROR_FAILURE;
DeleteRefToAnonymousNode(mPositioningShadow, parentContent, ps);
DeleteRefToAnonymousNode(mPositioningShadow, rootContent, ps);
mPositioningShadow = nsnull;
}
nsCOMPtr<nsPIDOMEventTarget> piTarget = GetPIDOMEventTarget();