void RootInlineBox::addHighlightOverflow() { // Highlight acts as a selection inflation. FloatRect rootRect(0, selectionTop(), width(), selectionHeight()); IntRect inflatedRect = enclosingIntRect(object()->document()->frame()->customHighlightLineRect(object()->style()->highlight(), rootRect)); m_leftOverflow = min(m_leftOverflow, inflatedRect.x()); m_rightOverflow = max(m_rightOverflow, inflatedRect.right()); m_topOverflow = min(m_topOverflow, inflatedRect.y()); m_bottomOverflow = max(m_bottomOverflow, inflatedRect.bottom()); }
void RootInlineBox::paintCustomHighlight(RenderObject::PaintInfo& paintInfo, int tx, int ty, const AtomicString& highlightType) { if (!object()->shouldPaintWithinRoot(paintInfo) || object()->style()->visibility() != VISIBLE || paintInfo.phase != PaintPhaseForeground) return; // Get the inflated rect so that we can properly hit test. FloatRect rootRect(tx + xPos(), ty + selectionTop(), width(), selectionHeight()); FloatRect inflatedRect = object()->document()->frame()->customHighlightLineRect(highlightType, rootRect); if (inflatedRect.intersects(paintInfo.rect)) object()->document()->frame()->paintCustomHighlight(highlightType, rootRect, rootRect, false, true); }
void RootInlineBox::addHighlightOverflow() { Frame* frame = renderer()->document()->frame(); if (!frame) return; Page* page = frame->page(); if (!page) return; // Highlight acts as a selection inflation. FloatRect rootRect(0, selectionTop(), width(), selectionHeight()); IntRect inflatedRect = enclosingIntRect(page->chrome()->client()->customHighlightRect(renderer()->node(), renderer()->style()->highlight(), rootRect)); setHorizontalOverflowPositions(leftLayoutOverflow(), rightLayoutOverflow(), min(leftVisualOverflow(), inflatedRect.x()), max(rightVisualOverflow(), inflatedRect.right())); setVerticalOverflowPositions(topLayoutOverflow(), bottomLayoutOverflow(), min(topVisualOverflow(), inflatedRect.y()), max(bottomVisualOverflow(), inflatedRect.bottom()), height()); }
void InlineTextBox::paintCustomHighlight(int tx, int ty, const AtomicString& type) { Frame* frame = object()->document()->frame(); if (!frame) return; Page* page = frame->page(); if (!page) return; RootInlineBox* r = root(); FloatRect rootRect(tx + r->xPos(), ty + selectionTop(), r->width(), selectionHeight()); FloatRect textRect(tx + xPos(), rootRect.y(), width(), rootRect.height()); page->chrome()->client()->paintCustomHighlight(object()->node(), type, textRect, rootRect, true, false); }
void RootInlineBox::paintCustomHighlight(RenderObject::PaintInfo& paintInfo, int tx, int ty, const AtomicString& highlightType) { if (!renderer()->shouldPaintWithinRoot(paintInfo) || renderer()->style()->visibility() != VISIBLE || paintInfo.phase != PaintPhaseForeground) return; Frame* frame = renderer()->document()->frame(); if (!frame) return; Page* page = frame->page(); if (!page) return; // Get the inflated rect so that we can properly hit test. FloatRect rootRect(tx + x(), ty + selectionTop(), width(), selectionHeight()); FloatRect inflatedRect = page->chrome()->client()->customHighlightRect(renderer()->node(), highlightType, rootRect); if (inflatedRect.intersects(paintInfo.rect)) page->chrome()->client()->paintCustomHighlight(renderer()->node(), highlightType, rootRect, rootRect, false, true); }