Bug 514871 - [regression] Canvas runs off when click+hold very zoomed in (ex. when doing pixel art operations)
Summary: [regression] Canvas runs off when click+hold very zoomed in (ex. when doing p...
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Tools (other bugs)
Version First Reported In: git master (please specify the git hash!)
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords: regression, release_blocker
: 516983 (view as bug list)
Depends on:
Blocks:
 
Reported: 2026-01-20 17:14 UTC by Tiar
Modified: 2026-03-03 14:28 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tiar 2026-01-20 17:14:13 UTC
Canvas runs off when you zoom in the canvas and click and hold in the rectangle tool, line tool, rectangular selection tool, gradient tool, bezier curves tool, and probably many others. (It even runs off if you click and hold the polygonal selection tool though it's not how you're supposed to use it). It makes many tools completely unusable in those conditions, and it's a regression.

I believe it's related to the warnings we now see in the console about the offsets.
That warning happens only once/twice per opening Krita but I noticed weirdness about pixel art operations roughly around the time that warning started to show up in my console.

"The imageRectInWidgetPixels topLeft() does not match the documentOffsetF!
    imageRectInWidgetPixels: QRectF(-0.6,-0.6 0x0)
    documentOffsetF: QPointF(1,1)
Dialog "krita/generators/seexpr" has a widget without an object name: QScrollBar(0x5e0e79d37ef0)
Dialog "krita/generators/seexpr" has a widget without an object name: QScrollBar(0x5e0e6a886d60)
Dialog "krita/generators/seexpr" has a widget without an objectName: QScrollBar(0x5e0e79d37ef0)
Dialog "krita/generators/seexpr" has a widget without an objectName: QScrollBar(0x5e0e6a886d60)
QPainter::begin: Paint device returned engine == 0, type: 2
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::setWorldTransform: Painter not active
The imageRectInWidgetPixels topLeft() does not match the documentOffsetF!
    imageRectInWidgetPixels: QRectF(-0.6,-0.6 0x0)
    documentOffsetF: QPointF(1,1)
    corrected offset: QPointF(-1757,-208)"

SUMMARY


STEPS TO REPRODUCE
1. Create a 2000x2000 (or 200x200, or any other) canvas
2. Zoom in enough to see the pixel grid, one pixel should be around 0.5-1cm on your screen (comfortable zoom for pixel art) (it's around 4000% on 2000x2000 canvas)
3. Try to create a rectangle of size 5x5 using the Rectangle Tool

OBSERVED RESULT
Canvas runs off and you can't make any precise rectangle.

EXPECTED RESULT
You can make a precise rectangle.

SOFTWARE/OS VERSIONS
git master: e8631b83ba

Krita

 Version: 5.3.0-prealpha (git 249e1df)
 Hidpi: true

Qt

  Version (compiled): 5.15.7
  Version (loaded): 5.15.7

OS Information

  Build ABI: x86_64-little_endian-lp64
  Build CPU: x86_64
  CPU: x86_64
  Kernel Type: linux
  Kernel Version: 6.5.0-45-generic
  Pretty Productname: Ubuntu 20.04.6 LTS
  Product Type: ubuntu
  Product Version: 20.04
  Desktop: 
  Appimage build: Yes

Locale

  Languages: en_US, en, en_Latn_US
  C locale: en_US.UTF-8
  QLocale current: en
  QLocale system: en
  QTextCodec for locale: UTF-8

OpenGL Info
 
  Qt Platform Name:  "xcb" 
  Vendor:  "Mesa/X.org" 
  Renderer:  "llvmpipe (LLVM 12.0.0, 256 bits)" 
  Driver version:  "4.5 (Core Profile) Mesa 21.2.6" 
  Shading language:  "4.50" 
  Requested format:  QSurfaceFormat(version 3.3, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::CompatibilityProfile) 
  Current format:  QSurfaceFormat(version 4.5, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::CoreProfile) 
  GL version: 4.5 
  Supports deprecated functions false 
  Is OpenGL ES: false 
  supportsBufferMapping: true 
  supportsBufferInvalidation: true 
  forceDisableTextureBuffers: false
Comment 1 Tiar 2026-01-21 01:31:17 UTC
It's caused by b89e641c9f3b63f98827dddde25b82a2a1b10147, which was merged as part of https://invent.kde.org/graphics/krita/-/merge_requests/2423 .
Comment 2 Bug Janitor Service 2026-02-03 17:17:35 UTC
A possibly relevant merge request was started @ https://invent.kde.org/graphics/krita/-/merge_requests/2632
Comment 3 Freya Lupen 2026-03-02 19:56:44 UTC
*** Bug 516983 has been marked as a duplicate of this bug. ***
Comment 4 Dmitry Kazakov 2026-03-03 14:28:25 UTC
Git commit 280ca966f0eaf4a43adfa24d1224f0d834754ea7 by Dmitry Kazakov, on behalf of Agata Cacko.
Committed on 03/03/2026 at 14:28.
Pushed by dkazakov into branch 'master'.

Fix zoom being too fast when zoomed in

Before this commit, it wasn't possible to create a rectangle with
a good control over what's going on when you were very zoomed in
(enough to see pixels) on a big canvas (like 2000 x 2000, zoom > 4000).
The speed of canvas running off was too quick to make a controlled
action. This commit scales the speed of the movement by the zoom,
so the speed of the canvas is the same visually when zoomed in
or zoomed out.

Commit made and tested by Agata Cacko <tamtamy.tymona@gmail.com>
but the code was written by Dmitry Kazakov.

M  +12   -3    libs/flake/KoToolProxy.cpp

https://invent.kde.org/graphics/krita/-/commit/280ca966f0eaf4a43adfa24d1224f0d834754ea7
Comment 5 Dmitry Kazakov 2026-03-03 14:28:50 UTC
Git commit 386e16b734abc83835f88b8d1e472a19ad2652ec by Dmitry Kazakov.
Committed on 03/03/2026 at 14:28.
Pushed by dkazakov into branch 'krita/6.0'.

Fix zoom being too fast when zoomed in

Before this commit, it wasn't possible to create a rectangle with
a good control over what's going on when you were very zoomed in
(enough to see pixels) on a big canvas (like 2000 x 2000, zoom > 4000).
The speed of canvas running off was too quick to make a controlled
action. This commit scales the speed of the movement by the zoom,
so the speed of the canvas is the same visually when zoomed in
or zoomed out.

Commit made and tested by Agata Cacko <tamtamy.tymona@gmail.com>
but the code was written by Dmitry Kazakov.


(cherry picked from commit 280ca966f0eaf4a43adfa24d1224f0d834754ea7)

6a065d7f Fix zoom being too fast when zoomed in
9edd2afd Use better implementation for the scaling calculations

Co-authored-by: Agata Cacko <tamtamy.tymona@gmail.com>

M  +12   -3    libs/flake/KoToolProxy.cpp

https://invent.kde.org/graphics/krita/-/commit/386e16b734abc83835f88b8d1e472a19ad2652ec