Fix selection residue in sub-pixel positioned element

We are inconsistent when invalidating and painting sub-pixel positioned
selections. See the bug for details.

This change add back the enclosingIntRect() calls that were removed in
http://src.chromium.org/viewvc/blink?view=rev&revision=177408. This is
needed before we fix the inconsistency.

BUG=394698
TEST=editing/selection/subpixel-positioned-selection.html

Review URL: https://codereview.chromium.org/464143003

git-svn-id: svn://svn.chromium.org/blink/trunk@180477 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 1439da9c
......@@ -191,6 +191,11 @@ crbug.com/318978 [ Linux ] http/tests/security/frameNavigation/xss-DENIED-plugin
crbug.com/318978 [ Linux ] permissionclient/plugin-permission.html [ Skip ]
crbug.com/318978 [ Linux ] plugins/ [ Skip ]
crbug.com/394698 fast/repaint/repaint-across-writing-mode-boundary.html [ NeedsRebaseline ]
crbug.com/394698 fast/repaint/japanese-rl-selection-repaint.html [ NeedsRebaseline ]
crbug.com/394698 compositing/squashing/selection-repaint-with-gaps.html [ NeedsRebaseline ]
crbug.com/394698 editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root.html [ NeedsRebaseline ]
crbug.com/380217 virtual/regionbasedmulticol/fast/multicol/newmulticol/layers-in-multicol.html [ Skip ]
crbug.com/380217 [ Linux Win ] fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-large-radius.html [ Skip ]
crbug.com/380217 [ Linux Win ] fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-bottom-left.html [ Skip ]
......
<!DOCTYPE html>
There should be no residue when shrinking a selection under a sub-pixel-positioned element.
<div style="position: absolute; left: 0.3px">
ABCDEFGHIJKLMNOPQRSTUVWXYZ
</div>
<!DOCTYPE html>
<script src="../../resources/run-after-display.js"></script>
<script>
if (window.testRunner)
testRunner.waitUntilDone();
function test(start, end) {
var text = document.getElementsByTagName('div')[0].firstChild;
window.getSelection().setBaseAndExtent(text, start, text, end);
if (start == end) {
if (window.testRunner)
testRunner.notifyDone();
return;
}
runAfterDisplay(function() {
test(start + 1, end - 1);
});
}
onload = function() {
test(1, 25);
};
</script>
There should be no residue when shrinking a selection under a sub-pixel-positioned element.
<div style="position: absolute; left: 0.3px">
ABCDEFGHIJKLMNOPQRSTUVWXYZ
</div>
......@@ -81,7 +81,7 @@ public:
void invalidatePaint()
{
m_object->invalidatePaintUsingContainer(m_paintInvalidationContainer, m_rect, InvalidationSelection);
m_object->invalidatePaintUsingContainer(m_paintInvalidationContainer, enclosingIntRect(m_rect), InvalidationSelection);
}
LayoutRect rect() const { return m_rect; }
......@@ -111,7 +111,7 @@ public:
// paintInvalidationContainer as the render object. Find out why it does that and fix.
if (m_paintInvalidationContainer && m_paintInvalidationContainer->layer()->groupedMapping())
RenderLayer::mapRectToPaintInvalidationBacking(m_paintInvalidationContainer, m_paintInvalidationContainer, paintInvalidationRect);
m_object->invalidatePaintUsingContainer(m_paintInvalidationContainer, paintInvalidationRect, InvalidationSelection);
m_object->invalidatePaintUsingContainer(m_paintInvalidationContainer, enclosingIntRect(paintInvalidationRect), InvalidationSelection);
}
RenderBlock* block() const { return toRenderBlock(m_object); }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment