nsIntPoint nsCoreUtils::GetScreenCoordsForWindow(nsINode *aNode) { nsIntPoint coords(0, 0); nsCOMPtr<nsIDocShellTreeItem> treeItem(GetDocShellTreeItemFor(aNode)); if (!treeItem) return coords; nsCOMPtr<nsIDocShellTreeItem> rootTreeItem; treeItem->GetRootTreeItem(getter_AddRefs(rootTreeItem)); nsCOMPtr<nsIDOMDocument> domDoc = do_GetInterface(rootTreeItem); nsCOMPtr<nsIDOMDocumentView> docView(do_QueryInterface(domDoc)); if (!docView) return coords; nsCOMPtr<nsIDOMAbstractView> abstractView; docView->GetDefaultView(getter_AddRefs(abstractView)); nsCOMPtr<nsIDOMWindowInternal> windowInter(do_QueryInterface(abstractView)); if (!windowInter) return coords; windowInter->GetScreenX(&coords.x); windowInter->GetScreenY(&coords.y); return coords; }
nsIntPoint nsCoreUtils::GetScreenCoordsForWindow(nsINode *aNode) { nsIntPoint coords(0, 0); nsCOMPtr<nsIDocShellTreeItem> treeItem(GetDocShellTreeItemFor(aNode)); if (!treeItem) return coords; nsCOMPtr<nsIDocShellTreeOwner> treeOwner; treeItem->GetTreeOwner(getter_AddRefs(treeOwner)); if (!treeOwner) return coords; nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(treeOwner); if (baseWindow) baseWindow->GetPosition(&coords.x, &coords.y); // in device pixels return coords; }