| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
| 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. |
| 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 2538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2549 return LayoutBox::localCaretRect(inlineBox, caretOffset, extraWidthToEnd
OfLine); | 2549 return LayoutBox::localCaretRect(inlineBox, caretOffset, extraWidthToEnd
OfLine); |
| 2550 | 2550 |
| 2551 LayoutRect caretRect = localCaretRectForEmptyElement(size().width(), textInd
entOffset()); | 2551 LayoutRect caretRect = localCaretRectForEmptyElement(size().width(), textInd
entOffset()); |
| 2552 | 2552 |
| 2553 if (extraWidthToEndOfLine) | 2553 if (extraWidthToEndOfLine) |
| 2554 *extraWidthToEndOfLine = size().width() - caretRect.maxX(); | 2554 *extraWidthToEndOfLine = size().width() - caretRect.maxX(); |
| 2555 | 2555 |
| 2556 return caretRect; | 2556 return caretRect; |
| 2557 } | 2557 } |
| 2558 | 2558 |
| 2559 void LayoutBlock::addFocusRingRects(Vector<LayoutRect>& rects, const LayoutPoint
& additionalOffset) const | 2559 void LayoutBlock::addOutlineRects(Vector<LayoutRect>& rects, const LayoutPoint&
additionalOffset) const |
| 2560 { | 2560 { |
| 2561 // For blocks inside inlines, we go ahead and include margins so that we run
right up to the | 2561 // For blocks inside inlines, we go ahead and include margins so that we run
right up to the |
| 2562 // inline boxes above and below us (thus getting merged with them to form a
single irregular | 2562 // inline boxes above and below us (thus getting merged with them to form a
single irregular |
| 2563 // shape). | 2563 // shape). |
| 2564 const LayoutInline* inlineElementContinuation = this->inlineElementContinuat
ion(); | 2564 const LayoutInline* inlineElementContinuation = this->inlineElementContinuat
ion(); |
| 2565 if (inlineElementContinuation) { | 2565 if (inlineElementContinuation) { |
| 2566 // FIXME: This check really isn't accurate. | 2566 // FIXME: This check really isn't accurate. |
| 2567 bool nextInlineHasLineBox = inlineElementContinuation->firstLineBox(); | 2567 bool nextInlineHasLineBox = inlineElementContinuation->firstLineBox(); |
| 2568 // FIXME: This is wrong. The principal layoutObject may not be the conti
nuation preceding this block. | 2568 // FIXME: This is wrong. The principal layoutObject may not be the conti
nuation preceding this block. |
| 2569 // FIXME: This is wrong for vertical writing-modes. | 2569 // FIXME: This is wrong for vertical writing-modes. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2583 | 2583 |
| 2584 if (!hasOverflowClip() && !hasControlClip()) { | 2584 if (!hasOverflowClip() && !hasControlClip()) { |
| 2585 for (RootInlineBox* curr = firstRootBox(); curr; curr = curr->nextRootBo
x()) { | 2585 for (RootInlineBox* curr = firstRootBox(); curr; curr = curr->nextRootBo
x()) { |
| 2586 LayoutUnit top = std::max<LayoutUnit>(curr->lineTop(), curr->top()); | 2586 LayoutUnit top = std::max<LayoutUnit>(curr->lineTop(), curr->top()); |
| 2587 LayoutUnit bottom = std::min<LayoutUnit>(curr->lineBottom(), curr->t
op() + curr->height()); | 2587 LayoutUnit bottom = std::min<LayoutUnit>(curr->lineBottom(), curr->t
op() + curr->height()); |
| 2588 LayoutRect rect(additionalOffset.x() + curr->x(), additionalOffset.y
() + top, curr->width(), bottom - top); | 2588 LayoutRect rect(additionalOffset.x() + curr->x(), additionalOffset.y
() + top, curr->width(), bottom - top); |
| 2589 if (!rect.isEmpty()) | 2589 if (!rect.isEmpty()) |
| 2590 rects.append(rect); | 2590 rects.append(rect); |
| 2591 } | 2591 } |
| 2592 | 2592 |
| 2593 addFocusRingRectsForNormalChildren(rects, additionalOffset); | 2593 addOutlineRectsForNormalChildren(rects, additionalOffset); |
| 2594 if (TrackedLayoutBoxListHashSet* positionedObjects = this->positionedObj
ects()) { | 2594 if (TrackedLayoutBoxListHashSet* positionedObjects = this->positionedObj
ects()) { |
| 2595 for (auto* box : *positionedObjects) | 2595 for (auto* box : *positionedObjects) |
| 2596 addFocusRingRectsForDescendant(*box, rects, additionalOffset); | 2596 addOutlineRectsForDescendant(*box, rects, additionalOffset); |
| 2597 } | 2597 } |
| 2598 } | 2598 } |
| 2599 | 2599 |
| 2600 if (inlineElementContinuation) { | 2600 if (inlineElementContinuation) { |
| 2601 Vector<LayoutRect> inlineFocusRingRects; | 2601 Vector<LayoutRect> inlineOutlineRects; |
| 2602 // We need to give the LayoutInline a clean vector to let it add focus r
ing rects of line boxes. | 2602 // We need to give the LayoutInline a clean vector to let it add focus r
ing rects of line boxes. |
| 2603 inlineElementContinuation->addFocusRingRects(inlineFocusRingRects, addit
ionalOffset + (inlineElementContinuation->containingBlock()->location() - locati
on())); | 2603 inlineElementContinuation->addOutlineRects(inlineOutlineRects, additiona
lOffset + (inlineElementContinuation->containingBlock()->location() - location()
)); |
| 2604 rects.appendVector(inlineFocusRingRects); | 2604 rects.appendVector(inlineOutlineRects); |
| 2605 } | 2605 } |
| 2606 } | 2606 } |
| 2607 | 2607 |
| 2608 void LayoutBlock::computeSelfHitTestRects(Vector<LayoutRect>& rects, const Layou
tPoint& layerOffset) const | 2608 void LayoutBlock::computeSelfHitTestRects(Vector<LayoutRect>& rects, const Layou
tPoint& layerOffset) const |
| 2609 { | 2609 { |
| 2610 LayoutBox::computeSelfHitTestRects(rects, layerOffset); | 2610 LayoutBox::computeSelfHitTestRects(rects, layerOffset); |
| 2611 | 2611 |
| 2612 if (hasHorizontalLayoutOverflow() || hasVerticalLayoutOverflow()) { | 2612 if (hasHorizontalLayoutOverflow() || hasVerticalLayoutOverflow()) { |
| 2613 for (RootInlineBox* curr = firstRootBox(); curr; curr = curr->nextRootBo
x()) { | 2613 for (RootInlineBox* curr = firstRootBox(); curr; curr = curr->nextRootBo
x()) { |
| 2614 LayoutUnit top = std::max<LayoutUnit>(curr->lineTop(), curr->top()); | 2614 LayoutUnit top = std::max<LayoutUnit>(curr->lineTop(), curr->top()); |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2925 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout
Object* obj) const | 2925 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout
Object* obj) const |
| 2926 { | 2926 { |
| 2927 showLayoutObject(); | 2927 showLayoutObject(); |
| 2928 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) | 2928 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) |
| 2929 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); | 2929 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); |
| 2930 } | 2930 } |
| 2931 | 2931 |
| 2932 #endif | 2932 #endif |
| 2933 | 2933 |
| 2934 } // namespace blink | 2934 } // namespace blink |
| OLD | NEW |