bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, int& tx, int& ty) { if (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhaseOutline && paintInfo.phase != PaintPhaseSelfOutline && paintInfo.phase != PaintPhaseSelection && paintInfo.phase != PaintPhaseMask) return false; if (!shouldPaintWithinRoot(paintInfo)) return false; // if we're invisible or haven't received a layout yet, then just bail. if (style()->visibility() != VISIBLE) return false; int currentTX = tx + m_x; int currentTY = ty + m_y; // Early exit if the element touches the edges. int top = currentTY + overflowTop(); int bottom = currentTY + overflowHeight(); if (isSelected() && m_inlineBoxWrapper) { int selTop = ty + m_inlineBoxWrapper->root()->selectionTop(); int selBottom = ty + selTop + m_inlineBoxWrapper->root()->selectionHeight(); top = min(selTop, top); bottom = max(selBottom, bottom); } int os = 2 * maximalOutlineSize(paintInfo.phase); if (currentTX + overflowLeft() >= paintInfo.rect.right() + os || currentTX + overflowWidth() <= paintInfo.rect.x() - os) return false; if (top >= paintInfo.rect.bottom() + os || bottom <= paintInfo.rect.y() - os) return false; return true; }
void RenderScrollbarPart::paintIntoRect(GraphicsContext* graphicsContext, int tx, int ty, const IntRect& rect) { // Make sure our dimensions match the rect. setLocation(rect.x() - tx, rect.y() - ty); setWidth(rect.width()); setHeight(rect.height()); setOverflowWidth(max(rect.width(), overflowWidth())); setOverflowHeight(max(rect.height(), overflowHeight())); if (graphicsContext->paintingDisabled()) return; // Now do the paint. RenderObject::PaintInfo paintInfo(graphicsContext, rect, PaintPhaseBlockBackground, false, 0, 0); paint(paintInfo, tx, ty); paintInfo.phase = PaintPhaseChildBlockBackgrounds; paint(paintInfo, tx, ty); paintInfo.phase = PaintPhaseFloat; paint(paintInfo, tx, ty); paintInfo.phase = PaintPhaseForeground; paint(paintInfo, tx, ty); paintInfo.phase = PaintPhaseOutline; paint(paintInfo, tx, ty); }