Introduces a `uiTextEditing` struct to hold most data for handling text editing,
with improved naming. This should help untangling this code a bit, reduce
perceived complexity, and make the relation between data and the button state
more clear.
Generally I'd like to try to minimize use of `uiHandleButtonData`, to reduce
complexity while increasing flexibility. For example it would be good if text
editing code could be independent of the active button, so a text button can
receive input while other UI elements remain interactive (e.g. for search
popups, which have their own ad-hoc layout, event handling and drawing code).
This is a rather conservative initial refactor, I might follow up with further
(more risky) changes in separate PRs. But this seems like enough of an
improvement to get in first.
Pull Request: https://projects.blender.org/blender/blender/pulls/122332
This implements the angle and angle factor draw tool settings in the `Advanced` panel.
The behavior is changed slightly to GPv2. Instead of calculating the radius of the point
based on an interpolated value between the adjusted radius and the previous point,
in GPv3 the radius is adjusted by a "smoothed angle factor". This factor is the angle factor
based on the previous point, but smoothed over time (by a constant amount).
Pull Request: https://projects.blender.org/blender/blender/pulls/122488
The fill tool generated strokes for exterior as well as interior
boundaries. This is undesirable because fill strokes can't actually have
holes and the overlapping strokes are not very useful.
This reconstructs GPv2 behavior where only the outer-most starting
points for boundaries are used, ignoring interior boundaries.
Pull Request: https://projects.blender.org/blender/blender/pulls/122498
The setting adds the "Custom Shape Wire Width"
option to the "Viewport Display/Custom Shape" section of a pose bone.
As the setting says, this controls how thick the wire is drawn in the viewport.
This is done by adding a geometry shader that makes two triangles out of a line.
The Anti-Aliasing is controlled by the setting
Viewport->Quality->Smooth Wires->Overlay in the user preferences.
## Artifacts
When increasing the line width, the lines start to separate at their vertices.
This comes from extruding each edge along the normal of its direction.
This could be solved by adding round caps in a later PR.
Pull Request: https://projects.blender.org/blender/blender/pulls/120176
This patch refactors the GPU context handing in the GPU compositor.
First, GPU context handling in the GPU compositor constructor was
removed, that's because the constructor does nothing GPU related.
Second, the destructor and the execute methods were unified to use the
global DST context for main thread execution and a dedicated system GPU
context for threaded execution. The former is the case for blocking
rendering as well as background mode, so the blocking due to the global
DST is not an issue, but it makes the code more robust to implementation
errors like #122070.
Pull Request: https://projects.blender.org/blender/blender/pulls/122389
This patch makes it such that the GPU context required for the
compositor is only created when the GPU compositor is in use. This
should fix#121761 for the CPU compositor, but generally also make the
CPU compositor more robust to such errors in the future, and a tiny bit
faster since context creation is skipped.
Pull Request: https://projects.blender.org/blender/blender/pulls/122420
To be tackled by future commits:
* Setting the property when checking for updates.
* Read this property for the splashscreen information (and in the future the status bar).
Ref: !122487
During the conversion of GPv3 to GPv2, we computed the
time difference between the points. So we we're keeping track
of the time a point was created relative to the previous point.
There doesn't seem to be a good reason to do this.
It can also go very wrong in case the times of two points are
very close to one another (which can result in catastrophic
cancellation).
With this change, the time delta values are now the time
a point was created, relative to the first point.
Pull Request: https://projects.blender.org/blender/blender/pulls/122367
Split up the "(none/legacy)" enum item for the `AnimData.action_binding`
property.
Depending on the Action in `AnimData.action`, a different item will be
returned. With a legacy Action assigned, it will show "Legacy Action"
with an explanation in the tooltip. Layered actions will now just show
"None".
Pull Request: https://projects.blender.org/blender/blender/pulls/122485
User feedback has been that the pinned modifier looks broken because
there is no feedback in the UI showing that it's pinned (related to the
recently reported #121620). It's also inconvenient to disable the pinning
if it's required to move the modifier up (before another modifier that
controls normals for example). Now the "Pin" icon is displayed here,
and clicking on it turns off the pinning.
Also, change the property name from "Stick to Last" to "Pin to Last".
"Stick" is a weird word in the UI, it sounds uncommon and strangely
physical. "Pin" is more associated with this concept.
---

Pull Request: https://projects.blender.org/blender/blender/pulls/122444
Add guards to the RNA code to prevent the creation of legacy data on a
layered Action, and vice versa.
On a legacy Action, it is now impossible to create new layers or bindings.
On a layered Action, it's now impossible to create legacy F-Curves or
groups.
Refactor: Anim: rename bl_animation_id.py to bl_animation_action.py
The `Animation` datablock is no more, and this file tests `Action`.
No functional changes.
Pull Request: https://projects.blender.org/blender/blender/pulls/122483
Remove the button "Update Views" that requires the user to update visible views manually. This is now consistent with the automatic update of compositor tree, when views are added or deleted, see #120685.
The patch also addresses #109866 (not really a fix since behavior in that bug report is intentional).
Pull Request: https://projects.blender.org/blender/blender/pulls/122290
Move the content of `animation.cc` into `action.cc`. This is part of the
removal of the `Animation` datablock, and the injection of its
functionality into the `Action` datablock.
The test file `animation_test.cc` is renamed to `action_test.cc`.
No functional changes.
Pull Request: https://projects.blender.org/blender/blender/pulls/122480
Expose `Action::is_action_layered()` and `Action::is_action_legacy` to
RNA.
Motivation for the names: the two functions are so closely related, that I
wanted to give them a more common prefix than just `is_`.
Pull Request: https://projects.blender.org/blender/blender/pulls/122478
Previously, the code only checked that ctrl is pressed. This works, but
also allows other keys to be hold at the same time which might conflict
with other shortcuts. Now the code also makes sure that shift and alt
are not pressed.
This adds support for renaming some sockets in the node UI directly by Ctrl+Clicking
on them. This is sometimes more convenient than going to the sidebar. It affects the
Menu Switch and Bake node as well as the Simulation and Repeat zone.
Some related notes:
* The Group Input and Group Output node are not yet supported, because it currently
breaks the right-alignment on the Group Input node. I couldn't find a workaround for
this yet.
* Double-clicking on the socket name does not trigger renaming yet. This seems to
be a deeper issue in the interface code.
* The highlighting when hovering over sockets that can be renamed is very dim
making it hard to see. Alternatives like drawing a box around the label when hovering
it (like in list views) have been discussed but seem to be much more difficult to get to work.
Despite these limitations, it seems reasonable to add this already, as it shouldn't affect
anyone negatively. The nodes still look like before.
Co-authored-by: Hans Goudey <hans@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/121945
The cloth scale Filter relies on properly set up deformation constraints
(this is done in `do_cloth_brush_build_constraints_task`).
Whenever the Brush (not the Filter) is set to `SCULPT_TOOL_CLOTH`
(having it selected prior to the filter), another code path is taken and
the setting up the proper constraints is skipped (making the Filter
disfunctional).
To distinguish between filter usage and brush usage, there were already
checks for the `StrokeCache` (indicating brush usage afaict), so to
resolve, use the same check to prevent entering the particular code path
associated with the `SCULPT_TOOL_CLOTH`.
Probably an oversight in c2f0522760
Pull Request: https://projects.blender.org/blender/blender/pulls/122440
Asserts triggered e.g. by opening Gold production files (like
`pro/shots/220_storm/220_0020/220_0020-anim.blend`). Their root cause
are zero tangent vectors.
The asserts initially came from unormalized normals, but the root issue
is actually using zero vector as axis in calls to
`math::rotate_direction_around_axis`.
While rotating a zero direction vector is possible (though useless),
rotating around a zero axis vector makes no sense?
So this commit adds an assert that the given axis is non-zero in
`rotate_direction_around_axis`. And 'fixes' the found cases triggering
such assert by skipping rotation when the axis (tangent) is null.
Another related issue fixed by this commit is the iterative process in
calls to `calculate_next_normal`, which can accumulate small floating
point errors over time, leading to generating not normalized-enough
normals at some point.
Pull Request: https://projects.blender.org/blender/blender/pulls/122441
Show white text and black outline when dark, black text and white
outline when light. Slight darkening of TH_TIME_GP_KEYFRAME and
the red used for slow FPS to better work with varying backgrounds.
Pull Request: https://projects.blender.org/blender/blender/pulls/122449
This add depth writting to avoid missing pixels that haven't
been rendered by the render engine. But this forces to
not use the blending mode (otherwise we would have
order dependent results). Removing blending breaks selection
outlines so we have to move the rendering of the facing
overlay before the outline overlay. This doesn't fix the
situation for in-front objects but it improves the current
behavior for non-in-front objects.
Fix#121662
Regression from 435b6743fd, no usage of unlinkable ID (mainly
shapekeys...) should make them directly linked.
Note that this had no serious consequences, it was mainly printing annoying
error messages in release builds, and asserting in debug ones.
This improves working with viewer nodes in geometry and compositor nodes.
Previously, the viewer node would typically stay at the position where it was first
inserted which leads to very long links in many cases. Now the viewer node
automatically moves to the place where the user ctrl+shift+clicked to view data.
The viewer is placed slightly to the right and top of the current node. It is moved
up a bit, so that it does not get in the way as quickly when the user wants to add
another new node. Furthermore, the viewer node position is chosen so that it
does not intersect with other nodes.
In the future we could implement animating the node position so that it slowly
transitions to it's new places.
Pull Request: https://projects.blender.org/blender/blender/pulls/121951
By removing the check we make it possible to render volume objects
even if the shader doesn't require any volume attribute.
We still check if there is any attribute to not draw empty
volume objects that have no attribute as a unit cube.
Fix#103683
On export, PLY creates a matrix (in `set_world_axes_transform`) -- the
inverse transpose of the regular matrix [seems like the usual way of
transforming normals]] -- by which the normals are multiplied. This can end
up in non-normalized custom normals on scaled objects though. Corrected
in this PR by just normalizing after said multiplication.
On import, `BKE_mesh_set_custom_normals_from_verts` is used with the raw
data -- which ends up in `mesh_normals_corner_custom_set` which in turn
"is expected to have normalized normals" (from the comment).
We _could_ also make sure to normalize on import, however, setting these
properly on export seems the primary choice.
Other importers also dont go the extra route of making sure to normalize
the incoming data, so this seems to be in line of what other Im-/Exports
do.
Pull Request: https://projects.blender.org/blender/blender/pulls/122432
Unlike to `lookup_or_default` accessor methods of `Map` or attribute provider class,
`Span::get` is not so explicit and self described to be used with default value.
Other one issue was is that result is by value. But this is not the main reason to
delete this method. And although this can be fixed by reference, this is still not
such good to just have method to check index and return something.
Pull Request: https://projects.blender.org/blender/blender/pulls/122425
The GPv2 draw tool used a setting called "Input Samples" to
generate points (subdivisions) when two samples are far apart
from one another.
In GPv3 we have the same feature, but with a bit more control.
Users can now specifiy the maximum distance between two
points based on a percentage of the brush size (in pixels).
There were some issues in this function.
* Undefined behavior for the fallback when getting the `layer_src`
* Searching for the layer `grease_pencil_dst` based on the value of a pointer, instead of the `name`.
Pull Request: https://projects.blender.org/blender/blender/pulls/122426
Fix for sculpt mode: invert visible hides all faces with Multires modifier #95419
Grids face indices should not change on the fly based on hidden state.
It caused the rendering glitches shown on the original bug report and the attached recordings.
* this PR removes the unnecessary check and dependency of grids visibility with the smooth/sharp of faces.
* replaces smooth flag for sharp flag which better express the intent and simplifies the logic.
Pull Request: https://projects.blender.org/blender/blender/pulls/121929
- `BMLayerItem.copy_from(other)` had a typo in its docstring that prevented `other` being typed.
- `BMesh.from_object()` and `BMesh.from_mesh()` had untyped arguments.
- `BMVert.copy_from_vert_interp()`'s `fac` argument was untyped.
- `remove(item)` method of `BMVertSeq`, `BMEdgeSeq` and `BMFaceSeq` had no type for `item`.
- `get()` method of `BMEdgeSeq` and `BMFaceSeq` had "sequence" in the description of `verts` but not in the type.
Pull Request: https://projects.blender.org/blender/blender/pulls/122374