* If channel_index = -1, the pushdown operator will try to use the active AnimData
block. To see which one this will be, check the properties (NKEY) region in NLA Editor.
* Added more detailed error handling for the various cases where things are not
in a valid state for pushing down an action. This is notably to stop scripters
from putting the NLA into an inconsistent state.
This now works (barring one or two minor glitches and the operator on the pushdown
button being a bit of a hack). The old drawing code is still in place though, and
will be kept around for a little while yet while the last kinks are ironed out.
This commit lays some of the groundwork needed to port the last of the NLA Editor
channel types that's still defined using custom code. By moving this code over
to the newer standardised framework, this will enable widgets to have tooltips
to make it easier for users to find out what various buttons do.
Currently this isn't hooked up to anything though.
Instead of displaying the "tweaking action" status indicator icon on the right hand
side jammed against the mapping/no-mapping toggle (pin), this is now displayed as in
place of the action icon used on the left (as the type indicator). This is less messy
than the previous situation, which was needed partly due to the abuse of an unsuited
icon.
1) The "pushdown" operation is the actual name for the functionality
previously represented by the snowflake. That is, pushing the active
action onto the NLA stack as a new strip.
The icon that is introduced here is the icon I originally wanted to
use here for this purpose (but couldn't at the time the NLA was coded
as we didn't have the master SVG available yet). I'm making this change
now to hopefully make the "animation-layers" intentions behind the NLA
design a lot clearer than they have been so far.
2) Also added a dedicated icon for representing that the active action
is in the "tweaking" state (i.e. we're editing a particular strip's
action). Previously we were abusing an icon designed for an entirely
different purpose, mainly since its identifier looked like it would work.
This operator is used to make sure that if/when you have multiple strips
using the same action, if you select these and run this operator, each
strip will be given its own copy of the action. This is useful if you
decide later that you want to start using an existing action as a base.
NOTE: This does not recursively go inside meta's, so care is still advised
in that case.
This commit changes the default strip duplication behaviour (Shift-D) so that it will
create a copy of whatever action it uses. Previously, it was very hard, if not impossible
in some cases to create a new copy of an action to start working on in the NLA.
If you want the old behaviour, you'll need to use ALt-D (Linked Duplicates).
(Note: Although the new Shift-D may not be so optimal in all cases, I've decided to go
with this version since it aligns better with the way this works for objects. Doing the
opposite for NLA would just have added to the confusion)
View2D had some inconsistencies making it error prone in some cases.
- Inconstant checking for NULL x/y args.
Disallow NULL args for x/y destination pointers, instead add:
- UI_view2d_region_to_view_x/y
- UI_view2d_view_to_region_x/y
- '_no_clip' suffix wasn't always used for non-clipping conversion,
switch it around and use a '_clip' suffix for all funcs that clip.
- UI_view2d_text_cache_add now clips before adding cache.
- '_clip' funcs return a bool to quickly check if its in the view.
- add conversion for rectangles, since this is a common task:
- UI_view2d_view_to_region_rcti
- UI_view2d_region_to_view_rctf
- pass label strlen since in many cases its already known.
- use single linked list for cached text drawing.
- add BLI_link_utils.h for single linked list macros.
own tests give approx 22% overall speedup.
NLA Track drawing has now been ported over to use the UI widgets
like the rest of the anim channels do in the DopeSheet and Graph
Editors. The main benefit of this for users is that these buttons
will now show tooltips when you hover over them. Hopefully this
will help make the "solo" buttons more discoverable.
I've decided to postpone porting the "Action Line" channels to the
widget system for now, since there are quite a few more issues there
which need quite a bit more time to work through.
Frame change hotkeys now work in the following places:
1) Outliner - Main region
2) Action/NLA Editors - Channels Region
3) Info View - Reports region
Other places identified by the bugreport (but which I've decided to leave
alone):
- Text Editor (when no file open) - The way the keymaps work here means that
this can't be done without affecting normal text editing
- File Browser - What's the point of changing frames when you're about to
open/save the file?
- User Prefs - Is there any real point here either? Also, this is usually shown
in a separate window.
tweakmode, this will now result in tweakmode being exited instead of going into
a weird limbo-land where channel selection has changed (but tweakmode is still
active but not drawn)
node materials.
Area and region listener callbacks now get the screen and area pointers passed, so
they can do more fine grained checks to see if redraw is really needed, for example
depending on the 3D view drawtype.
tracks
As a convenience feature for those who are loading in action libraries and using
these to quickly block out things in the NLA editor, it is now possible to add
strips to AnimData blocks without first manually creating empty tracks to add
these strips to. Simply ensure that such empty AnimData blocks are selected
(Hint: click on the action line of the affected AnimData block to do so), and
try to add a strip normally.
Originally I was thinking of not restoring this functionality (see report for
further details). However, upon rechecking the code, it seems that there was
actually a define set up for this already, but which wasn't actually hooked up
yet. So, this commit basically exposes this option ("Sync Length") which ensures
that when exiting tweak mode on a NLA Strip, that strip instance (and not other
users of the same action) will be updated to include the newly added keyframes.
This option is not enabled by default, and shouldn't really be needed in most
("intended") workflows.
Conflicts resolved:
source/blenderplayer/bad_level_call_stubs/SConscript
Partly reverted changes to intern/cycles/blender/addon/ui.py in revision 52899
to make it easier to merge trunk changes.
and RNA for it independent of the build flag for enabling Freestyle. Suggested
by Sergey Sharybin through a code review of the branch.
* Many #ifdef WITH_FREESTYLE blocks were removed to always have Freestyle-specific
DNA file specification and RNA for it built in Blender. This will allow Freestyle
setting survive even when a non-Freestyle build is used for loading and saving
files. It is noted that operations are still conditionally built through #ifdef
WITH_FREESTYLE blocks.
* To this end, new blenkernel files BKE_freestyle.h and intern/freestyle.c have
been added. All API functions in FRS_freestyle_config.h as well as some of those
in FRS_freestyle.h were moved to the new files. Now the relocated API functions
have BKE_ prefix instead of FRS_.
Resolved conflicts:
release/datafiles/startup.blend
source/blender/editors/space_nla/nla_buttons.c
Also updated source/blender/blenkernel/intern/linestyle.c as a follow-up of
recent changes for the use of bool.