dom::EventTarget* WidgetEvent::GetOriginalDOMEventTarget() const { if (mOriginalTarget) { return GetTargetForDOMEvent(mOriginalTarget); } return GetDOMEventTarget(); }
nsresult HTMLEditor::StartResizing(nsIDOMElement* aHandle) { mIsResizing = true; mActivatedHandle = do_QueryInterface(aHandle); NS_ENSURE_STATE(mActivatedHandle || !aHandle); mActivatedHandle->SetAttr(kNameSpaceID_None, nsGkAtoms::_moz_activated, NS_LITERAL_STRING("true"), true); // do we want to preserve ratio or not? bool preserveRatio = HTMLEditUtils::IsImage(mResizedObject) && Preferences::GetBool("editor.resizing.preserve_ratio", true); // the way we change the position/size of the shadow depends on // the handle nsAutoString locationStr; aHandle->GetAttribute(NS_LITERAL_STRING("anonlocation"), locationStr); if (locationStr.Equals(kTopLeft)) { SetResizeIncrements(1, 1, -1, -1, preserveRatio); } else if (locationStr.Equals(kTop)) { SetResizeIncrements(0, 1, 0, -1, false); } else if (locationStr.Equals(kTopRight)) { SetResizeIncrements(0, 1, 1, -1, preserveRatio); } else if (locationStr.Equals(kLeft)) { SetResizeIncrements(1, 0, -1, 0, false); } else if (locationStr.Equals(kRight)) { SetResizeIncrements(0, 0, 1, 0, false); } else if (locationStr.Equals(kBottomLeft)) { SetResizeIncrements(1, 0, -1, 1, preserveRatio); } else if (locationStr.Equals(kBottom)) { SetResizeIncrements(0, 0, 0, 1, false); } else if (locationStr.Equals(kBottomRight)) { SetResizeIncrements(0, 0, 1, 1, preserveRatio); } // make the shadow appear mResizingShadow->UnsetAttr(kNameSpaceID_None, nsGkAtoms::_class, true); // position it mCSSEditUtils->SetCSSPropertyPixels(*mResizingShadow, *nsGkAtoms::width, mResizedObjectWidth); mCSSEditUtils->SetCSSPropertyPixels(*mResizingShadow, *nsGkAtoms::height, mResizedObjectHeight); // add a mouse move listener to the editor nsresult result = NS_OK; if (!mMouseMotionListenerP) { mMouseMotionListenerP = new ResizerMouseMotionListener(*this); if (!mMouseMotionListenerP) { return NS_ERROR_OUT_OF_MEMORY; } nsCOMPtr<nsIDOMEventTarget> target = GetDOMEventTarget(); NS_ENSURE_TRUE(target, NS_ERROR_FAILURE); result = target->AddEventListener(NS_LITERAL_STRING("mousemove"), mMouseMotionListenerP, true); NS_ASSERTION(NS_SUCCEEDED(result), "failed to register mouse motion listener"); } return result; }
NS_IMETHODIMP HTMLEditor::HideResizers() { NS_ENSURE_TRUE(mResizedObject, NS_OK); // get the presshell's document observer interface. nsCOMPtr<nsIPresShell> ps = GetPresShell(); // We allow the pres shell to be null; when it is, we presume there // are no document observers to notify, but we still want to // UnbindFromTree. NS_NAMED_LITERAL_STRING(mousedown, "mousedown"); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mTopLeftHandle), ps); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mTopHandle), ps); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mTopRightHandle), ps); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mLeftHandle), ps); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mRightHandle), ps); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mBottomLeftHandle), ps); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mBottomHandle), ps); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mBottomRightHandle), ps); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mResizingShadow), ps); RemoveListenerAndDeleteRef(mousedown, mEventListener, true, Move(mResizingInfo), ps); if (mActivatedHandle) { mActivatedHandle->UnsetAttr(kNameSpaceID_None, nsGkAtoms::_moz_activated, true); mActivatedHandle = nullptr; } // don't forget to remove the listeners ! nsCOMPtr<nsIDOMEventTarget> target = GetDOMEventTarget(); if (target && mMouseMotionListenerP) { DebugOnly<nsresult> rv = target->RemoveEventListener(NS_LITERAL_STRING("mousemove"), mMouseMotionListenerP, true); NS_ASSERTION(NS_SUCCEEDED(rv), "failed to remove mouse motion listener"); } mMouseMotionListenerP = nullptr; nsCOMPtr<nsIDocument> doc = GetDocument(); if (!doc) { return NS_ERROR_NULL_POINTER; } target = do_QueryInterface(doc->GetWindow()); if (!target) { return NS_ERROR_NULL_POINTER; } if (mResizeEventListenerP) { DebugOnly<nsresult> rv = target->RemoveEventListener(NS_LITERAL_STRING("resize"), mResizeEventListenerP, false); NS_ASSERTION(NS_SUCCEEDED(rv), "failed to remove resize event listener"); } mResizeEventListenerP = nullptr; mResizedObject->UnsetAttr(kNameSpaceID_None, nsGkAtoms::_moz_resizing, true); mResizedObject = nullptr; return NS_OK; }