Commit Graph

5306 Commits

Author SHA1 Message Date
Dalai Felinto
60cc73afe6 Cleanup: UI: Icons: Sort the icons alphabetically between their categories
No functional changes.

The TOGGLES and INPUT were left untouched since they are order-dependent.

Ref: !127197

Pull Request: https://projects.blender.org/blender/blender/pulls/127197
2024-09-06 12:37:56 +02:00
Dalai Felinto
d563926d73 Cleanup: UI: Shuffle icons and group them in categories
No functional changes.

The comments in the file are used as categories by some of our ICON
reading tools.

This also groups the TOGGLES icons together, with comments about their
order. This only includes the icons actively used as toggles at the
moment.

Note that ICON_NONE has always to be the first one in this file since
some parts of the code (e.g., the code to turn RECORD_ON into colored,
and the code for the popover chevron) have no-icon hardcoded as 0.

Ref: !127197
2024-09-06 12:37:55 +02:00
Jacques Lucke
871b25b219 Geometry: generalize attribute filters beyond just for anonymous attributes
This introduces the concept of an #AttributeFilter. It's used to tell a geometry
algorithm which attributes it should process/propagate and which can be ignored.

We already had something similar before named
`AnonymousAttributePropagationInfo`. However, as the name implies, this was
specific to anonymous attributes. This had some downsides:
* A lot of code had to be aware of the concept of anonymous attributes even if
  it did nothing special with anonymous attributes.
* For non-anonymous attributes we often had a separate `Set<std::string> skip`
  parameter. It's not nice to have to pass two kinds of filters around and to
  have to construct a `Set<std::string>` in many cases.

`AttributeFilter` solves both of these downsides.

Technically, `AttributeFilter` could also just be a `FunctionRef<bool(StringRef
attribute_name)>`, but that also has some issues:
* The `bool` return value is often ambiguous, i.e. it's not clear if it means
  that the attribute should be processed or not. Using an enum works better.
* Passing function refs around and combining them works, but can very easily
  lead to dangling references.
* The default value of a `FunctionRef` is "empty", i.e. it can't be called. It's
  generally more nice to not have a special case for the default value. Now the
  default `AttributeFilter` propagates all attributes without any extra handling
  on the call-site.

Pull Request: https://projects.blender.org/blender/blender/pulls/127155
2024-09-05 11:33:35 +02:00
Harley Acheson
382244c258 UI: Docking Drag Mouse Cursor
This shows the docking feedback very similar to how tooltips are shown
elsewhere. It describes the operation and also includes the icon and
name of the moving/changing area.

Pull Request: https://projects.blender.org/blender/blender/pulls/126898
2024-09-04 22:43:57 +02:00
Campbell Barton
ad67ad63fe Cleanup: spelling in comments 2024-09-04 19:34:15 +10:00
Sybren A. Stüvel
4d4ad34f4c Anim: Action Slot icon
Add an icon for Action Slots. Design task: #123372

Pull Request: https://projects.blender.org/blender/blender/pulls/127102
2024-09-03 18:33:36 +02:00
Nathan Vegdahl
56e5b61ad0 Fix: layered-action channel groups not shown in graph editor
The issue was that we were misinterpreting the `ANIMFILTER_FCURVESONLY`
flag in the animation filtering code. We were taking it to mean that
literally only actual fcurve channels should be included, but in fact
it should include the channel groups for those fcurve channels as well.

The graph editor code (but not the dopesheet code) depended on this
interpretation to function correctly, and doesn't display the groups
at all without it.

This fixes the issue by not excluding channel groups even when that
flag is set. This also updates the documentation of that flag to
clarify its actual semantics.

Pull Request: https://projects.blender.org/blender/blender/pulls/127108
2024-09-03 15:48:40 +02:00
Julian Eisel
a8c08e4a8c Refactor: Sculpt/Paint: Rename brush "tool" to "brush type"
The term "tool" is historic from before the actual tool system got
introduced. Since then the term was already a bit confusing, because it
wasn't directly related to the tool system, but there was still some
relationship between the two. Now brushes and their types are decoupled
much more from the tool system, with a single "Brush" tool supporting
all kinds of brushes (draw, grab, cloth, smooth, ...).

For a more clear terminology, use "brush type" instead of "tool".

For #126032 we need to write the brush type to the asset metadata (done
in !124618), so we can filter brushes based on the type (so the grease
pencil eraser tool only shows eraser brushes, for example). I'd like to
use future proof names for that to avoid versioning of asset metadata in
future, so I'd rather do the full naming change now.

RNA properties (thus BPY names) are not changed for compatibility
reasons. Can be done in 5.0, see blender/blender#124201.

Pull Request: https://projects.blender.org/blender/blender/pulls/126796
2024-09-03 15:20:34 +02:00
Campbell Barton
d19c13eb82 Cleanup: spelling & punctuation in comments 2024-09-03 12:59:37 +10:00
Sybren A. Stüvel
094c8b045d Refactor: Anim, use eEditKeyframes_Select instead of short/int
Use `eEditKeyframes_Select` where sensible, instead of a generic `short`
or `int`.

No functional changes.
2024-09-02 14:06:42 +02:00
Sybren A. Stüvel
a946244e7e Anim: F-Curve icons, return std::nullopt when RNA path cannot be resolved
Use an `std::optional<int>` to return the icon from
`getname_anim_fcurve()`.

This function is used both to get the name and to get the icon of
whatever the F-Curve is animating. Sometimes the animated struct doesn't
have an icon though. In some cases we need to know whether it could
resolve the RNA path correctly or not, and checking for 'no icon' was
not enough because that may be a valid return value.

The returned icon is now wrapped in an `std::optional<int>`, and a
`std::nullopt` is returned whenever the icon cannot be determined.

No functional changes, except in the two places where the icon is
actually used. In case of error there is now always a fallback to the
struct icon of the animated ID (previously this was only a fallback when
the RNA path was there but could not be resolved; now it's also used
when the RNA path is empty, for example).

Pull Request: https://projects.blender.org/blender/blender/pulls/125666
2024-09-02 11:20:55 +02:00
Pratik Borhade
de487a6712 Fix #126872: Cannot assign custom preview to node asset
Caused by 03ae57dd8b
Custom preview operator uses `lib_id_preview_editing_poll`. To enable
this operator in UI, move the new condition to `lib_id_generate_preview_poll`
poll function so adding custom preview to unsupported type would
still be possible.

Co-authored-by: Julian Eisel

Pull Request: https://projects.blender.org/blender/blender/pulls/126874
2024-08-31 13:14:24 +02:00
Harley Acheson
fb651c1613 UI: Show Splash Version Text in White
The version text shown over the splash screen image needs to always be
white regardless of the theme. With "Blender Light" this text is black
and almost impossible to read. This PR adds the ability to set a
specific color for labels without icons and does so for the splash
screen.

Pull Request: https://projects.blender.org/blender/blender/pulls/126340
2024-08-30 20:52:17 +02:00
Campbell Barton
5cb29528e6 Cleanup: spelling in comments 2024-08-26 11:50:15 +10:00
Christoph Lendenfeld
51fd355c01 Anim: UI template for Action selectors
This PR is just taken over from @dr.sybren with
minor comments addressed.

Original PR: #125493

Co-authored-by: Sybren A. Stüvel <sybren@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/126561
2024-08-23 11:07:16 +02:00
Falk David
f1972deba1 View3D: Allow 3D cursor to snap to grease pencil geometry
The `Surface Project` option for setting the 3d cursor location ignored
grease pencil geometry. Since grease pencil is now it's own object, separate
from annotations, it makes more sense to now consider grease pencil objects.

This changes the `V3D_DEPTH_NO_OVERLAYS` to also render grease pencil.
If grease pencil shouldn't be considered, the `V3D_DEPTH_NO_GPENCIL`
flag should be used instead.

Note that annotations are independent of the `eV3DDepthOverrideMode`.
It seems like they are always rendered according to
`drw_draw_show_annotation()`.
The description for the options in `eV3DDepthOverrideMode` is
updated to reflect that.

Resolves #122700.

Pull Request: https://projects.blender.org/blender/blender/pulls/122705
2024-08-23 10:52:19 +02:00
Sean Kim
c394aa9cea Cleanup: Add r_ prefix for ED_view3d_global_to_vector
Pull Request: https://projects.blender.org/blender/blender/pulls/126666
2024-08-22 23:23:50 +02:00
Harley Acheson
810687ad5b UI: Improvement to Screen Area Options Menu Invoke Area Join
Right-clicking on an edge between editors, the "Screen Area Options"
menu has a number of items including for Area Join.  When docking is
NOT enabled this gives the prior behavior of interactive join where
you can change direction and requires Enter to confirm.  If docking
is enabled then there are instead instant join options but now with
a specific icon for each direction.

Pull Request: https://projects.blender.org/blender/blender/pulls/126616
2024-08-22 20:25:51 +02:00
Nathan Vegdahl
df02e7a5e5 Anim: add channel groups to layered actions
This PR adds channel groups (also known as fcurve groups or action groups) to
layered actions.  For layered actions, these groups belong to the `ChannelBag`s
and can vary by bag.

From a user perspective, the goal is for these to function just like channel
groups from legacy actions.  However, internally they are implemented a little
differently: legacy actions store both channel groups and fcurves in a listbase,
and groups indicate what fcurves are in them with a listbase that points
directly into the larger fcurve listbase.  Layered actions, on the other hand,
store both fcurves and channel groups in an array, and groups indicate what
fcurves are in them by indexing into the fcurve array.

Despite taking this different approach, we still reuse the `bActionGroup` struct
for the new channel groups, just adding the necessary fields for index-based
fcurve membership as described above.

This PR does not implement all of the functionality needed to reach feature
parity with legacy action channel groups, but implements the main core and gets
them basically working.

It's easier to list the things that *haven't* been implemented yet:

- Operators for letting the user manually create/remove/move channel groups.
- Keyframe selection in the action/dopesheet editor on channel group rows
  themselves are not yet working correctly.
- Handling channel groups in legacy/layered action conversion operators.
- Making the legacy `action.groups` property work on single-layer-single-strip
  layered actions.

Those are left for future PRs.  Other than that, in theory everything should be
working now.

Pull Request: https://projects.blender.org/blender/blender/pulls/125774
2024-08-22 17:13:12 +02:00
Lukas Tönne
2e9fc8ef2d GPv3: Segment selection support
Support segment mode in Grease Pencil v3 selection operators.
This is a continuation of #109221.

Segment selection works in multiple stages:
1. When enabled, the 2D evaluated lines for all visible curves are
entered into a BVH tree. This tree is used to find intersections later
on. All the visible drawings are in the tree, an `OffsetIndices` array
is used to record ranges of BVH elements for each drawing.
2. Primary selection functions get alternative versions that produce an
`IndexMask` instead of writing directly to selection attributes. This
makes it possible to detect select actions on points that are already
selected. Using a delta of selection attributes for this is not enough
to detect such user actions (and inefficient).
3. In segment mode the `IndexMask` is extended to fully cover segment
points (or exclude them when deselecting respectively). This first
performs and intersection test using the BVH tree, then finds all point
range with selected elements.
4. Finally the extended index mask is applied to selection attributes as
usual.

Pull Request: https://projects.blender.org/blender/blender/pulls/126027
2024-08-21 13:35:26 +02:00
Campbell Barton
ddcf5bac44 Revert "Fix image sequence detection to account for the number of digits"
This reverts commit 5c2d412a29.
because it caused a regression.

Resolve #124832.
2024-08-21 12:40:14 +10:00
Amelie Fondevilla
625ef79f57 GPv3: Soft mode for the Eraser tool
Implementation of the soft mode of the eraser tool for GPv3.
In this mode, the eraser decreases the opacity of the points it hits.
If the opacity of a point falls below a threshold, then the point
is removed from the curves.

Pull Request: https://projects.blender.org/blender/blender/pulls/110310
2024-08-20 17:24:03 +02:00
Lukas Tönne
ec82ccb4b4 Fix #126271: Prevent comparing a curve index mask to a point span
The `has_anything_selected` function has a variant that takes just an
index mask and compares that to all selection attributes it can find,
regardless of which domain they are on. In this case the bezier handle
selection attributes were stored on the Curve domain while the selection
domain has already been switched to Point.

Now the `has_anything_selected` function always expects a domain so it
can check for attributes on that same domain.

Bezier handle selection does not make sense on the point domain, but the
way curve selection is written makes it difficult to prevent the
creation of the attribute on Curve domain. It's also not generally
prohibited (user can still create that attribute) so selection code
should handle this case robustly.

Pull Request: https://projects.blender.org/blender/blender/pulls/126543
2024-08-20 12:00:37 +02:00
casey bianco-davis
29be8ff359 GPv3: Only select visible bezier handles for Circle, Lasso and Box selection tools.
This makes so that only visible bézier handles can be selected by the
following tools: `Circle`, `Lasso` and `Box` selection.

Pull Request: https://projects.blender.org/blender/blender/pulls/125549
2024-08-20 11:00:08 +02:00
Harley Acheson
7c68ac258f UI: File Browser Offline and Alias State Icon Position
#125625 moved the File Browser Thumbnail type icon location from the
bottom-left of the thumbnail extent to the bottom-left of the item
bounds. This does the same for the indication of offline and for
shortcut. This adds a new icon for shortcut instead of current use of
ICON_LOOP_FORWARDS, which doesn't look right. The new icon looks like
the Mac Alias arrow, but this also works fine for other platforms.

Pull Request: https://projects.blender.org/blender/blender/pulls/126469
2024-08-18 22:11:53 +02:00
Harley Acheson
aa78d43a05 UI: Multicolor Autokeying Indicator
Show the autokeying indicator (record button) on the Timeline header in
red when enabled. With a white outline on dark theme, or with a black
outline on light theme. The red color is user changeable.

Pull Request: https://projects.blender.org/blender/blender/pulls/126344
2024-08-16 23:16:40 +02:00
Sean Kim
e48f98efb0 GPv3: Add ReprojectMode enum and DrawingPlacement constructor
Needed to implement GPv3 version of "Bake Object Transform to Grease
Pencil"

Doesn't implement the `Surface` option, as that is not used in the
previously mentioned operator.

Pull Request: https://projects.blender.org/blender/blender/pulls/126255
2024-08-16 01:32:13 +02:00
Campbell Barton
b5e0b59736 Cleanup: remove space around identifiers in C-style comments 2024-08-15 20:46:00 +10:00
Sean Kim
f0c2d4eeed Cleanup: Add int8_t specifier to ED_grease_pencil.hh enum classes
Since these enums won't have more than 255 values, add the `int8_t` specifier.

Pull Request: https://projects.blender.org/blender/blender/pulls/126326
2024-08-15 10:15:06 +02:00
Harley Acheson
99a4bc325e UI: Allow Theme Coloring for Color SVG Extraction
For the times we need to obtain the bitmap of an SVG icon, send these
through the new theme coloring callback if they are multi-color. This
removes some code duplication by adding a new function that gets an
imBuf from SVG Icon. This allows, for "About" logo, Dialog icons, and
file system icons the optional ability to use a single SVG source file
that works as both monochrome (themed by text color) or multicolor with
internal parts themed.

Pull Request: https://projects.blender.org/blender/blender/pulls/126215
2024-08-13 03:31:43 +02:00
Lukas Stockner
d8f550875b Fix #124038: Performance issue with color sampling in 3D Viewport
The issue here is that copying the GPU viewport back to the CPU is an expensive
operation, so doing it for every frame when dragging the eyedropper is not ideal.

Instead, copy it once at the start and keep reading from it until the user
releases the eyedropper.

Pull Request: https://projects.blender.org/blender/blender/pulls/126072
2024-08-12 14:52:28 +02:00
Hans Goudey
d99e6f82da Cleanup: Move some sculpt mode functions to C++ namespace 2024-08-08 10:11:52 -04:00
YimingWu
3f5d380365 Fix #125897: Use cyclic when handling curves selection
Curves selection didn't take cyclic into account, so when using box/
circle/lasso selections they won't trigger if only the "closing" segment
on a cyclic curve is touched. Now the code properly handles those
situations.

Pull Request: https://projects.blender.org/blender/blender/pulls/125900
2024-08-08 14:12:09 +02:00
Christoph Lendenfeld
07f88ddd67 Fix: Dope Sheet drawing doesn't draw connecting line outside of viewport
The issue was caused by blender/blender@f3b393a74a
Before that commit, the keylist would be built including 1 keyframe
outside the range on each side (if there was one).
After that those would be ignored, leading to the following issue

Fixes #125861

The fix is to ensure the keylist is built with 1 key outside the given range.

Pull Request: https://projects.blender.org/blender/blender/pulls/125807
2024-08-06 12:26:33 +02:00
Falk David
310c4cdc3c Fix: GPv3: DrawingPlacement copying and moving
The `DrawingPlacement` class did not define the copy
and move constructors/assignment operators even
though they were used in a couple of places.

Pull Request: https://projects.blender.org/blender/blender/pulls/125898
2024-08-05 14:44:23 +02:00
Harley Acheson
5fb140a36e UI: Status Bar Using SVG Icons
Refactor of how "event icons" are created, using custom SVG icons for
key outlines and some complex keys. Allows multiple key widths so that
"Ctrl", "Insert", etc can be readable. Strings are automatically sized
rather than hardcoded. Also allows these strings to be translated.
Supports the UI icon alpha preference.  Also supports local aspect in
case we ever want to allow 2D zooming there.

Pull Request: https://projects.blender.org/blender/blender/pulls/125591
2024-08-05 02:42:26 +02:00
Harley Acheson
a57c3be05e UI: Add SVG Icons for Status Bar Event Use
This adds 26 SVG icons (13 unfilled/filled pairs) for use on the Status
Bar for keymap indication. No other functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/125868
2024-08-04 19:19:54 +02:00
Sergey Sharybin
813c18e39c Fix: Unable to duplicate mask keyframes
Pull Request: https://projects.blender.org/blender/blender/pulls/125809
2024-08-02 12:58:28 +02:00
casey bianco-davis
c8404eb0c8 Fix: GPv3: Unable to select bezier handle with unselected control point
If one handle was selected and the control point was not,
the other point could not be selected even though it was visible.

This fixes the issue.

Pull Request: https://projects.blender.org/blender/blender/pulls/125545
2024-08-01 12:16:08 +02:00
Harley Acheson
989fcc2c4f UI: Mouse Event Icon Alignment
We have a number of event icons, used on the Status Bar, to indicate
mouse actions. It is currently difficult to align these nicely because
they vary in width and design. This PR makes them all the same design
width and aligned to the left edge. This removes a need to add negative
spacing before any of them and only requires space after some of them.
This also adds a new one to indicate "double left click" as my current
use of this looks a bit sus. This also adds a "mouse wheel scroll"

Pull Request: https://projects.blender.org/blender/blender/pulls/125731
2024-07-31 20:57:19 +02:00
Sybren A. Stüvel
69e8e4c023 Refactor: Anim, rename getname_anim_fcurve_bound to ..._for_slot
Rename `getname_anim_fcurve_bound` to `getname_anim_fcurve_for_slot`.

No functional changes.
2024-07-30 15:26:12 +02:00
Julian Eisel
7fcd4e2429 Fix #123327: Crash when operator with properties opens render window
Essentially, the issue is that the Adjust Last Operation popup is
created in the new image editor window, before region polling was
executed for the new window. This region polling must be done first
because it can affect which regions are visible, and the
`ARegionType.on_poll_success()` callback may do additional set up.

Now make sure that region polling is always executed when a screen is
prepared for display, as part of the screen "refresh" code.

Note that the region polling is used for the asset shelf regions, which
are supported in the image editor since c60a1006e5.

Pull Request: https://projects.blender.org/blender/blender/pulls/123385
2024-07-30 11:17:12 +02:00
Leon Schittek
d30d8b4bfa UI: Add padding to items in ui lists and tree views
Add a utility function to add horizontal padding to the left and right
of items in UI lists and tree views to make them more consistent with
other buttons like menu entries.

Pull Request: https://projects.blender.org/blender/blender/pulls/125498
2024-07-29 23:52:38 +02:00
Jacques Lucke
071b18a3cc Spreadsheet: support navigating instance trees
Previously, it was not possible to see detailed information about instances in
the spreadsheet. Only the attributes on the top level instances were shown. Now,
all nested instances can be inspected too.

Combined with #114910 this will make inspecting more complex geometry with the
spreadsheet much more feasible. It's also an important part of integrating
grease pencil into geometry nodes because it makes it more obvious how layers
are converted to curve instances.

The data-selection is split into two separate tree views now. One that selects
the geometry from the instance tree, and one that's used to select the geometry
component and domain within that geometry. We found that this works better than
combining both tree views into one (we tried that in #124186).

Pull Request: https://projects.blender.org/blender/blender/pulls/125293
2024-07-29 20:42:08 +02:00
Jacques Lucke
ae129da4f7 UI: new Geometry Set icon
This icon can be used when refering to a "geometry set" which can contain
potentially multiple geometries of different types (such as mesh, volume, etc.).

It was designed by Simon Thommes as part of #125293.
2024-07-29 20:37:21 +02:00
Falk David
0f42f277b7 Grease Pencil: Remove legacy modifiers
This removes the legacy Grease Pencil modifiers from the code.
These should have already been inaccessible from the UI and hidden from
the user. The modifiers have been reimplemented for the new GPv3
data structure.

On top of the modifier code, some other related things have been
removed as well:
 * Operators related to the legacy modifiers.
 * Keymaps for the legacy modifier operators.
 * Some bits of code that used modifier functions.

Some code has to be kept, because it is still used:
 * The core line art code, which is used by the new line art modifier. It's
    moved to `modifiers/lineart`.
 * The DNA structs for the legacy modifiers. They are still needed for
    conversion.
 * A few kernel functions for the modifiers are kept (also for conversion).

Co-authored-by: Lukas Tönne <lukas@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/125102
2024-07-29 10:37:29 +02:00
Campbell Barton
004c247670 Cleanup: different declaration names, use r_ prefix for return args 2024-07-29 13:01:10 +10:00
Campbell Barton
e974ee05dc Cleanup: clarify ED_markers_make_cfra_list only selected argument
The argument read as if it might be a flag (callers passed in SELECT),
but it was in fact used as a boolean.
2024-07-27 13:32:52 +10:00
Campbell Barton
111a40239a Cleanup: match argument names for function & declarations
Match function and declaration names, picking names based on
consistency with related code & clarity.

Also changes for old conventions, missed in previous cleanups:

- name -> filepath
- tname -> newname
- maxlen -> maxncpy
2024-07-27 13:32:51 +10:00
Falk David
6fac4707d5 Curves: Add Python API to remove and resize curves
This adds two new python functions:
* `curves.remove_curves(indices=None)`
* `curves.resize_curves(sizes, indices=None)`

By default, `remove_curves` will remove all curves. If `indices`
are provided, only the curves with the given indices are removed.
The indices have to be in ascending order and mustn't repeat.

The `resize_curves`function  will change the number of points
for each curve. If no indices are provided, there must be as
many elements in `sizes` as the number of curves there is.
Otherwise, there must be one element in `sizes` per element
in `indices`. The `sizes` are the new size for a given curve.
If the new size for a curve is smaller, then the curve is
trimmed from the end. If the new size for a curve is greater,
then the end values will be default initialized.

Pull Request: https://projects.blender.org/blender/blender/pulls/125502
2024-07-26 22:51:27 +02:00