SUMMARY Resizing the selection via keyboard is inconsistent, and some "directions" don't work. STEPS TO REPRODUCE 1. Select a rectangular region 2. Press any of the resize keyboard shortcuts to see the results OBSERVED RESULT Pressing Alt+Shift+Right/Down increases selection width/height by 2 pixels Pressing Alt+Shift+Left/Up does nothing Pressing Alt+Right/Down increases selection width/height by 16 pixels Pressing Alt+Left/Up reduces selection width/height by 14 pixels EXPECTED RESULT Alt+Shift+Arrow used to increase/decrease selection size by 1 pixel Alt+Arrow used to increase/decrease selection size by 10, maybe 15 pixels. SOFTWARE/OS VERSIONS Linux/KDE Plasma: KDE Plasma Version: 5.20.5 KDE Frameworks Version: 5.78.0 Qt Version: 5.15.2 Kernel Version: 5.4.89-1-MANJARO OS Type: 64-bit
Can confirm.
My screen is 1920x1080 (only one monitor is connected, no scaling), but when I take a screenshot in rectangular region mode, and I draw the selection from the very top left of the screen to the very bottom right of the screen, the selection size can sometimes exceed the 1080p resolution, e.g. 1921x1082. Then pressing Alt+Shift+Left/Up (which should do nothing due to the bug) repeatedly will further increase the selection size, e.g. 1951x1095, which is not expected because the size should not exceed the monitor's resolution. But even if the selection size exceeds the resolution, the saved screenshot will be 1920x1080, which is fine.
I've tried fixing a bug, but I don't know how to report it. Could someone adapt to the upstream? src/QuickEditor/QuickEditor.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/QuickEditor/QuickEditor.cpp b/src/QuickEditor/QuickEditor.cpp index 277f831..4bb90c8 100644 --- a/src/QuickEditor/QuickEditor.cpp +++ b/src/QuickEditor/QuickEditor.cpp @@ -204,9 +204,10 @@ void QuickEditor::keyPressEvent(QKeyEvent *event) break; } const qreal step = (shiftPressed ? 1 : magnifierLargeStep); - const int newPos = boundsUp(qRound(mSelection.top() * devicePixelRatio - step), false); + const int yPos = modifiers & Qt::AltModifier ? mSelection.bottom() : mSelection.top(); + const int newPos = boundsUp(qRound(yPos * devicePixelRatio - step), false); if (modifiers & Qt::AltModifier) { - mSelection.setBottom(devicePixelRatioI * newPos + mSelection.height()); + mSelection.setBottom(devicePixelRatioI * newPos); mSelection = mSelection.normalized(); } else { mSelection.moveTop(devicePixelRatioI * newPos); @@ -222,7 +223,7 @@ void QuickEditor::keyPressEvent(QKeyEvent *event) const qreal step = (shiftPressed ? 1 : magnifierLargeStep); const int newPos = boundsRight(qRound(mSelection.left() * devicePixelRatio + step), false); if (modifiers & Qt::AltModifier) { - mSelection.setRight(devicePixelRatioI * newPos + mSelection.width()); + mSelection.setRight(devicePixelRatioI * newPos + mSelection.width() -1); } else { mSelection.moveLeft(devicePixelRatioI * newPos); } @@ -237,7 +238,7 @@ void QuickEditor::keyPressEvent(QKeyEvent *event) const qreal step = (shiftPressed ? 1 : magnifierLargeStep); const int newPos = boundsDown(qRound(mSelection.top() * devicePixelRatio + step), false); if (modifiers & Qt::AltModifier) { - mSelection.setBottom(devicePixelRatioI * newPos + mSelection.height()); + mSelection.setBottom(devicePixelRatioI * newPos + mSelection.height() - 1); } else { mSelection.moveTop(devicePixelRatioI * newPos); } @@ -250,9 +251,10 @@ void QuickEditor::keyPressEvent(QKeyEvent *event) break; } const qreal step = (shiftPressed ? 1 : magnifierLargeStep); - const int newPos = boundsLeft(qRound(mSelection.left() * devicePixelRatio - step), false); + const int xPos = modifiers & Qt::AltModifier ? mSelection.right() : mSelection.left(); + const int newPos = boundsLeft(qRound(xPos * devicePixelRatio - step), false); if (modifiers & Qt::AltModifier) { - mSelection.setRight(devicePixelRatioI * newPos + mSelection.width()); + mSelection.setRight(devicePixelRatioI * newPos); mSelection = mSelection.normalized(); } else { mSelection.moveLeft(devicePixelRatioI * newPos);
You can submit that patch at https://invent.kde.org/graphics/spectacle/-/merge_requests. To learn how, see https://community.kde.org/Infrastructure/GitLab#Submitting_a_Merge_Request
Thank you for the useful advice. I was able to submit a patch.
Git commit 813d8a7183e7bd8b8463d0b0f77366a392d39429 by Nate Graham, on behalf of oioi 555. Committed on 11/04/2022 at 15:09. Pushed by ngraham into branch 'master'. Fix resizing with keyboard shortcuts The reason why "Alt + Shift + Left/Up" did not scale down was an error in position specification. The following function has only one caller. I also removed it because it contains unused code and increases pixel error when converting from floating point numbers to integers. "boundsLeft", "boundsRight", "boundsUp", "boundsDown" If the scaling is other than 100%, the amount of movement may inevitably increase. M +25 -78 src/QuickEditor/QuickEditor.cpp M +0 -4 src/QuickEditor/QuickEditor.h https://invent.kde.org/graphics/spectacle/commit/813d8a7183e7bd8b8463d0b0f77366a392d39429