nsresult nsImageMap::ChangeFocus(nsIDOMEvent* aEvent, PRBool aFocus) { //Set which one of our areas changed focus nsCOMPtr<nsIDOMEventTarget> target; if (NS_SUCCEEDED(aEvent->GetTarget(getter_AddRefs(target))) && target) { nsCOMPtr<nsIContent> targetContent(do_QueryInterface(target)); if (targetContent) { PRUint32 i, n = mAreas.Length(); for (i = 0; i < n; i++) { Area* area = mAreas.ElementAt(i); if (area->mArea == targetContent) { //Set or Remove internal focus area->HasFocus(aFocus); //Now invalidate the rect nsIFrame* imgFrame = targetContent->GetPrimaryFrame(); if (imgFrame) { nsRect dmgRect; area->GetRect(imgFrame, dmgRect); imgFrame->Invalidate(dmgRect); } break; } } } } return NS_OK; }
nsresult nsImageMap::HandleEvent(nsIDOMEvent* aEvent) { nsAutoString eventType; aEvent->GetType(eventType); bool focus = eventType.EqualsLiteral("focus"); NS_ABORT_IF_FALSE(focus == !eventType.EqualsLiteral("blur"), "Unexpected event type"); //Set which one of our areas changed focus nsCOMPtr<nsIDOMEventTarget> target; if (NS_SUCCEEDED(aEvent->GetTarget(getter_AddRefs(target))) && target) { nsCOMPtr<nsIContent> targetContent(do_QueryInterface(target)); if (targetContent) { PRUint32 i, n = mAreas.Length(); for (i = 0; i < n; i++) { Area* area = mAreas.ElementAt(i); if (area->mArea == targetContent) { //Set or Remove internal focus area->HasFocus(focus); //Now invalidate the rect if (mImageFrame) { nsRect dmgRect; area->GetRect(mImageFrame, dmgRect); mImageFrame->Invalidate(dmgRect); } break; } } } } return NS_OK; }
nsresult nsImageMap::GetBoundsForAreaContent(nsIContent *aContent, nsRect& aBounds) { NS_ENSURE_TRUE(aContent && mImageFrame, NS_ERROR_INVALID_ARG); // Find the Area struct associated with this content node, and return bounds uint32_t i, n = mAreas.Length(); for (i = 0; i < n; i++) { Area* area = mAreas.ElementAt(i); if (area->mArea == aContent) { aBounds = nsRect(); area->GetRect(mImageFrame, aBounds); return NS_OK; } } return NS_ERROR_FAILURE; }
NS_IMETHODIMP nsImageMap::GetBoundsForAreaContent(nsIContent *aContent, nsRect& aBounds) { NS_ENSURE_TRUE(aContent, NS_ERROR_INVALID_ARG); // Find the Area struct associated with this content node, and return bounds PRUint32 i, n = mAreas.Length(); for (i = 0; i < n; i++) { Area* area = mAreas.ElementAt(i); if (area->mArea == aContent) { aBounds = nsRect(); nsIFrame* frame = aContent->GetPrimaryFrame(); if (frame) { area->GetRect(frame, aBounds); } return NS_OK; } } return NS_ERROR_FAILURE; }