This replaces API for accessing the uiLayout fixed_size,
red_alert, root_panel, search_weight and width properties
with methods, following uiLayout refactors and the
Python API naming
Pull Request: https://projects.blender.org/blender/blender/pulls/140673
Recently, panel styling was moved to a global setting instead of being
per-editor. However, the panel's title and labels inside still rely on
the per-editor region's text and title settings.
Move panel title and text colors to the global "Panel" settings.
See PR for details and screenshots.
Part of #135192
Pull Request: https://projects.blender.org/blender/blender/pulls/140726
This removes the include `UI_interface_layout.hh` from
`UI_interface_c.hh`, and in many places this swaps the include
from `UI_interface.hh` to `UI_interface_layout.hh`.
Also, cleanups some `UI_interface.hh` includes with
`UI_interface_icons.hh` or `UI_interface_types.hh`
Change the maximum data-block name from 64 to 256 bytes by increasing MAX_ID_NAME value.
Also increase a few related non-ID data name max size, essentially the action slots identifiers, as these are the primary key used to match an Action's slot to an ID by name.
Other sub-data (bones, modifiers, etc.) lengths are not modified here, as these can be made actual dynamic strings in the future, while keeping (a reasonable level of) forward compatibility, during the course of Blender 5 release cycles.
Implements #137608.
Co-authored-by: Bastien Montagne <bastien@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/137196
This replaces uiLayout aligment API with uiLayout methods,
following uiLayout refactors and the Python API naming.
Also this converts the layout aligment enum to a fixed enum class.
Pull Request: https://projects.blender.org/blender/blender/pulls/140622
We should never select something that is hidden in the viewport.
Generally, there can be multiple reasons why keyframe handles are not
shown in the Graph Editor:
- the `View` > `Show Handles` option is disabled
- the `Only Show Selected Keyframes Handles` is enabled
- a keyframe `Interpolation` method is anything but `Bezier`
This PR corrects the first.
Details:
- In `box_select_graphkeys()`, the `incl_handles` parameter is only
be passed to `initialize_box_select_key_editing_data()`
- add a separate `KEYFRAME_ITER_HANDLES_INVISIBLE` flag (representing
SIPO_NOHANDLES)
- "include_handles" purely represents operator setting / user intend now
- "final" decision about handles/their visibility is done in
`keyframe_ok_checks()` etc
For consistency, add "include_handles" option to Lasso/Circle as well
Part of #139314
Pull Request: https://projects.blender.org/blender/blender/pulls/139349
Previously, the right sockets were already created on closure/bundle nodes when
link-drag-search is used. However, after initialization, there was no automatic
way to synchronize the sockets again after changes to one of the nodes. Instead
one had to copy the changes manually.
This patch adds a new operator that can automatically update the sockets on the
following nodes based on what is connected: Combine Bundle, Separate Bundle,
Closure (zone), Evaluate Closure.
The button is always visible in the side bar. In the future we may also want to
show it inside of the node when syncing is necessary. However, that's not done
in this patch. It's also a little bit tricky because detecting whether syncing
is necessary is not necessarily cheap (it requires traversing the tree including
going into nested node groups).
If no signature or conflicting signatures for the bundle or closure are found,
the operator does nothing. In this case, the user is currently responsible to
create/remove the sockets manually.
Pull Request: https://projects.blender.org/blender/blender/pulls/140449
This replaces API for accessing the uiLayout active_default,
acviated_init, enabled properties with methods, following uiLayout
refactors and the Python API naming.
Pull Request: https://projects.blender.org/blender/blender/pulls/140226
Currently the mode transfer overlay has to check whether it should
draw for every single object. For scenes with many instances even
that small amount of work per object can be significant. I observed
the overlay taking 1.8% of the samples in a profile.
This commit removes the mode transfer timer and stores it in a
global map instead. Besides the benefit of removing 8 bytes per
object, the main improvement is that it's now trivial to check
whether the overlay can be completely disabled.
Pull Request: https://projects.blender.org/blender/blender/pulls/140374
It is possible to resize tree view too much that only one row is
visible. To add the resize limit, clamp rows value in `tot_visible_row_count`,
that way visible rows are restricted when building the UI inside
`build_from_tree`. Limit is set to 4 (see `MIN_ROWS`).
Pull Request: https://projects.blender.org/blender/blender/pulls/140184
Auto normalization used to not work on assign/remove vertex group
operator, this was due to `BKE_object_defgroup_validmap_get` and
`vgroup_parray_alloc` did not handle grease pencil type objects. Now
added grease pencil cases in them and auto normalization works as
expected.
Pull Request: https://projects.blender.org/blender/blender/pulls/139912
This PR adds snapping to the sizes of various Sidebars, showing only
the category tabs. While in this state you can click a tab to expand
out that panel, click again to hide it.
Pull Request: https://projects.blender.org/blender/blender/pulls/136575
Make sidebar tabs use the `wcol_tab` widget colors, instead per editor
settings. Simplifying theme tweaking and the following benefits:
* Set colors in one place, affect all tabs.
* Support for text colors for inactive and active tabs.
* Support for the new `Outline Selected` property.
* In the future sidebar tabs could support `Shaded` style.
The tabs region background color remains per-editor, to be able to
customize it in a way that fits the surrounding colors (sidebar region,
header, or navigation bar background).
See pull request for screenshots and details.
Pull Request: https://projects.blender.org/blender/blender/pulls/140288
Reverts most of the additions from ae1dc8f5f9 and 68c6fc6d38 to allow
internally defined UI lists to set operators to execute on click and
drag events. This was added and used only for the asset view UI
template was removed for 5.0 in the previous commit, as part of #110461.
Pull Request: https://projects.blender.org/blender/blender/pulls/140149
This UI list based template to show assets in panels was initially
introduced for the new pose library in Blender 3.0. It enabled showing
pose assets in a grid with big previews in the 3D View Sidebar. Since
then this UI element has been superseded by the asset shelf. The
template was planned for removal since then, see #110461.
Note that the asset shelf is only available in a few editors so far,
while the template was available in all editors. So it's possible that
some add-ons still rely on this template. However, I haven't found any
add-on using this template. I think it's been broken a few times and we
didn't get reports about it either. So removal seems fine.
Change island selection from being it's own selection mode,
along side vertex/edge & face modes, to a separate toggle.
This makes it possible to use sync-select without loosing functionality
as previously island selection didn't work when sync-select was enabled.
Now island selection supports sync-select although at the moment this
only works in face-select mode, when !138197 is merged this limitation
will be removed.
In practice this change is subtle, making it possible to toggle island
selection no matter which selection mode is currently active.
Details:
- The UI is mostly unchanged, this option is available
in the same location in the header & menu as a toggle.
- The shortcut 4-key is kept, toggling instead of switching modes.
- Enabling island selection no longer isolates islands,
it just acts on selection actions made after being enabled.
When creating a Combine Bundle node using link-drag-search from a
bundle-input-socket, the new node will be initialized to have all the sockets
that linked Separate Bundle nodes have. This uses the same mechanism that's used
for creating closure zones, so it works even if the Separate Bundle node is in
some nested node group.
Pull Request: https://projects.blender.org/blender/blender/pulls/140185
This is part of the short term roadmap goal of simplifying the
compositor workflow
(see https://projects.blender.org/blender/blender/issues/134214).
The problem is that many users don't know how to get started with
compositing in Blender, even when they have used Blender for other
areas, e.g. modeling.
Note: although the solution makes compositor node trees reusable
accross blend files, this is a nice side effect and not the main goal
of the PR.
This PR implements a "New" button that creates a new compositing node
tree, and manages trees as IDs. This has following advantages:
- Consistent with other node editors and other parts of Blender,
therefore making it easier to getting started with compositing if users
are familiar with shading or geometry nodes
- Give users the ability to reuse the compositing node tree by linking
or appending it.
Note: The parameter "Use Nodes" is still present in this PR, but will
be removed (in a backward compatible way) in a follow up PR.
Pull Request: https://projects.blender.org/blender/blender/pulls/135223
In Grease Pencil, when using the tools in Sculpt Mode and Vertex Paint
mode, the check on editable layers wasn't entirely accurate. There was
a strict check on an editable _active_ layer, but since the tools work
on _all_ editable layers, the check should be wider: if there is _any_
editable layer, the tool can work.
That is fixed in this PR. Now the tools can be used when, for example,
a layer group is active or when the active layer is hidden, but there
are other editable layers present.
In Vertex Paint mode there was an additional issue: with Auto Keying
enabled, a new keyframe was created for the active layer only. A new
keyframe should be created for _every_ editable layer. As is the case
now with this PR.
Pull Request: https://projects.blender.org/blender/blender/pulls/140119
This fix make it so that the brush cursor is always the same size as
the drawn strokes.
The code logic is modified from `pixel_radius_to_world_space_radius`
in `grease_pencil_utils.cc`
Co-authored-by: Falk David <falk@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/139964
Baking and storing simulation state within loops or closures is not supported.
Previously, attempting to use the bake node or simulation zone in such a zone
would just silently fail. Now there is an error on the node and the bake
settings are grayed out.
Pull Request: https://projects.blender.org/blender/blender/pulls/140041
Shifting to Tree view will now allow drag-drop for shape-keys.
(And also possible to create nested shape keys if we want to include
support for them in future)
With !138979, multi-select support will be implemented for shape keys.
Part of #136838
See video in PR description
Pull Request: https://projects.blender.org/blender/blender/pulls/139323
Object::actcol assignments from edit-mode data wasn't clamping
the index to the valid range. This caused an out of bounds read when
accessing Object::matbits.
While material indexes should typically be within the material bounds,
this isn't guaranteed. Selecting a face for example with a material
outside the range was crashing.
Add a utility function that sets the active material index to replace
existing inline checks.
Follow up to the fix for #139369.
This implements the "boundary strokes" features (from 4.2 LTS).
To make it a bit more clear, the feature is now called "fill guides".
It uses the same `Alt`+`LMB` shortcut.
Fill guides are denoted by a `".is_fill_guide"` attribute set to `true`.
Otherwise they behave as normal strokes.
There is the `Clean Up` > `Remove Fill Guides` operator to remove
the strokes.
This also adds an option to the Fill tool to automatically remove fill
guides once a fill has been created.
Pull Request: https://projects.blender.org/blender/blender/pulls/139293
e.g. stands for "exempli gratia" in Latin which means "for example".
The best way to make sure it makes sense when writing is to just expand
it to "for example". In these cases where the text was "for e.g.", that
leaves us with "for for example" which makes no sense. This commit fixes
all 110 cases, mostly just just replacing the words with "for example",
but also restructuring the text a bit more in a few cases, mostly by
moving "e.g." to the beginning of a list in parentheses.
Pull Request: https://projects.blender.org/blender/blender/pulls/139596
This might be up for debate, but for the purpose of copy/pasting
keyframes, I think including keyframes that only have a handle selected
is not what most users expect.
The more pressing issue of #139314 is probably already addressed with
!139349 (that one fixes cases where handles would be included in [box]
selection even though they are not visible), but handles -- e.g.
overshooting handles -- can easily get included in [box]selection
without the user actually wanting to copy/paste the whole keyframe.
This is now resolved by swapping the check for skipping a keyframe from
`BEZT_ISSEL_ANY` to `BEZT_ISSEL_IDX`.
Additionally, a bit of code was added so we can do the "early out" in
`copy_animedit_keys` under the same condition.
Pull Request: https://projects.blender.org/blender/blender/pulls/139352
Overall the goal of the PR is to show the preview range in the
clip editor's dopesheet and graph mode.
To accomplish this, some cleanup and refactor were needed:
- Clip editor had a nearly 1:1 copy paste of the timeline draw code,
which has been replaced with `ANIM_draw_framerange`.
- Preview range draw code required `bContext`, which was only used to
access scene. Now scene is passed explicitly, without need to know the
context.
- The macro to access the preview range was removed. This is because the
code is within `PRVRANGEON` check, so `PSFRA`/`PEFRA` were doing
redundant checks.
Pull Request: https://projects.blender.org/blender/blender/pulls/138678