Commit 1ff1e196 authored by chrishtr@chromium.org's avatar chrishtr@chromium.org

Don't anti-alias backgrounds of images.

This fixes a pixel bleed issue on very high-DPI screens.

BUG=423834

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

git-svn-id: svn://svn.chromium.org/blink/trunk@185161 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent fe430f53
crbug.com/423834 fast/borders/border-radius-mask-video-ratio.html [ NeedsRebaseline ]
crbug.com/423834 fast/borders/border-radius-mask-video-shadow.html [ NeedsRebaseline ]
crbug.com/423834 fast/borders/border-radius-mask-video.html [ NeedsRebaseline ]
crbug.com/423834 fast/overflow/overflow-update-transform.html [ NeedsRebaseline ]
crbug.com/423834 fast/replaced/border-radius-clip-content-edge.html [ NeedsRebaseline ]
crbug.com/423834 fast/replaced/selection-rect-transform.html [ NeedsRebaseline ]
crbug.com/423834 ietestcenter/css3/bordersbackgrounds/border-radius-content-edge-001.htm [ NeedsRebaseline ]
# This directly has manual tests that don't have to run with run-webkit-tests
crbug.com/359838 http/tests/ManualTests/ [ Skip ]
......
<!DOCTYPE html>
<style type="text/css">
.mi {
margin-top: 1px; /* Precondition for bug. */
width: 395px; /* Not important. */
height: 296px; /* Not important. */
}
</style>
<!-- With an anti-aliased background, this image will show a row of red pixels at the top at
device pixel ration 3.5. To fix this, we turn off anti-aliasing for image backgrounds.
-->
<img class="mi" id="target" src="../../http/tests/resources/square20.jpg"> -->
<script>
window.onload = function () {
if (window.internals && window.testRunner)
testRunner.setBackingScaleFactor(3.5, finishTest);
}
function finishTest() {
if (window.testRunner)
window.testRunner.notifyDone();
}
</script>
\ No newline at end of file
<!DOCTYPE html>
<style type="text/css">
.mi {
background-color: #f00; /* Just makes the bug visible. */
margin-top: 1px; /* Precondition for bug. */
width: 395px;
height: 296px;
}
</style>
<!-- With an anti-aliased background, this image will show a row of red pixels at the top at
device pixel ration 3.5. To fix this, we turn off anti-aliasing for image backgrounds.
-->
<img class="mi" id="target" src="../../http/tests/resources/square20.jpg"> -->
<script>
window.onload = function () {
if (window.internals && window.testRunner)
testRunner.setBackingScaleFactor(3.5, finishTest);
}
function finishTest() {
if (window.testRunner)
window.testRunner.notifyDone();
}
</script>
\ No newline at end of file
......@@ -200,4 +200,17 @@ void ImagePainter::paintIntoRect(GraphicsContext* context, const LayoutRect& rec
InspectorInstrumentation::didPaintImage(&m_renderImage);
}
void ImagePainter::paintBoxDecorationBackground(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
{
// Don't anti-alias the background of an image. See crbug.com/423834 for the reason why.
// However, don't turn off anti-aliasing for subclasses such as video.
bool shouldAntialias = !m_renderImage.isRenderImage();
bool oldShouldAntialias = paintInfo.context->shouldAntialias();
paintInfo.context->setShouldAntialias(shouldAntialias);
BoxPainter(m_renderImage).paintBoxDecorationBackground(paintInfo, paintOffset);
paintInfo.context->setShouldAntialias(oldShouldAntialias);
}
} // namespace blink
......@@ -17,9 +17,10 @@ class ImagePainter {
public:
ImagePainter(RenderImage& renderImage) : m_renderImage(renderImage) { }
void paint(PaintInfo&, const LayoutPoint&);
void paintReplaced(PaintInfo&, const LayoutPoint&);
void paintIntoRect(GraphicsContext*, const LayoutRect&);
void paint(PaintInfo&, const LayoutPoint& paintOffset);
void paintReplaced(PaintInfo&, const LayoutPoint& paintOffset);
void paintIntoRect(GraphicsContext*, const LayoutRect& paintOffset);
void paintBoxDecorationBackground(PaintInfo&, const LayoutPoint& paintOffset);
private:
void paintAreaElementFocusRing(PaintInfo&);
......
......@@ -280,6 +280,11 @@ void RenderImage::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
ImagePainter(*this).paint(paintInfo, paintOffset);
}
void RenderImage::paintBoxDecorationBackground(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
{
ImagePainter(*this).paintBoxDecorationBackground(paintInfo, paintOffset);
}
void RenderImage::areaElementFocusChanged(HTMLAreaElement* areaElement)
{
ASSERT(areaElement->imageElement() == node());
......
......@@ -81,6 +81,8 @@ protected:
virtual void imageChanged(WrappedImagePtr, const IntRect* = 0) override;
virtual void paint(PaintInfo&, const LayoutPoint&) override final;
virtual void paintBoxDecorationBackground(PaintInfo&, const LayoutPoint&) override final;
virtual void layout() override;
virtual bool updateImageLoadingPriorities() override final;
......
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