New angle selector widget

Hi. I recently implemented a new angle selector widget to be used in krita, and I’m opening this thread so you can test it and give feedback before it makes it to the stable krita. For example, I put it everywhere a slider/spinbox was used to set an angle/rotation, but it may be that some of those places are better with a plain slider or spinbox instead of the new widget.

This is how it looks in my system:

You can test it by downloading Krita Next (https://krita.org/en/download/krita-desktop/) and you can see more screenshoots and a list of the places I put the widget on here: https://invent.kde.org/graphics/krita/-/merge_requests/620

The angle selector is made of three parts:

  • An circular gauge that:
    • can be changed with the keyboard (up/down/left/right keys), with the mouse wheel or the mouse (clicking and dragging around)
    • has snapping to multiples of a custom angle (the default is 15 degrees, but that is customizable internally) by using ctrl + up/down/left/right keys, ctrl + mouse wheel or by click and dragging close to the gauge (if you click and drag, the angle is changed normally, but if you are at a distance from the center less than twice the radius, then the angle snaps to multiples of the snap angle)
    • has a custom reseting angle that can be set by double clicking
  • A spin box. Nothing fancy, just a widget to allow setting the angle precisely
  • Flip/Reset options:
    • The widget can show 3 additional buttons for quickly flipping the angle
    • If the 3 option buttons take too much space, the widget can have only a menu button that shows a menu with the flip and reset options
    • The previously mentioned menu can also be accesed by right cliking the circular angle gauge
9 Likes

Hi @Deif_Lou,

Thank you for the improvement to the angle selection, it’s a nice facility :slight_smile:

It hasn’t been added to the Tool Options docker when the Transform tool is in use with Free transform Rotate selected.
I realise this is deep into variable options and there are three angle inputs to deal with but would it be possible to do that?

Also, it isn’t in the Grids and Guides docker for Grid Type: Isometric so that’s another place it would be useful to have it.

Hi

Did some tests, seems to work pretty well

Small remarks:

  • In status bar, when angle is not 0.00°, displayed angle is truncated:


    With sometime, difficulties to understand value (here, it’s 19.00°)
    image

  • I’m disturbed by notion of positive angle, that is not consistent through user interfaces



    I think trigonometric orientation is the right one :slight_smile:

Grum999

I don’t get that truncation on my Debian 10 Linux system:

no-truncation-1

What do you see if you hover your cursor over the numder field? :

no-truncation-2

The matter of positive angles is a confusing one.
There is an ‘engineering’ convention that positive rotation angles are clockwise and this is the one used for layer and canvas rotation.

For many other things then the ‘trigonometric’ convention is used and this may be how the angles are normally processed during internal calculations, i.e. as trigonometric constructions and calculations.

For point 1, I think that happens because you have a larger font size and the widget size is fixed. I’ll try to fix it.

For point 2, the problem of inconsistent increasing direction of angles was already there. This widget is only making it more evident because it makes the difference more visible. I already reported this problem in the merge request.
At first the circular angle gauge showed angles increasing counter clockwise only, as you suggest, but this makes it inconsistent with the resulting effect in some places. For example rotating the canvas 45 degrees would show the gauge rotating counter clockwise but the canvas would rotate clockwise. Thats why I added the option to show angles increasing clockwise as well as counter clockwise.
Solving this issue requires a lot of changes, some of them maybe complex, that would break backwards compatibility, so if they are to be done should be done in a mayor version change I think.

That’s strange, on my side, when I was in high school, for technical drawing we were using trigonometric angles.
And looking CAD softwares (LibreCAD I use or my PC or AutoCAD i used a long time ago - used by engineers) default behavior for angle measurement is trigonometric.

But Ok, that’s not a real problem.
As @Deif_Lou saif if I see it, this is because it became evident now.
I never take care about canvas rotation value before now (except 0° and +/-90°) so if it’s too complex to fix this, no problem, I’ll be able to live with it and the most important is to have widget angle preview identical to canvas rotation view :wink:

This widget is really useful here to be able to rotate to +/-90° and reset to 0° quickly :+1:
One suggestion could be, in context menu, add some predefined values:

  • 15 °
  • 30°
  • 45°
  • 60°
  • 75°
  • 90°

    No need to have other values like 120° (just do 60° followed by “Flip the angle horizontally”)
    Reason why I’m asking this is because when I’m drawing, I don’t use keyboard, only 6 button on drawing tablet and the pen.
    So typing 60° value in spinbox is not really easy in this case.
    I know there’s snapping on these angle values, but circular gauge is small and I have difficulties to get value quickly (I currently need to reposition cursor because I’m not able to catch the value from first try)

I’m using a Debian 10 too, Breeze Dark theme + Fusion style
But as has said @Deif_Lou, it might be relative to my font size configuration, because computer on which I have tested widget is running with a 4K monitor using native resolution.

And default font size defined within system settings is set 10pt at 144dpi to let my eyes being able to see text on screen :sweat_smile:
And then text need more space.

A weird effect (position of widget is moving) and a truncated value :slight_smile:
rotation_widget
(Sorry for ugly gif, but I can’t post WebM and/or WebP files…)

Grum999

This is a nice suggestion. +1 . But I wonder if this would be discoverable people don’t generally right click on buttons or other UI element. May be a drop down would be better.

Hello,
Im writting to ask if you could implement more precise angle widget for Perspective grid.
In fact in there we only need to be able to select two angles
30 - true isometric grid
26.57 - 2:1 isometric
and maybe hidden advanced angle selection.

@Grum999 @AhabGreybeard @Zer0Frost

I’ve made some changes that are already merged both to stable and master:

  • I’ve put the widget in the free transform options
  • I’ve put the widget in the isometric grid options (the angles are still whole numbers)
  • I think I’ve fixed the problem with the widget in the status bar. @Grum999 pelase, when you can it would be great you tried it and report to me.

Also I’ve made another merge request (https://invent.kde.org/graphics/krita/-/merge_requests/662) changing the precision of the isometric grid angles to 4 decimals. But this change breaks backwards compatibility, because angles stored as floating point could not be loaded with previous versions of Krita. For this reason, if this is merged, it will be on master (Krita 5) only.

1 Like

Yes, fixed!
Angle value is not truncated anymore :+1:

Grum999

Ok, thanks for testing.

@Deif_Lou - It looks very neat and tidy in the free transform rotation settings with the three-dot options button.

For the backward compatibility of the isometric grid angles, is it a breakage problem in that it won’t open at all?
The new Mesh Transform is not backwards compatible with previous versions (when used in a transform mask) but it just doesn’t work and does not prevent loading of the image.

@Zer0Frost - I don’t understand why you want the existing facilities to become a hidden option when all three possiblities could fit into a list of options.
It may be that you in particular only need to select true isometric or 2:1 isometric, but other people may want the immediately available choice to select any angle they like, as they’ve always been able to do.

Yes, the image will load fine, it’s just that angles with decimals can not be converted to integers and 0 is put instead (a qt behavior when converting a number with decimals encoded in a string to an int) . If the angle is a whole number, for example 12.0000, then it is stored in the file as 12 and can be loaded in previous versions just fine.

Clarification: I sugested it being hidden (not absent) to not clog UI and make it more confusing.
My reasoning for that: 99% people wont ever use anything other than true or 2:1 isometric.
Conclusion: its not a hill i want to die on. Make it 3 options if you will :slight_smile:

You should make a feature request for that feature, otherwise it will be lost in this thread.

@Deif_Lou i found a missing place for the widget : in the popup. :wink:

1 Like

Yes, @wojtryb already told me, but we didn’t get to any conclusion about if the widget is suitable for that place or it would break the layout/design. What does people think?

1 Like

oh sorry, i search for ‘popup’ in the thread but didn’t find it. if feasible, i think using it everywhere is the best solution.

1 Like

Yes, I still would like to have this widget there, but I understand the concern. More people opinions would be appreciated here.

In fact I would also love to be able to add this widget to the topbar - either instead of a slider among opacity, flow, pattern scale - or as a separate thing available in topbar configuration. @RamonM had exact same idea, so I believe it may be more common need.
How possible would be to have it there? And what others think?

1 Like