| 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 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 | 778 |
| 779 const char* LayoutInline::name() const | 779 const char* LayoutInline::name() const |
| 780 { | 780 { |
| 781 if (isRelPositioned()) | 781 if (isRelPositioned()) |
| 782 return "LayoutInline (relative positioned)"; | 782 return "LayoutInline (relative positioned)"; |
| 783 if (isAnonymous()) | 783 if (isAnonymous()) |
| 784 return "LayoutInline (anonymous)"; | 784 return "LayoutInline (anonymous)"; |
| 785 return "LayoutInline"; | 785 return "LayoutInline"; |
| 786 } | 786 } |
| 787 | 787 |
| 788 bool LayoutInline::nodeAtPoint(const HitTestRequest& request, HitTestResult& res
ult, | 788 bool LayoutInline::nodeAtPoint(HitTestResult& result, |
| 789 const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOf
fset, HitTestAction hitTestAction) | 789 const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOf
fset, HitTestAction hitTestAction) |
| 790 { | 790 { |
| 791 return m_lineBoxes.hitTest(this, request, result, locationInContainer, accum
ulatedOffset, hitTestAction); | 791 return m_lineBoxes.hitTest(this, result, locationInContainer, accumulatedOff
set, hitTestAction); |
| 792 } | 792 } |
| 793 | 793 |
| 794 namespace { | 794 namespace { |
| 795 | 795 |
| 796 class HitTestCulledInlinesGeneratorContext { | 796 class HitTestCulledInlinesGeneratorContext { |
| 797 public: | 797 public: |
| 798 HitTestCulledInlinesGeneratorContext(Region& region, const HitTestLocation&
location) : m_intersected(false), m_region(region), m_location(location) { } | 798 HitTestCulledInlinesGeneratorContext(Region& region, const HitTestLocation&
location) : m_intersected(false), m_region(region), m_location(location) { } |
| 799 void operator()(const FloatRect& rect) | 799 void operator()(const FloatRect& rect) |
| 800 { | 800 { |
| 801 m_intersected = m_intersected || m_location.intersects(rect); | 801 m_intersected = m_intersected || m_location.intersects(rect); |
| 802 m_region.unite(enclosingIntRect(rect)); | 802 m_region.unite(enclosingIntRect(rect)); |
| 803 } | 803 } |
| 804 bool intersected() const { return m_intersected; } | 804 bool intersected() const { return m_intersected; } |
| 805 private: | 805 private: |
| 806 bool m_intersected; | 806 bool m_intersected; |
| 807 Region& m_region; | 807 Region& m_region; |
| 808 const HitTestLocation& m_location; | 808 const HitTestLocation& m_location; |
| 809 }; | 809 }; |
| 810 | 810 |
| 811 } // unnamed namespace | 811 } // unnamed namespace |
| 812 | 812 |
| 813 bool LayoutInline::hitTestCulledInline(const HitTestRequest& request, HitTestRes
ult& result, const HitTestLocation& locationInContainer, const LayoutPoint& accu
mulatedOffset) | 813 bool LayoutInline::hitTestCulledInline(HitTestResult& result, const HitTestLocat
ion& locationInContainer, const LayoutPoint& accumulatedOffset) |
| 814 { | 814 { |
| 815 ASSERT(result.isRectBasedTest() && !alwaysCreateLineBoxes()); | 815 ASSERT(result.isRectBasedTest() && !alwaysCreateLineBoxes()); |
| 816 if (!visibleToHitTestRequest(request)) | 816 if (!visibleToHitTestRequest(result.hitTestRequest())) |
| 817 return false; | 817 return false; |
| 818 | 818 |
| 819 HitTestLocation tmpLocation(locationInContainer, -toLayoutSize(accumulatedOf
fset)); | 819 HitTestLocation tmpLocation(locationInContainer, -toLayoutSize(accumulatedOf
fset)); |
| 820 | 820 |
| 821 Region regionResult; | 821 Region regionResult; |
| 822 HitTestCulledInlinesGeneratorContext context(regionResult, tmpLocation); | 822 HitTestCulledInlinesGeneratorContext context(regionResult, tmpLocation); |
| 823 generateCulledLineBoxRects(context, this); | 823 generateCulledLineBoxRects(context, this); |
| 824 | 824 |
| 825 if (context.intersected()) { | 825 if (context.intersected()) { |
| 826 updateHitTestResult(result, tmpLocation.point()); | 826 updateHitTestResult(result, tmpLocation.point()); |
| 827 // We can not use addNodeToListBasedTestResult to determine if we fully
enclose the hit-test area | 827 // We can not use addNodeToListBasedTestResult to determine if we fully
enclose the hit-test area |
| 828 // because it can only handle rectangular targets. | 828 // because it can only handle rectangular targets. |
| 829 result.addNodeToListBasedTestResult(node(), request, locationInContainer
); | 829 result.addNodeToListBasedTestResult(node(), locationInContainer); |
| 830 return regionResult.contains(tmpLocation.boundingBox()); | 830 return regionResult.contains(tmpLocation.boundingBox()); |
| 831 } | 831 } |
| 832 return false; | 832 return false; |
| 833 } | 833 } |
| 834 | 834 |
| 835 PositionWithAffinity LayoutInline::positionForPoint(const LayoutPoint& point) | 835 PositionWithAffinity LayoutInline::positionForPoint(const LayoutPoint& point) |
| 836 { | 836 { |
| 837 // FIXME: Does not deal with relative positioned inlines (should it?) | 837 // FIXME: Does not deal with relative positioned inlines (should it?) |
| 838 LayoutBlock* cb = containingBlock(); | 838 LayoutBlock* cb = containingBlock(); |
| 839 if (firstLineBoxIncludingCulling()) { | 839 if (firstLineBoxIncludingCulling()) { |
| (...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1455 } | 1455 } |
| 1456 | 1456 |
| 1457 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain
tInvalidationContainer) const | 1457 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain
tInvalidationContainer) const |
| 1458 { | 1458 { |
| 1459 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine
r); | 1459 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine
r); |
| 1460 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) | 1460 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) |
| 1461 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box); | 1461 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box); |
| 1462 } | 1462 } |
| 1463 | 1463 |
| 1464 } // namespace blink | 1464 } // namespace blink |
| OLD | NEW |