Bug 289915

Summary: Krita's Canvas produces subtle artifacts on incremental updates
Product: [Applications] krita Reporter: Dmitry Kazakov <dimula73>
Component: GeneralAssignee: Krita Bugs <krita-bugs-null>
Status: RESOLVED UNMAINTAINED    
Severity: normal CC: halla
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Unlisted Binaries   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:
Attachments: Before transparent painting
After painting
After painting (with marks, pointing to the artifacts)

Description Dmitry Kazakov 2011-12-27 11:22:08 UTC
Way to reproduce:
1) Open quite contrast image, e.g. lena.png
2) Set the Opacity of the brush to 0%
3) Paint with such a brush on a canvas (it just triggers updates of it)
4) You'll see the small changes of pixels on the border of your brush

It happens on all zoom-levels. It we disable QImage pre-scaling, the effect is much less, but still present.
Comment 1 Dmitry Kazakov 2011-12-27 11:25:26 UTC
No such thing happens in Gimp
Comment 2 Halla Rempt 2011-12-27 11:27:59 UTC
Can you attach a screenshot?
Comment 3 Dmitry Kazakov 2011-12-27 16:31:59 UTC
Git commit ace38fcf7c62bbd3a0db6d21118cb7695ff20c99 by Dmitry Kazakov.
Committed on 27/12/2011 at 18:22.
Pushed by dkazakov into branch 'master'.

KisPrescaleProjection::updateCache should not depend on ant UI data

So now it doesn't fill in the KisUpadteInfo fully, it just saves the
dirty image rect in it and fetches the data. All the UI related actions
are performed in KisPrescaleProjection::recalculateCache.

Added some unittests for KisPrescaleProjection, including the testcase
for bug 289915.
Related: bug 289790
Related: bug 289915

M  +28   -0    krita/sdk/tests/testutil.h
M  +2    -2    krita/ui/canvas/kis_image_pyramid.cpp
M  +1    -1    krita/ui/canvas/kis_image_pyramid.h
M  +30   -23   krita/ui/canvas/kis_prescaled_projection.cpp
M  +23   -4    krita/ui/canvas/kis_prescaled_projection.h
M  +1    -1    krita/ui/canvas/kis_projection_backend.h
A  +-    --    krita/ui/tests/data/prescaled_projection_test/testScrollingZoom50/testScrollingZoom50_initial.png
A  +-    --    krita/ui/tests/data/prescaled_projection_test/testScrollingZoom50/testScrollingZoom50_zoom50.png
A  +-    --    krita/ui/tests/data/prescaled_projection_test/testScrollingZoom50/testScrollingZoom50_zoom50_moved50.png
A  +-    --    krita/ui/tests/data/prescaled_projection_test/testUpdates/testUpdates_cleared.png
A  +-    --    krita/ui/tests/data/prescaled_projection_test/testUpdates/testUpdates_zoom50.png
M  +128  -30   krita/ui/tests/kis_prescaled_projection_test.cpp
M  +3    -1    krita/ui/tests/kis_prescaled_projection_test.h

http://commits.kde.org/calligra/ace38fcf7c62bbd3a0db6d21118cb7695ff20c99
Comment 4 Halla Rempt 2012-01-03 12:06:36 UTC
Isn't this now fixed?
Comment 5 Dmitry Kazakov 2012-01-03 17:26:41 UTC
Created attachment 67402 [details]
Before transparent painting
Comment 6 Dmitry Kazakov 2012-01-03 17:27:00 UTC
Created attachment 67403 [details]
After painting
Comment 7 Dmitry Kazakov 2012-01-03 17:28:19 UTC
Created attachment 67404 [details]
After painting (with marks, pointing to the artifacts)

Please see the screenshots in detailed zoom to see the difference
Comment 8 Dmitry Kazakov 2012-01-03 17:30:17 UTC
The patch above adds a testcase for this bug. See KisPrescaledProjectionTest::testUpdates(). Currently, it is marked as QEXPECT_FAIL, but it can be used for reproducing the bug.
Comment 9 Halla Rempt 2012-06-28 13:10:23 UTC
This looks related to 302664 	on Windows.
Comment 10 Halla Rempt 2013-06-22 13:19:38 UTC

*** This bug has been marked as a duplicate of bug 313502 ***
Comment 11 Dmitry Kazakov 2013-11-04 14:12:16 UTC
This bug is still present in master
Comment 12 Dmitry Kazakov 2015-06-15 11:57:13 UTC
We now use openGL canvas as the mainstream engine. There are no plans to make QPainter Canvas fast and hi-quality. It is mostly a fallback solution. So let's close this bug as UNMAINTAINED :(