IntRect FrameView::convertToRenderer(const RenderObject& renderer, const IntRect& viewRect) const { IntRect rect = viewRect; // FIXME: we don't have a way to map an absolute rect down to a local quad, so just // move the rect for now. rect.setLocation(roundedIntPoint(renderer.absoluteToLocal(rect.location(), UseTransforms))); return rect; }
IntRect PluginView::calculateClipRect() const { FrameView* frameView = toFrameView(parent()); bool visible = frameView && isVisible(); RenderObject* renderer = m_element->renderer(); if (visible && frameView->width() && frameView->height() && renderer) { IntSize windowSize = frameView->hostWindow()->platformPageClient()->viewportSize(); // Get the clipped rectangle for this player within the current frame. IntRect visibleContentRect; IntRect contentRect = renderer->absoluteClippedOverflowRect(); FloatPoint contentLocal = renderer->absoluteToLocal(FloatPoint(contentRect.location())); contentRect.setLocation(roundedIntPoint(contentLocal)); contentRect.move(frameRect().x(), frameRect().y()); // Clip against any frames that the widget is inside. Note that if the frames are also clipped // by a div, that will not be included in this calculation. That is an improvement that still // needs to be made. const Widget* current = this; while (current->parent() && visible) { // Determine if it is visible in this scrollview. visibleContentRect = current->parent()->visibleContentRect(); // Special case for the root ScrollView. Its size does not match the actual window size. if (current->parent() == root()) visibleContentRect.setSize(windowSize); contentRect.intersect(visibleContentRect); visible = !contentRect.isEmpty(); // Offset to visible coordinates in scrollview widget's coordinate system (except in the case of // the top scroll view). if (current->parent()->parent()) contentRect.move(-visibleContentRect.x(), -visibleContentRect.y()); current = current->parent(); // Don't include the offset for the root window or we get the wrong coordinates. if (current->parent()) { // Move content rect into the parent scrollview's coordinates. IntRect curFrameRect = current->frameRect(); contentRect.move(curFrameRect.x(), curFrameRect.y()); } } return contentRect; } return IntRect(); }
IntPoint FrameView::convertToRenderer(const RenderObject& renderer, const IntPoint& viewPoint) const { return roundedIntPoint(renderer.absoluteToLocal(viewPoint, UseTransforms)); }