nsresult nsContentEventHandler::OnQueryEditorRect(nsQueryContentEvent* aEvent) { nsresult rv = Init(aEvent); if (NS_FAILED(rv)) return rv; nsIFrame* frame = mRootContent->GetPrimaryFrame(); NS_ENSURE_TRUE(frame, NS_ERROR_FAILURE); // get rect for first frame nsRect resultRect(nsPoint(0, 0), frame->GetRect().Size()); rv = ConvertToRootViewRelativeOffset(frame, resultRect); NS_ENSURE_SUCCESS(rv, rv); // account for any additional frames while ((frame = frame->GetNextContinuation()) != nsnull) { nsRect frameRect(nsPoint(0, 0), frame->GetRect().Size()); rv = ConvertToRootViewRelativeOffset(frame, frameRect); NS_ENSURE_SUCCESS(rv, rv); resultRect.UnionRect(resultRect, frameRect); } aEvent->mReply.mRect = resultRect.ToOutsidePixels(mPresContext->AppUnitsPerDevPixel()); aEvent->mSucceeded = PR_TRUE; return NS_OK; }
QRectF clipRect() const { // Start with an invalid rect. QRectF resultRect(0, 0, -1, -1); for (const QSGClipNode* clip = clipList(); clip; clip = clip->clipList()) { QMatrix4x4 clipMatrix; if (pageNode()->devicePixelRatio() != 1.0) { clipMatrix.scale(pageNode()->devicePixelRatio()); if (clip->matrix()) clipMatrix *= (*clip->matrix()); } else if (clip->matrix()) clipMatrix = *clip->matrix(); QRectF currentClip; if (clip->isRectangular()) currentClip = clipMatrix.mapRect(clip->clipRect()); else { const QSGGeometry* geometry = clip->geometry(); // Assume here that clipNode has only coordinate data. const QSGGeometry::Point2D* geometryPoints = geometry->vertexDataAsPoint2D(); // Clip region should be at least triangle to make valid clip. if (geometry->vertexCount() < 3) continue; QPolygonF polygon; for (int i = 0; i < geometry->vertexCount(); i++) polygon.append(clipMatrix.map(QPointF(geometryPoints[i].x, geometryPoints[i].y))); currentClip = polygon.boundingRect(); } if (currentClip.isEmpty()) continue; if (resultRect.isValid()) resultRect &= currentClip; else resultRect = currentClip; } return resultRect; }
QRectF WebContentAnimationItem::findZoomableRectForPoint(const QPointF& point) { QPointF zoomPoint = m_webView->mapFromParent(point); QWebHitTestResult hitResult = m_webView->page()->mainFrame()->hitTestContent(zoomPoint.toPoint()); QWebElement targetElement = hitResult.enclosingBlockElement(); while (!targetElement.isNull() && targetElement.geometry().width() < MinDoubleClickZoomTargetWidth) targetElement = targetElement.parent(); if (!targetElement.isNull()) { QRectF elementRect = targetElement.geometry(); qreal overMinWidth = elementRect.width() - ZoomableContentMinWidth; if (overMinWidth < 0) elementRect.adjust(overMinWidth / 2, 0, -overMinWidth / 2, 0); zoomPoint.setX(elementRect.x()); QRectF resultRect(zoomPoint, elementRect.size()); return QRectF(m_webView->mapToParent(resultRect.topLeft()), m_webView->mapToParent(resultRect.bottomRight())); } return QRectF(); }