Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1245)

Unified Diff: Source/core/rendering/RenderInline.cpp

Issue 492053002: Use LayoutRect during addFocusRingRects to avoid loss of precision (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: NeedsRebaseline (pixel tests about focus rings. 1-pixel width diff at the edge because of different rounding) Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/rendering/RenderInline.h ('k') | Source/core/rendering/RenderObject.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderInline.cpp
diff --git a/Source/core/rendering/RenderInline.cpp b/Source/core/rendering/RenderInline.cpp
index c9dfa1fe9c3de2aa59f46a6e8fedd6159886ce8d..3b11ce666732e8e107a090c417360460959699fc 100644
--- a/Source/core/rendering/RenderInline.cpp
+++ b/Source/core/rendering/RenderInline.cpp
@@ -1375,23 +1375,40 @@ void RenderInline::imageChanged(WrappedImagePtr, const IntRect*)
namespace {
-class AbsoluteRectsIgnoringEmptyRectsGeneratorContext : public AbsoluteRectsGeneratorContext {
+class AbsoluteLayoutRectsGeneratorContext {
public:
- AbsoluteRectsIgnoringEmptyRectsGeneratorContext(Vector<IntRect>& rects, const LayoutPoint& accumulatedOffset)
- : AbsoluteRectsGeneratorContext(rects, accumulatedOffset) { }
+ AbsoluteLayoutRectsGeneratorContext(Vector<LayoutRect>& rects, const LayoutPoint& accumulatedOffset)
+ : m_rects(rects)
+ , m_accumulatedOffset(accumulatedOffset) { }
+
+ void operator()(const FloatRect& rect)
+ {
+ LayoutRect layoutRect(rect);
+ layoutRect.move(m_accumulatedOffset.x(), m_accumulatedOffset.y());
+ m_rects.append(layoutRect);
+ }
+private:
+ Vector<LayoutRect>& m_rects;
+ const LayoutPoint& m_accumulatedOffset;
+};
+
+class AbsoluteLayoutRectsIgnoringEmptyRectsGeneratorContext : public AbsoluteLayoutRectsGeneratorContext {
+public:
+ AbsoluteLayoutRectsIgnoringEmptyRectsGeneratorContext(Vector<LayoutRect>& rects, const LayoutPoint& accumulatedOffset)
+ : AbsoluteLayoutRectsGeneratorContext(rects, accumulatedOffset) { }
void operator()(const FloatRect& rect)
{
if (!rect.isEmpty())
- AbsoluteRectsGeneratorContext::operator()(rect);
+ AbsoluteLayoutRectsGeneratorContext::operator()(rect);
}
};
} // unnamed namespace
-void RenderInline::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint& additionalOffset, const RenderLayerModelObject* paintContainer) const
+void RenderInline::addFocusRingRects(Vector<LayoutRect>& rects, const LayoutPoint& additionalOffset, const RenderLayerModelObject* paintContainer) const
{
- AbsoluteRectsIgnoringEmptyRectsGeneratorContext context(rects, additionalOffset);
+ AbsoluteLayoutRectsIgnoringEmptyRectsGeneratorContext context(rects, additionalOffset);
generateLineBoxRects(context);
addChildFocusRingRects(rects, additionalOffset, paintContainer);
@@ -1401,31 +1418,10 @@ void RenderInline::addFocusRingRects(Vector<IntRect>& rects, const LayoutPoint&
if (paintContainer != continuation()->containerForPaintInvalidation())
return;
if (continuation()->isInline())
- continuation()->addFocusRingRects(rects, flooredLayoutPoint(additionalOffset + continuation()->containingBlock()->location() - containingBlock()->location()), paintContainer);
+ continuation()->addFocusRingRects(rects, additionalOffset + (continuation()->containingBlock()->location() - containingBlock()->location()), paintContainer);
else
- continuation()->addFocusRingRects(rects, flooredLayoutPoint(additionalOffset + toRenderBox(continuation())->location() - containingBlock()->location()), paintContainer);
- }
-}
-
-namespace {
-
-class AbsoluteLayoutRectsGeneratorContext {
-public:
- AbsoluteLayoutRectsGeneratorContext(Vector<LayoutRect>& rects, const LayoutPoint& accumulatedOffset)
- : m_rects(rects)
- , m_accumulatedOffset(accumulatedOffset) { }
-
- void operator()(const FloatRect& rect)
- {
- LayoutRect layoutRect(rect);
- layoutRect.move(m_accumulatedOffset.x(), m_accumulatedOffset.y());
- m_rects.append(layoutRect);
+ continuation()->addFocusRingRects(rects, additionalOffset + (toRenderBox(continuation())->location() - containingBlock()->location()), paintContainer);
}
-private:
- Vector<LayoutRect>& m_rects;
- const LayoutPoint& m_accumulatedOffset;
-};
-
}
void RenderInline::computeSelfHitTestRects(Vector<LayoutRect>& rects, const LayoutPoint& layerOffset) const
« no previous file with comments | « Source/core/rendering/RenderInline.h ('k') | Source/core/rendering/RenderObject.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698