Example #1
0
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;
}
Example #2
0
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;
}