void RenderFlow::addFocusRingRects(QPainter *p, int _tx, int _ty) { // Only paint focus ring around outermost contenteditable element. // But skip the body element if it is outermost. if (element() && element()->isContentEditable()) { if (element()->parentNode() && !element()->parentNode()->isContentEditable() && element()->id() != ID_BODY) p->addFocusRingRect(_tx, _ty, width(), height()); return; } for (InlineRunBox* curr = firstLineBox(); curr; curr = curr->nextLineBox()) { p->addFocusRingRect(_tx + curr->xPos(), _ty + curr->yPos(), curr->width(), curr->height()); } for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling()) { if (!curr->isText()) curr->addFocusRingRects(p, _tx + curr->xPos(), _ty + curr->yPos()); } if (continuation()) continuation()->addFocusRingRects(p, _tx - containingBlock()->xPos() + continuation()->xPos(), _ty - containingBlock()->yPos() + continuation()->yPos()); }
void RenderLayerModelObject::addChildFocusRingRects(Vector<LayoutRect>& rects, const LayoutPoint& additionalOffset) const { for (RenderObject* current = slowFirstChild(); current; current = current->nextSibling()) { if (current->isText() || current->isListMarker()) continue; if (!current->isBox()) { current->addFocusRingRects(rects, additionalOffset); continue; } RenderBox* box = toRenderBox(current); if (!box->hasLayer()) { box->addFocusRingRects(rects, additionalOffset + box->locationOffset()); continue; } Vector<LayoutRect> layerFocusRingRects; box->addFocusRingRects(layerFocusRingRects, LayoutPoint()); for (size_t i = 0; i < layerFocusRingRects.size(); ++i) { FloatQuad quadInBox = box->localToContainerQuad(FloatQuad(layerFocusRingRects[i]), this); LayoutRect rect = LayoutRect(quadInBox.boundingBox()); if (!rect.isEmpty()) { rect.moveBy(additionalOffset); rects.append(rect); } } } }
void RenderInline::addFocusRingRects(QPainter *p, int _tx, int _ty) { for (InlineRunBox* curr = firstLineBox(); curr; curr = curr->nextLineBox()) { p->addFocusRingRect(_tx + curr->xPos(), _ty + curr->yPos(), curr->width(), curr->height()); } for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling()) { if (!curr->isText()) curr->addFocusRingRects(p, _tx + curr->xPos(), _ty + curr->yPos()); } if (continuation()) continuation()->addFocusRingRects(p, _tx - containingBlock()->xPos() + continuation()->xPos(), _ty - containingBlock()->yPos() + continuation()->yPos()); }