nsresult HTMLEditor::ShowResizersInner(Element& aResizedElement) { if (mResizedObject) { NS_ERROR("call HideResizers first"); return NS_ERROR_UNEXPECTED; } nsCOMPtr<nsIContent> parentContent = aResizedElement.GetParent(); if (NS_WARN_IF(!parentContent)) { return NS_ERROR_FAILURE; } mResizedObject = &aResizedElement; // The resizers and the shadow will be anonymous siblings of the element. mTopLeftHandle = CreateResizer(nsIHTMLObjectResizer::eTopLeft, *parentContent); NS_ENSURE_TRUE(mTopLeftHandle, NS_ERROR_FAILURE); mTopHandle = CreateResizer(nsIHTMLObjectResizer::eTop, *parentContent); NS_ENSURE_TRUE(mTopHandle, NS_ERROR_FAILURE); mTopRightHandle = CreateResizer(nsIHTMLObjectResizer::eTopRight, *parentContent); NS_ENSURE_TRUE(mTopRightHandle, NS_ERROR_FAILURE); mLeftHandle = CreateResizer(nsIHTMLObjectResizer::eLeft, *parentContent); NS_ENSURE_TRUE(mLeftHandle, NS_ERROR_FAILURE); mRightHandle = CreateResizer(nsIHTMLObjectResizer::eRight, *parentContent); NS_ENSURE_TRUE(mRightHandle, NS_ERROR_FAILURE); mBottomLeftHandle = CreateResizer(nsIHTMLObjectResizer::eBottomLeft, *parentContent); NS_ENSURE_TRUE(mBottomLeftHandle, NS_ERROR_FAILURE); mBottomHandle = CreateResizer(nsIHTMLObjectResizer::eBottom, *parentContent); NS_ENSURE_TRUE(mBottomHandle, NS_ERROR_FAILURE); mBottomRightHandle = CreateResizer(nsIHTMLObjectResizer::eBottomRight, *parentContent); NS_ENSURE_TRUE(mBottomRightHandle, NS_ERROR_FAILURE); nsresult rv = GetPositionAndDimensions(aResizedElement, mResizedObjectX, mResizedObjectY, mResizedObjectWidth, mResizedObjectHeight, mResizedObjectBorderLeft, mResizedObjectBorderTop, mResizedObjectMarginLeft, mResizedObjectMarginTop); NS_ENSURE_SUCCESS(rv, rv); // and let's set their absolute positions in the document rv = SetAllResizersPosition(); NS_ENSURE_SUCCESS(rv, rv); // now, let's create the resizing shadow mResizingShadow = CreateShadow(*parentContent, aResizedElement); NS_ENSURE_TRUE(mResizingShadow, NS_ERROR_FAILURE); // and set its position rv = SetShadowPosition(mResizingShadow, &aResizedElement, mResizedObjectX, mResizedObjectY); NS_ENSURE_SUCCESS(rv, rv); // and then the resizing info tooltip mResizingInfo = CreateResizingInfo(*parentContent); NS_ENSURE_TRUE(mResizingInfo, NS_ERROR_FAILURE); // and listen to the "resize" event on the window first, get the // window from the document... nsCOMPtr<nsIDocument> doc = GetDocument(); NS_ENSURE_TRUE(doc, NS_ERROR_NULL_POINTER); nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(doc->GetWindow()); if (!target) { return NS_ERROR_NULL_POINTER; } mResizeEventListenerP = new DocumentResizeEventListener(*this); rv = target->AddEventListener(NS_LITERAL_STRING("resize"), mResizeEventListenerP, false); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } // XXX Even when it failed to add event listener, should we need to set // _moz_resizing attribute? aResizedElement.SetAttr(kNameSpaceID_None, nsGkAtoms::_moz_resizing, NS_LITERAL_STRING("true"), true); MOZ_ASSERT(mResizedObject == &aResizedElement); return NS_OK; }
nsresult nsHTMLEditor::ShowResizersInner(nsIDOMElement *aResizedElement) { NS_ENSURE_ARG_POINTER(aResizedElement); nsresult res; nsCOMPtr<nsIDOMNode> parentNode; res = aResizedElement->GetParentNode(getter_AddRefs(parentNode)); NS_ENSURE_SUCCESS(res, res); if (mResizedObject) { NS_ERROR("call HideResizers first"); return NS_ERROR_UNEXPECTED; } mResizedObject = aResizedElement; // The resizers and the shadow will be anonymous siblings of the element. res = CreateResizer(getter_AddRefs(mTopLeftHandle), nsIHTMLObjectResizer::eTopLeft, parentNode); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mTopHandle), nsIHTMLObjectResizer::eTop, parentNode); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mTopRightHandle), nsIHTMLObjectResizer::eTopRight, parentNode); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mLeftHandle), nsIHTMLObjectResizer::eLeft, parentNode); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mRightHandle), nsIHTMLObjectResizer::eRight, parentNode); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mBottomLeftHandle), nsIHTMLObjectResizer::eBottomLeft, parentNode); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mBottomHandle), nsIHTMLObjectResizer::eBottom, parentNode); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mBottomRightHandle), nsIHTMLObjectResizer::eBottomRight, parentNode); if (NS_FAILED(res)) return res; res = GetPositionAndDimensions(aResizedElement, mResizedObjectX, mResizedObjectY, mResizedObjectWidth, mResizedObjectHeight, mResizedObjectBorderLeft, mResizedObjectBorderTop, mResizedObjectMarginLeft, mResizedObjectMarginTop); if (NS_FAILED(res)) return res; // and let's set their absolute positions in the document res = SetAllResizersPosition(); if (NS_FAILED(res)) return res; // now, let's create the resizing shadow res = CreateShadow(getter_AddRefs(mResizingShadow), parentNode, aResizedElement); if (NS_FAILED(res)) return res; // and set its position res = SetShadowPosition(mResizingShadow, mResizedObject, mResizedObjectX, mResizedObjectY); if (NS_FAILED(res)) return res; // and then the resizing info tooltip res = CreateResizingInfo(getter_AddRefs(mResizingInfo), parentNode); if (NS_FAILED(res)) return res; // and listen to the "resize" event on the window first, get the // window from the document... nsCOMPtr<nsIDOMDocument> domDoc; GetDocument(getter_AddRefs(domDoc)); nsCOMPtr<nsIDocument> doc = do_QueryInterface(domDoc); if (!doc) return NS_ERROR_NULL_POINTER; nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(doc->GetWindow()); if (!target) { return NS_ERROR_NULL_POINTER; } mResizeEventListenerP = new DocumentResizeEventListener(this); if (!mResizeEventListenerP) { return NS_ERROR_OUT_OF_MEMORY; } res = target->AddEventListener(NS_LITERAL_STRING("resize"), mResizeEventListenerP, PR_FALSE); aResizedElement->SetAttribute(NS_LITERAL_STRING("_moz_resizing"), NS_LITERAL_STRING("true")); return res; }
NS_IMETHODIMP nsHTMLEditor::ShowResizers(nsIDOMElement *aResizedElement) { NS_ENSURE_ARG_POINTER(aResizedElement); mResizedObject = aResizedElement; // the resizers and the shadow will be anonymous children of the body nsIDOMElement *bodyElement = GetRoot(); if (!bodyElement) return NS_ERROR_NULL_POINTER; // let's create the resizers nsresult res; res = CreateResizer(getter_AddRefs(mTopLeftHandle), nsIHTMLObjectResizer::eTopLeft, bodyElement); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mTopHandle), nsIHTMLObjectResizer::eTop, bodyElement); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mTopRightHandle), nsIHTMLObjectResizer::eTopRight, bodyElement); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mLeftHandle), nsIHTMLObjectResizer::eLeft, bodyElement); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mRightHandle), nsIHTMLObjectResizer::eRight, bodyElement); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mBottomLeftHandle), nsIHTMLObjectResizer::eBottomLeft, bodyElement); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mBottomHandle), nsIHTMLObjectResizer::eBottom, bodyElement); if (NS_FAILED(res)) return res; res = CreateResizer(getter_AddRefs(mBottomRightHandle), nsIHTMLObjectResizer::eBottomRight, bodyElement); if (NS_FAILED(res)) return res; res = GetPositionAndDimensions(aResizedElement, mResizedObjectX, mResizedObjectY, mResizedObjectWidth, mResizedObjectHeight, mResizedObjectBorderLeft, mResizedObjectBorderTop, mResizedObjectMarginLeft, mResizedObjectMarginTop); if (NS_FAILED(res)) return res; // and let's set their absolute positions in the document res = SetAllResizersPosition(); if (NS_FAILED(res)) return res; // now, let's create the resizing shadow res = CreateShadow(getter_AddRefs(mResizingShadow), bodyElement, aResizedElement); if (NS_FAILED(res)) return res; // and set its position res = SetShadowPosition(mResizingShadow, mResizedObject, mResizedObjectX, mResizedObjectY); if (NS_FAILED(res)) return res; // and then the resizing info tooltip res = CreateResizingInfo(getter_AddRefs(mResizingInfo), bodyElement); if (NS_FAILED(res)) return res; // and listen to the "resize" event on the window // first, get the script global object from the document... nsCOMPtr<nsIDOMDocument> domDoc; GetDocument(getter_AddRefs(domDoc)); nsCOMPtr<nsIDocument> doc = do_QueryInterface(domDoc); if (!doc) return NS_ERROR_NULL_POINTER; nsIScriptGlobalObject *global = doc->GetScriptGlobalObject(); if (!global) { return NS_ERROR_NULL_POINTER; } mResizeEventListenerP = new DocumentResizeEventListener(this); if (!mResizeEventListenerP) { return NS_ERROR_OUT_OF_MEMORY; } nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(global); res = target->AddEventListener(NS_LITERAL_STRING("resize"), mResizeEventListenerP, PR_FALSE); aResizedElement->SetAttribute(NS_LITERAL_STRING("_moz_resizing"), NS_LITERAL_STRING("true")); return res; }