Implements the proposed design (with some modifications) in #135058.
## Sequencer Scene
This adds a new property called `sequencer_scene` to workspaces. This scene is used
by the video sequence editors in the current workspace for their context.
This is a first step towards "detaching" the VSE from the active scene in the window.
Each sequencer timeline editor shows the sequencer scene that is being used.
By default, when no sequencer scene is selected, the timeline and preview are empty.
Pressing the "new" button will add a new scene and assign it to the sequencer
scene for the current workspace.
## Contextual Playback
Pressing `Space` (by default) for starting the animation playback is now contextual:
depending on the context (where your mouse cursor is), the scene that is played back
might be different. E.g. with a 3D Viewport and a Sequencer open, pressing "play"
in the 3D Viewport will play the _active scene_ of the window, while pressing "play"
in the sequencer will play the _sequencer scene_.
## Time & Scene Synchronization
Additionally, this adds a toggle called "Sync Active Scene".
With the property turned on, the active scene & scene time in the window will be
synced with the time & scene of the current scene strip in the sequencer.
Note that this is _not_ bi-directional. The sequencer can change the active scene
and map time, but it's not possible the other way around since it one can have
multiple strips using the same scene (+camera, and even time!).
Currently this setting is exposed in the footer of the sequencer timeline as well
as in the workspace settings.
This allows for one of the core concepts that the story tools projects aims at: Working
in a scene (e.g. in the 3D viewport) while also working with the edit
(in the sequencer timeline).
## Some technical notes
* Undoing while playback is running will now cancel playback. This is to avoid the timer,
that points to the scene and viewlayer that are playing, to get de-synced after loading
the memfile undo step.
* When the sequencer scene is not the same as the active scene, we ensure it has
a depsgraph.
* Normally, when a `NC_SCENE` notifier points to a specific scene, the notifier is dropped
if that scene doesn't match the active one in the window. We now also check that it
doesn't match the sequencer scene in the active workspace.
* When loading older files, we need to make sure that the active workspace in a window
uses the active scene as the sequencer scene. This is to make sure that the file opens with
the same sequences open.
* Tool settings are stored per scene. To make sure the sequencer uses the tool settings for
the sequencer scene, the "context.tool_settings" and `CTX_data_tool_settings` members
are overridden in the sequence editors.
Pull Request: https://projects.blender.org/blender/blender/pulls/140271
For Todo: #138764
This follows a fix that tried to address this issue, but got negative feedback #139398
At certain zoom levels the animation editors in 4.5 would draw lines on subframes.
The previous patch fixed that by drawing less lines, but that got pushback from artists.
This patch restores the previous behavior, but ensures that major lines are *always* drawn
on even frame numbers, thus allowing minor lines to be drawn between
them on full frames.
Pull Request: https://projects.blender.org/blender/blender/pulls/142858
Replaces the `FPS` macro with `scene->frames_per_second()`.
The macro has two major issues:
* It hides that it depends on a `Scene *` variable named `scene`.
* It makes debugging harder.
This is now replaced with a member function on the scene.
Pull Request: https://projects.blender.org/blender/blender/pulls/144127
As shown in the complaint, when a panel region with category tabs is
aligned to the left we are not insetting the position of the scroll
bars like we do if aligned to the right. There are two separate
fixes needed. In ED_region_panels_draw we are just not doing this for
regions on the left. And in UI_view2d_mask_from_win when sizing a
left-algined scrollbar we just use scrollbar width as xmax, when it
should be xmin + width. This means that the scroll bar will not be seen
if the mask xmin is greater than the scrollbar width.
Pull Request: https://projects.blender.org/blender/blender/pulls/141470
Commit #142418 hid the navigation gizmo and text overlays while in Full
Screen Area by just not allowing those operations while in that mode.
This PR undoes that and instead selectively hides those items and
restores them afterward if they had been showing. The difference is
that this makes it possible to optionally bring them back while in the
mode. This adds a new fullscreen_flag to bScreen to store what was
visible to allow restoring afterward.
Pull Request: https://projects.blender.org/blender/blender/pulls/143144
Make sure `mask_size` is calculated correctly in
`UI_view2d_view_to_region_rcti_clip` since the rcti is inclusive and the
size functions do not take this into consideration. This function is
only used from NLA and VSE drawing code.
In the video below you will see how VSE labels can jiggle vertically
while the area is resized. This is caused by the incorrect calculation
of rect height in UI_view2d_view_to_region_y. Our BLI_rcti_size_y does
not return the correct size, but max-min, which one unit too small for
our inclusive integer rects like v2d->mask or region->winrct. This PR
corrects the calculation in UI_view2d_region_to_view_y, and also in
UI_view2d_region_to_view_x because these are so similar.
Pull Request: https://projects.blender.org/blender/blender/pulls/143095
The "Full Screen Area" makes the area take up the screen and also hides
most regions. This is meant to be as clean as possible, as part of the
stereo 3D pipeline. There are some items that remain though. This PR
removes navigation gizmos, text overlay, and statistics overlay.
Pull Request: https://projects.blender.org/blender/blender/pulls/142418
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
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.
Apply the "Zoom direction" preference to the rotation axis.
Until now, this preference was limited to translations.
Note that the X/Y swap is now applied in the accessor functions instead
of wmNDOFMotionData::tvec because swapping the X/Y axis doesn't work
well in some cases (color picker for example), and it's confusing
of axis swapping is handled in different parts of the code for
rotation & translation.
Ref !140975
Co-authored-by: Patryk-Skowronski <patryk_skowronski@3dconnexion.com>
Restore expected behavior of the NDOF, especially in the context of
non-3D editors. It addresses the following issues:
- Object mode, 3D viewport:
With "Lock Horizon" off, the rotation axes will invert unexpectedly,
making the camera behave similar to a "Fly mode".
- Fly mode, 2D editors:
Changing a navigation mode to "Fly" makes no effect.
Applies to UV and Nodes editors, Camera Preview etc.
Related to #140165
This includes some minor API changes back-ported from `main`
since the PR was created for `main`.
Co-authored-by: Patryk-Skowronski <patryk_skowronski@3dconnexion.com>
Ref !140537
- Use return values for NDOF access functions.
- Pass in event data by const reference as this is never null.
- Don't scale the angle from WM_event_ndof_to_axis_angle by the time
delta since other functions don't do this, it's strange to make
this an exception.
- Replace the term "pan" with "translation" since pan in Blender
typically refers to moving the view in 2D using cursor input,
not 3D transaction.
- Use a more descriptive term "time_delta" for the time between NDOF
motion events.
Regression in [0] caused NDOF panning to be reversed
and zoom to be inverted in the 3D viewport.
- Use 2D viewport behavior for cameras & rotation locked views
since the navigation mode is not used in these cases.
- Restore the same zoom direction as 4.4x.
[0]: 64696cc699
Instead of drawing weak lines halfway between strong lines, they are
drawn at every second strong line as gray lines, skipping one dark line.
This means that lines are always drawn on full frames instead of
sometimes landing in the middle.
Co-authored-by: Adarsh TS <tsadarsh@pop-os.localdomain>
Pull Request: https://projects.blender.org/blender/blender/pulls/139398
This prevents the use of unaligned data types in
vertex formats. These formats are not supported on many
platform.
This simplify the `GPUVertexFormat` class a lot as
we do not need packing shenanigans anymore and just
compute the vertex stride.
The old enums are kept for progressive porting of the
backends and user code.
This will break compatibility with python addons.
TODO:
- [x] Deprecation warning for PyGPU (4.5)
- [x] Deprecate matrix attributes
- [x] Error handling for PyGPU (5.0)
- [x] Backends
- [x] Metal
- [x] OpenGL
- [x] Vulkan
Pull Request: https://projects.blender.org/blender/blender/pulls/138846
- Navigation modes has been redefined a bit and introduced in a form of
an enum so that new ones can me implemented in the future.
Additionally switching between modes shouldn't require any additional
configurations like inverting all the axes.
Currently there are only 2 modes implemented,
but 2 more are planned and will be proposed in follow-up PRs.
Implemented modes are:
- Object: works like "Orbit" option.
but has all axes implicitly inverted
- Fly: works the same as "Free".
- "Turntable" option has been turned into "Lock Horizon".
This single option works for both normal navigation and Fly/Walk
modes now.
- Pan and Rotation axes inversion has been removed from default
configuration.
- UI has been simplified following the design from #136880.
- Zoom Invert has been removed since it looks like a duplication of
`NDOF_PANZ_INVERT`.
Ref !139343
Both horizontal and vertical scale indicators rely on string measuring
for proper positioning. But in order to always do this reliably the
font's size needs to be set explicitly. Otherwise the font size could
be incorrect from prior use so the measurement is wrong, but then the
size is correctly set when drawing occurs. It draws at the right size
but at wrong position.
Pull Request: https://projects.blender.org/blender/blender/pulls/139549
This unifies vertex and texture data formats
into a single base enum class.
`TextureFormat` and `VertexFormat` then mask
the invalid format for their respective usage.
Having a base enum allows casting between
`TextureFormat` and `VertexFormat` possible
(needed for Buffer Textures).
It also makes it easier to write and read data
to buffers/textures as each format will have an
associated host type.
These enum is generated from MACRO expansion.
This allow to centralize all information about
the formats in one place. This avoid duplicating
the list of enums for each backend.
This only creates the new enum. Porting older enums will
be done in other PRs.
Normalized integer CPU format are missing and waiting for #130640
Rel #130632
Pull Request: https://projects.blender.org/blender/blender/pulls/138069
Adjust the logic in `view_zoomstep_apply_ex` to ensure that spaces
without the new flag `V2D_ZOOM_IGNORE_KEEPOFS` will still zoom if they
do not also have `keepofs` flags set.
This means spaces like Geometry Nodes can zoom again.
Create an option in `View2D.flag` that allows us to have separate
behavior for area resizing (left aligned with `V2D_KEEPOFS_X`) and
zooming (centered with the keepofs flags disabled). Add this to the
versioning code.
Pull Request: https://projects.blender.org/blender/blender/pulls/138041
Previously spell checker ignored text in single quotes however this
meant incorrect spelling was ignored in text where it shouldn't have
been.
In cases single quotes were used for literal strings
(such as variables, code & compiler flags),
replace these with back-ticks.
In cases they were used for UI labels,
replace these with double quotes.
In cases they were used to reference symbols,
replace them with doxygens symbol link syntax (leading hash).
Apply some spelling corrections & tweaks (for check_spelling_* targets).
We can apply the `V2D_KEEPZOOM` and `V2D_KEEPOFS_Y` flags to the main VSE
region to make sure this happens. If `V2D_KEEPZOOM` is set, we should update
the view2d's `oldwinx` and `oldwiny` in `ui_view2d_curRect_validate_resize`
just like the `V2D_KEEPASPECT` case.
Divide-by-zero is a real possibility here, since initialization status of
`oldwinx/y` cannot be determined from the `resize` boolean alone (e.g. loading
regions from disk on startup yields a `true` `resize` parameter, so any old
regions that have `KEEPZOOM` added through versioning will get this error since
their `oldwinx/y` is uninitialized). Avoid by initializing `oldwinx/y` if it is zero in
`ui_view2d_curRect_validate_resize`.
Addresses #136508.
Pull Request: https://projects.blender.org/blender/blender/pulls/137802
It's safer to pass a type so that it can be checked if delete should be
used instead. Also changes a few void pointer casts to const_cast so that
if the data becomes typed it's an error.
Pull Request: https://projects.blender.org/blender/blender/pulls/137404
Masks for scrollbars were properly shrunk to match their drawn
representation in #135021, however, click logic was not updated
alongside this change.
For one, `mouse_in_scroller_handle` incorrectly assumed that if the
slider filled up the entire scrollbar extents, we would only be able to
select the bar. This code never ran in practice since `scrollers` were
always smaller than their mask, but now that they're the right size,
it's being run. Fix by removing the case.
It is also guaranteed that the "scroller"/"bubble"/"thumb" is not out of
view of the scrollbar track itself because it is clamped at the end of
`view2d_scrollers_calc` (which always runs before
`mouse_in_scroller_handle`), so this is dead code that can be removed.
Finally, rename `mouse_in_scroller_handle` to `scrollbar_zone_get` to
better represent its function.
Pull Request: https://projects.blender.org/blender/blender/pulls/137437
Currently scroll bars that are in regions that are set to "region
overlap" (like Tool Bar and Side Bar using a transparent background)
will fully hide when your mouse is not near them. This PR removes that
feature so that they are treated like in other areas. This way you can
always see that there are portions of the region scrolled away and what
proportion. A less jarring transition since it is only 0.4 - 1.0,
rather than 0.0 - 1.0.
Pull Request: https://projects.blender.org/blender/blender/pulls/136571
This fixes most "One Definition Rule" violations inside blender proper
resulting from duplicate structures of the same name. The fixes were
made similar to that of !135491. See also #120444 for how this has come
up in the past.
These were found by using the following compile options:
-flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing
Note: There are still various ODR issues remaining that require
more / different fixes than what was done here.
Pull Request: https://projects.blender.org/blender/blender/pulls/136371
Use enum types for event modifier and types,
`wmEventModifierFlag` & `wmEventType` respectively.
This helps with readability and avoids unintended mixing with other
types. To quiet GCC's `-Wswitch` warnings many `default` cases needed
to be added to switch statements on event types.
Ref !136759
Callbacks: exec invoke & modal now use a typed enum wmOperatorStatus.
This helps avoid mistakes returning incompatible booleans or other
values which don't make sense for operators to return.
It also makes it more obvious functions in the WM API are intended
to be used to calculate return values for operator callbacks.
Operator enums have been moved into DNA_windowmanager_enums.h
so this can be used in other headers without loading other includes
indirectly.
No functional changes expected.
Ref !136227
Mouse and action zone interaction for scrollbars depend on `v2d->vert`
and `v2d->hor`, which are updated through `view2d_masks`. However,
scrollbar drawing through `UI_view2d_scrollers_draw` calls
`view2d_scrollers_calc`, which pads these sizes further, meaning that
drawn scrollbars are slightly out of sync with their hotspots. This is
noticeable at track edges for shrinking scrollers or when tracks are
opaque. Fix by moving the extra (noticeable) padding code from
`view2d_scrollers_calc` to `view2d_masks`.
Pull Request: https://projects.blender.org/blender/blender/pulls/135021
The general idea is to keep the 'old', C-style MEM_callocN signature, and slowly
replace most of its usages with the new, C++-style type-safer template version.
* `MEM_cnew<T>` allocation version is renamed to `MEM_callocN<T>`.
* `MEM_cnew_array<T>` allocation version is renamed to `MEM_calloc_arrayN<T>`.
* `MEM_cnew<T>` duplicate version is renamed to `MEM_dupallocN<T>`.
Similar templates type-safe version of `MEM_mallocN` will be added soon
as well.
Following discussions in !134452.
NOTE: For now static type checking in `MEM_callocN` and related are slightly
different for Windows MSVC. This compiler seems to consider structs using the
`DNA_DEFINE_CXX_METHODS` macro as non-trivial (likely because their default
copy constructors are deleted). So using checks on trivially
constructible/destructible instead on this compiler/system.
Pull Request: https://projects.blender.org/blender/blender/pulls/134771
This patch registers scrollbars with handles so that they shrink just
like their non-handle counterparts.
To avoid user errors related to clicking into the handle track instead
of the underlying view, if the final alpha of the track is invisible (0)
then it will range up to 0.25 instead.
Pull Request: https://projects.blender.org/blender/blender/pulls/135023
Move the code dealing with converting float3 to GPU normals
out of the vertex format header into a separate header. Use a
proper C++ namespace and remove duplication by only using
the more recently added C++ templated conversions.
Most of the diff comes from the removal of the indirect includes
from GPU_vertex_format.hh. A lot of files ended up mistakenly
depending on that.
Pull Request: https://projects.blender.org/blender/blender/pulls/134873