When beveling a vertex with only 2 connected edges, the resulting
geometry was not selected.
Resolve by not only selecting the faces created by the bevel operation,
but also selecting the vertices created.
Ref !139691
Correct problem where face split inadvertently triggered the
un-triangulate detection logic in places due to freshly added diagonals.
Defer face split until after tagging is complete so the new edges don't
interfere with edge counting.
Ref !141511
When the layer tree in the evaluated state of the Grease Pencil object changed,
the code would fail to get the crazyspace deformation.
Currently we rely on a 1 to 1 index mapping of the original and evaluated
layers. For obvious reasons, this is very weak and can easily break.
The new implementation works as follows:
* Caller that wants to get the crazyspace deformation passes the evaluated and original
object + the original drawing to get the deformation of.
* Fallback deformation are the original positions.
* If there are drawing edit hints in the evaluated geoemtry set, then
* find the edit hint that corresponds to the original drawing
* use the positions in the edit hint.
To create the drawing edit hints, we need to know what evaluated layer corresponds
to which original layer. Currently, this simply stores the original layer index on the
evaluated layer runtime data.
The solution is not ideal and there are some possible improvements like:
* Find a way to solve the more general case, e.g. when there are multiple original
IDs involved.
* Propagate the "mapping" to original layers even when the type of geometry is
changed, like going to curve instances and back.
Pull Request: https://projects.blender.org/blender/blender/pulls/139285
The currently it requires the mouse to `1.5 * page_size`
from the top to the bottom to scroll down, this change
instead makes the pan scroll to happen every half page
size in both directions.
Completes fixes for #110779
Pull Request: https://projects.blender.org/blender/blender/pulls/111520
This commit introduces the extension modes to the transform node and
further streamlines the node properties by wrapping all props in a node
storage. Therefore, the interpolation mode has been removed from the
custom properties of the node and moved into the node storage.
Pull Request: https://projects.blender.org/blender/blender/pulls/141487
This is related to #140381, where the symptom of the bug was a crash
caused by an undefined behavior. In that case, setting a valid active
viewer key was the proper fix. However,
`find_active_context_recursive()` could return `nullptr` in theory so
the same problem might occur in the future.
The commit resolves the undefined behavior by avoiding the
dereferencing of a null pointer.
Pull Request: https://projects.blender.org/blender/blender/pulls/141270
Reading from the top-right of the selection buffer could read
past the buffer bounds. Resolve by ensuring the clamped buffer
isn't empty. Relates to #141591.
When Timeline and similar regions become very short we try to remove
overlapping parts as they can no longer fit. While doing this I didn't
consider that the marker/Scrubbing Region color could include
transparency. This PR just backtracks a little and hides the marker
region in a different way, allowing transparency if wanted.
Pull Request: https://projects.blender.org/blender/blender/pulls/141581
The memfile undo data-block change detection didn't work for meshes
because we ended up writing a new pointer every time. In practice the
array the pointer references is always empty anyway, so we can just add
a check and write null instead.
Unfortunately this fix only applies to 4.5, since the attribute DNA
data (which is actually used at runtime in 5.0) is created temporarily
specifically for writing, so it gets a new address every time.
We'll probably need to solve #127706 in 5.0 to fix this.
Pull Request: https://projects.blender.org/blender/blender/pulls/141457
Noticed that when clicking a tree-view item with multi-select support
(shape keys in this case) twice without ctrl held, and then another one
with ctrl held, the previous one would get deselected.
That's because the second click would first deselect all items and then
call `AbstractViewItem::activate()` on the clicked item. This would fail
to re-select the item, because it skipped touching selection when the
active state didn't change (as was the case here).
Zooming in `view_zoomstep_apply_ex` ignores any kind of v2d limits,
which are only applied later in `UI_view2d_curRect_validate`. After
zooming in all the way, further attempted zooms get undone by
`ui_view2d_curRect_validate_resize` in the following manner:
1. VSE has no `V2D_LIMITZOOM` flag set, so a v2d that is too small tries
to grow to `v2d->min[0]`.
2. Since `V2D_KEEPOFS_X` flag is set so that resizing the VSE can be
anchored to the left, the way that the v2d is altered to grow to the
minimum width (10 frames) is by increasing only `cur->xmax` instead
of both sides.
Fix by gating keepofs logic behind a similar `do_keepofs` to the one
which was added to `view_zoomstep_apply_ex` in 385a8a4d6a.
This is quite safe and regression-proof since every space but the
VSE has `V2D_ZOOM_IGNORE_KEEPOFS` unset, in which case the logic is
unchanged.
Ref: 7d9499bdc4, 8b36cf3eac, 385a8a4d6a, 28b1a33e16.
When selecting gizmos (such as one of the scale handles in the
Transform tool), the depth test state does not match what is shown in
the viewport. This can lead to unintuitive gizmo selection.
The issue is caused by the incorrect assumption that the depth state is
already `GPU_DEPTH_NONE` before rendering the gizmos for selection.
The solution is to ensure the status before rendering.
Pull Request: https://projects.blender.org/blender/blender/pulls/141412
This commit takes the previously defined `Paint_Runtime` struct and
moves it into the BKE namespace, initializing it on demand instead of it
being a default-allocated member. This data does not need to be
persisted and is runtime only.
Pull Request: https://projects.blender.org/blender/blender/pulls/141413
This PR does four things, and shouldn't have visible impact to users.
* Use fewer decimal places for D65 white point, to match e.g. sRGB and
Rec.2020 standards.
* Fix mistake in grayscale matrix for Grayscale look and False Color view
transform.
* Remove unused luminance_compensation_srgb/p3
* Improve AgX Log's matrix comment
Pull Request: https://projects.blender.org/blender/blender/pulls/141027
Improved readability of `armature_deform.cc` high level API functions
by using spans, references, and optional values instead of raw pointers.
Threading callbacks are reorganized to avoid unused function parameters
in code branches and makes it easier to verify which parts of the code
are executed for given input arguments.
Pull Request: https://projects.blender.org/blender/blender/pulls/141453
Remove `BLI_assert(tc->sorted_index_map);` calls. Add one special case
in the function that investigates whether there is any selected item in
`tc->data`.
Earlier, I've been quite liberal in spreading these asserts around, to
guard against code paths that should have originally sorted `tc->data`
but by mistake didn't create `tc->sorted_index_map`.
They've been removed now, as they seem to be causing more trouble than
they're worth: the "sorting selected first" behaviour is only explicitly
there for proportional editing. With proportional editing disabled,
`tc->data` **only** contains selected items, and those are trivially
sorted first.
By now `tc->foreach_index_selected` can work without `sorted_index_map`;
if it is `nullptr`, it will assume that we're in the trivial case, and
that the array items can just be visited in index order.
Pull Request: https://projects.blender.org/blender/blender/pulls/141386
In case Blender was able to allocate a vertex buffer for huge geometry,
but isn't able to allocate its staging buffer it would crash. In this
case errors will be reported in the console.
This PR fixes this by clearing the data in stead of uploading.
Pull Request: https://projects.blender.org/blender/blender/pulls/141553