Page MenuHome

Cursors Design
Confirmed, NormalPublicDESIGN

Description

'Cursor' in this context refers to on-screen mouse cursors, such as these:

Issues

In Blender, our cursors are quite weak.

The biggest issues are:

  • Many tools lack cursors, meaning that it's not clear what will happen when you click
    • With the toolbar hidden, for most tools there's no indication inside the viewport of what will happen when you click
  • It's not clear why cursors change (based on tool, mode, something else?)

The purpose of the cursor

The purpose of the on-screen cursor is twofold

  • Communication: Give the user an indication of what will happen when they click. (Knife, eyedropper etc)
  • Precision: Help the user accurately aim at items then wish to select, paint on, or otherwise alter

In Blender, we can make use of much richer cursor support. Cursors can communicate so much more than what they do currently. For example:

  • The active tool
  • Certain tool settings (add/remove to selection, for eg)
  • Navigation (As you hold down keyboard keys, the cursor can update to reflect the navigation interaction)

Cursor rules

To develop a consistent system of tool cursors, we can lay down a series of rules for cursors to follow:

  • For tools that don't allow you to select, but do something different, always use a bespoke cursor (See Knife, Eyedropper etc)

Companion cursors

For many tools, the simplest solution for a cursor can be to simply append the tool icon to a smaller pointer, like so:

Gizmos

Hovering over any gizmoTransform cursor

Navigation

When simply manipulating the view, we could add special cursors, rather than just keeping the arrow:

ZoomMagnifier
PanHand
OrbitEye

Tools

The use of the companion cursor is for tools which override selection. By default, that means tools like Measure, Cursor, Add (Cube, Sphere etc), Loop Cut, Knife and so on. Tools like Bevel, Extrude Region, Inset etc use a gizmo, so for those we keep the default cursor, *except* if the tool setting is set to Active Tool, in which case those tools *do* override selection.

Draw Toolbrush crosshair
Fill ToolPaint Bucket
Blur ToolSmudge finger
Cursor Tool3D Cursor crosshair
EyedropperEyedropper

Additional overlays

There are some cases where the cursors can contain even more information than just the active tool. Here are some examples:

  • Box select extend or subtract:

We can make it so the crosshair gets a plus or a minus depending on which tool setting is chosen.

Lasso Select:

Related tasks

D5197: UI WIP - Changes to Cursors

Event Timeline

William Reynish (billreynish) renamed this task from Cursors (parent task) to Cursors Design.Sep 3 2019, 1:43 PM
William Reynish (billreynish) updated the task description. (Show Details)
This comment was removed by Bolos (Bolos).

What is your though on "cursor overlays" or accessory indicator icons?
I'm not much fan of "pictorial cursors", I find them distracting, they get in the way, and it is not always obvious where the "hotspot" is.
I'd much rather always have a more generic neutral looking cursor like an arrow or crosshair (can still adapt or change according to active tool), with an "overlay" or an icon by its side that indicates what the tool will do.
GIMP has a preference for this, where you always use a crosshair for brushes and the brush icon is optionally presented by its side.

In Blender this could be used to our advantage too, where various simultaneous overlays could indicate cumulative active settings, like having Move Tool active, with Proportional Editing turned on, or having Box Select with in Add to Selection mode.

@William Reynish (billreynish) Trying to make sense of all this in a more consistent and systematized way. This is my first pass attempt at trying to establish some rules and get a grip of what work would be needed.
What do you think of this, is it helpful?

  1. In general we have a base cursor that should always reflect what clicking does: Often a normal arrow cursor, or a crosshair (where precision is desirable) for selection modes. A bespoke cursor where the default action is not selection.
  2. A companion cursor that would generally reflect what dragging action does. Most often a pictorial representation of a the tool, ideally similar to the corresponding toolbar icon, can change according to tool settings.
  3. A mode companion: Something generally simpler, maybe non pictorial or text based like selection modes (add, subtract, intersect, invert)

When possible companion icons should be outline only or lineart only so they dont occlude the subject, and get in the way of users as little as possible.

General

Screenspace

ActionAllows SelectionBase CursorCompanion cursorsMode Cursors
Split RegionNoBespokeNoneNone
Join Region UpNoArrow UpNoneNone
Join Region DownNoArrow DownNoneNone
Join Region LeftNoArrow LeftNoneNone
Join Region RightNoArrow RightNoneNone
Resize VerticalNoResize VerticalNoneNone
Resize HorizontalNoResize HorizontalNoneNone
Move (hover gizmo)NoMove four-way arrowNoneNone
EyedropperYesSelection CrosshairEyedropperNone
Text SelectionYesCaretNoneNone

Navigation

ActionAllows SelectionBase CursorCompanion cursorsMode Cursors
Zoom ViewNoMagnifying GlassNoneNone
Pan ViewNoFour way Arrow or Hand ?NoneNone
Pan ViewNoFour way Arrow, Hand?NoneNone
Rotate ViewNoOrbit/Gimbal SphereNoneNone

3D View

Object Mode

ActionAllows SelectionBase CursorCompanion cursorsMode Cursors
Select TweakYesArrow CursorMove four-way arrow+,-, Invert, Intersect
Select BoxYesArrow CursorStipple Rectangle (default action, is it necessary/visual noise?)+,-, Invert, Intersect
Select CircleYes, precisionSelection Crosshair + Diameter CircleCircle+,-, Invert, Intersect
Select LassoYes, drawSelection CrosshairLasso+,-, Invert, Intersect
CursorNoNoneNone
MoveYesArrow cursorMove four-way arrow+,-, Invert, Intersect
RotateYesArrow cursorRotate+,-, Invert, Intersect
ScaleYesArrow cursorScale+,-, Invert, Intersect
Scale CageYesArrow cursorScale+,-, Invert, Intersect
Move, Rotate, ScaleYesArrow cursorBespoke+,-, Invert, Intersect
AnnotateNoDraw CrosshairPencilAnnotate, Line, Polygon, Eraser
MeasureNoDraw CrosshairRuler/TapeNone
Add ObjectNo, precisionDraw CrosshairCube, Cone, Cylinder, UV Sphere, IcosphereNone

Edit Mode

ActionAllows SelectionBase CursorCompanion cursorsMode Cursors
Extrude RegionYes, PrecisionSelection CrosshairDrag Action: Extrude, Tweak, Box Select, Circle Select, LassoRegion, Along Normals, Individual, Manifold
Extrude CursorNo, PrecisionDraw CrosshairBespokeNone
InsetYes, PrecisionArrow CursorDrag Action: Inset , Tweak, Box Select, Circle Select, LassoNone
BevelYes, PrecisionArrow CursorDrag Action: Bevel, Tweak, Box Select, Circle Select, LassoNone
LoopNo, PrecisionDraw CrosshairLoopcut, Loopcut OffsetNone
Offset Edge LoopNo, PrecisionResize HorizontalLoopcut, Loopcut OffsetNone
KnifeNo, PrecisionDraw CrosshairKnifeNone
BisectNo, PrecisionDraw CrosshairBisectNone
PolyYes, PrecisionSelection CrosshairPolyNone
SpinYes, PrecisionSelection CrosshairSpinNone
Smooth, To SphereYesSelection CrosshairDrag Action: Smooth, Tweak, Box Select, Circle Select, LassoNone
Edge SlideYesArrow CursorDrag Action: Slide, Tweak, Box Select, Circle Select, LassoNone
Vertex SlideYes, precisionSelection CrosshairDrag Action: Slide, Tweak, Box Select, Circle Select, LassoNone
Shrink FlattenYesArrow CursorDrag Action: Shrink Flatten, Tweak, Box Select, Circle Select, LassoNone
ShearYesArrow CursorDrag Action: Shear, Tweak, Box Select, Circle Select, LassoNone
Rip Region/Rip EdgeYes, PrecisionSelection CrosshairDrag Action: Rip, Tweak, Box Select, Circle Select, LassoNone

Paint Mode

ActionAllows SelectionBase CursorCompanion cursorsMode Cursors
DrawNo, PrecisionDraw Crosshair + Diameter CircleDrawStrength ?
BlurNo, PrecisionDraw Crosshair + Diameter CircleBlurStrength ?
AverageNo, PrecisionDraw Crosshair + Diameter CircleAverageStrength ?
SmearNo, PrecisionDraw Crosshair + Diameter CircleSmearStrength ?
SampleNo, PrecisionSelection CrosshairEyedropperNone
GradientNo, PrecisionDraw CrosshairGradientLinear, Circular
CloneNo, PrecisionDraw Crosshair + Diameter CircleCloneStrength ?
FillNo, PrecisionDraw CrosshairFillStrength ?
MaskNo, PrecisionDraw Crosshair + Diameter CircleMaskStrength ?

Sculpt

ActionAllows SelectionBase CursorCompanion cursorsMode Cursors
BrushNo, PrecisionDraw Crosshair + Diameter CircleBrushDirection, Strength ?
Box Mask, Box HideYesDraw CrosshairMask, HideNone
Mesh Filter/Cloth FilterNoMove four-way arrowMask, HideNone

Node

ActionAllows SelectionBase CursorCompanion cursorsMode Cursors
Cut LinksNo, PrecisionDraw CrosshairScissors

UVs

ActionAllows SelectionBase CursorCompanion cursorsMode Cursors
GrabNoDraw Crosshair + Diameter CircleGrabNone
RelaxNoDraw Crosshair + Diameter CircleRelaxNone
PinchNoDraw Crosshair + Diameter CirclePinchNone

If this is helpful I could later improve with some in-table images.

Could we propose a "cache sim" running cursor? or any other cursor that needs "time" for that matter? Currently it only displays numbers with a black box.

This design seems like a good one to try and evaluate. I do see some trade-offs (visual noise & companions obscuring the view), it needs testing to see if they are troublesome in practice.
There's the question of what's technically possible on different OSes or display-servers. @Harley Acheson (harley) did experiments on that.

(An eye icon for view orbiting seems a bit weird. Not what this task is about though.)


@Duarte Farrajota Ramos (duarteframos) didn't go over your proposal in all detail, but seems like you're proposing something pretty similar to what's in the description now?

@David (activemotionpictures) I don't think the cursor should be used to indicate background processes. That's what progress bars are for (which we may improve). If there's a blocking process, the OS changes the cursor accordingly.

@Duarte Farrajota Ramos (duarteframos) didn't go over your proposal in all detail, but seems like you're proposing something pretty similar to what's in the description now?

Yes, both seem quite close now.

I'd eventually be willing to help with this, if you like. I designed a few of the new cursors introduced by Harley Acheson.
My table was more of an attempt at a systematic approach to answering a few practical questions:

1 - Which of these are actually feasible/dedirable?
2 - Can companion cursors be an actual separate icon overlayed over the main cursor at draw time, or do they have to be designed into a completely different cursor altogether? (Basically can we draw companions or are they just separate cursor designs?)
3 - Are mode icons also separate overlays composited over main cursors, or slightly different separate cursor designs? (Basically can we draw cursor overlays?)
4 - What actual bitmap sizes will be required, and will we need to cater for different DPIs?

I'm sure most of these are only answerable once someone actually starts implementing them.

The mesh, clothing, and color filters of the sculpture module have the diagonal cursor arrow.
I believe that being the positive effect of the filter, when clicking and moving to the right and the negative to the left, a double horizontal arrow would be the correct cursor icon to use. The side could even be accentuated when the filter is running, in other words, illuminate the right arrow when clicking and moving to the right, and vice versa for the left.