Bug 335834

Summary: Weighted smoothing should be screenspace-proportional
Product: [Applications] krita Reporter: Jonathan Ringstad <jwringstad>
Component: UsabilityAssignee: Krita Bugs <krita-bugs-null>
Status: RESOLVED FIXED    
Severity: normal CC: dimula73
Priority: NOR    
Version: git master (please specify the git hash!)   
Target Milestone: ---   
Platform: Arch Linux   
OS: Linux   
Latest Commit: Version Fixed In:

Description Jonathan Ringstad 2014-06-05 12:56:37 UTC
Currently, the weighted smoothing tool takes a distance as value, which is interpreted as canvas-space distance in pixels. This feels awkward for a few reasons; 

- when zooming in and out, you get different amounts of smoothing, making it difficult to create e.g. consistent lines while working at different zoom-levels
- when working with canvases of different size (e.g. prototyping part of a composition in a smaller document) you get different amounts of smoothing
- when switching between working on different resolutions (e.g. 128x128 pixelart vs. 2048x2048 HD-art) you get completely different results, so you can't just say "40 is my favourite value for doing line-work"
- the current way things work is inconsistent with the new stabilizer mode which is resolution-independent (time-based smoothing)

I think the intuition behind smoothing is that "it's like having an extra weight added to your hand to smooth out your hand-movements", so to the user it is most intuitive that smoothing is something that happens "to his input". Hence I don't think it should be proportional to canvas-space, but proportional to screenspace (which should always be proportional to the users hand-movements, unless he remaps his tablet)



Reproducible: Always

Steps to Reproduce:
1. Create 2048x2048 canvas
2. Set weighted smoothing tool to some high value (e.g. 1000)
3. Draw some lines (they should get nicely smoothed out)
3. zoom in to e.g. 500%
4. It's now basically impossible to make any fine lines because the smoothing tool smoothes your lines 5 times harder than it did when at 100% zoom.
Comment 1 Dmitry Kazakov 2014-06-06 04:19:39 UTC
Hi, Jonathan!

Thanks for your report! Your suggestion looks quite reasonable. I think we'll implement it soon.
Comment 2 Dmitry Kazakov 2014-06-06 12:17:07 UTC
Git commit 555b20efdbc1f672984b567276358c41ccba4844 by Dmitry Kazakov.
Committed on 06/06/2014 at 12:16.
Pushed by dkazakov into branch 'krita-testing-kazakov'.

[FEATURE] Added a Scalable Distance option to Weighted Smoothing

Now if you activate "Scalable Distance" option for a brush tool,
the distance will be corrected to your current zoom level. It means
that your stylus will be "stabilized" the same way at any zoom level
you choose.
CCMAIL:kimageshop@kde.org

M  +19   -0    krita/plugins/tools/defaulttools/kis_tool_brush.cc
M  +5    -0    krita/plugins/tools/defaulttools/kis_tool_brush.h
M  +6    -0    krita/ui/canvas/kis_coordinates_converter.cpp
M  +1    -0    krita/ui/kis_canvas_resource_provider.cpp
M  +2    -1    krita/ui/kis_canvas_resource_provider.h
M  +10   -0    krita/ui/kis_config.cc
M  +3    -0    krita/ui/kis_config.h
M  +6    -0    krita/ui/kis_zoom_manager.cc
M  +6    -0    krita/ui/tool/kis_resources_snapshot.cpp
M  +2    -0    krita/ui/tool/kis_resources_snapshot.h
M  +12   -0    krita/ui/tool/kis_smoothing_options.cpp
M  +3    -0    krita/ui/tool/kis_smoothing_options.h
M  +7    -1    krita/ui/tool/kis_tool_freehand_helper.cpp

http://commits.kde.org/calligra/555b20efdbc1f672984b567276358c41ccba4844
Comment 3 Dmitry Kazakov 2014-06-06 12:17:54 UTC
Git commit 5111f3feb003b5e052201b0115a424d5237a8423 by Dmitry Kazakov.
Committed on 06/06/2014 at 12:16.
Pushed by dkazakov into branch 'master'.

[FEATURE] Added a Scalable Distance option to Weighted Smoothing

Now if you activate "Scalable Distance" option for a brush tool,
the distance will be corrected to your current zoom level. It means
that your stylus will be "stabilized" the same way at any zoom level
you choose.
CCMAIL:kimageshop@kde.org

M  +19   -0    krita/plugins/tools/defaulttools/kis_tool_brush.cc
M  +5    -0    krita/plugins/tools/defaulttools/kis_tool_brush.h
M  +6    -0    krita/ui/canvas/kis_coordinates_converter.cpp
M  +1    -0    krita/ui/kis_canvas_resource_provider.cpp
M  +2    -1    krita/ui/kis_canvas_resource_provider.h
M  +10   -0    krita/ui/kis_config.cc
M  +3    -0    krita/ui/kis_config.h
M  +6    -0    krita/ui/kis_zoom_manager.cc
M  +6    -0    krita/ui/tool/kis_resources_snapshot.cpp
M  +2    -0    krita/ui/tool/kis_resources_snapshot.h
M  +12   -0    krita/ui/tool/kis_smoothing_options.cpp
M  +3    -0    krita/ui/tool/kis_smoothing_options.h
M  +7    -1    krita/ui/tool/kis_tool_freehand_helper.cpp

http://commits.kde.org/calligra/5111f3feb003b5e052201b0115a424d5237a8423