2D stabilizer: Revert majority of UI change

For now simply reshuffle option so they keep proper dependency flow.

Benefits:

- Has an ability to hide tracks lists to work with other sliders around.
  Could be really handy to quickly get rid of lenghty lists.

- From a feedback seems to be fitting workflow better.

Things to doublecheck on:

- Feels a bit misordered: first you define whether one want to have
  rotation stabilized, then have tracks, then scale options.

  While this follows dependency flow (which is really good and which
  we should not violate) it has weird feeling on whether things are
  really where they have to be.

- Autoscale controls visibility of max-scale, can we just make it
  active/inactive instead?

- Autoscale replaces slider with label. Can it be disabled slider
  instead to reduce visual jumping (disabled slider prevents user
  input)

Hopefully we'll still want to have collapsable box after re-iterating
over this points, so we don't waste bits in DNA.
This commit is contained in:
Sergey Sharybin 2016-08-16 14:25:55 +02:00
parent cd5116e914
commit b7d656c3b2
5 changed files with 73 additions and 45 deletions

View File

@ -916,58 +916,74 @@ class CLIP_PT_stabilization(CLIP_PT_reconstruction_panel, Panel):
layout.prop(stab, "anchor_frame")
col = layout.column()
col.label(text="Location")
row = col.row()
row.template_list("UI_UL_list", "stabilization_tracks", stab, "tracks",
stab, "active_track_index", rows=2)
sub = row.column(align=True)
sub.operator("clip.stabilize_2d_add", icon='ZOOMIN', text="")
sub.operator("clip.stabilize_2d_remove", icon='ZOOMOUT', text="")
sub.menu('CLIP_MT_stabilize_2d_specials', text="",
icon='DOWNARROW_HLT')
col.label(text="Expected Position")
row = col.row()
row.prop(stab, "target_pos", text="")
col.prop(stab, "influence_location")
layout.separator()
layout.prop(stab, "use_stabilize_rotation")
col = layout.column()
col.active = stab.use_stabilize_rotation
row = col.row()
row.template_list("UI_UL_list", "stabilization_rotation_tracks", stab, "rotation_tracks",
stab, "active_rotation_track_index", rows=2)
sub = row.column(align=True)
box = layout.box()
row = box.row(align=True)
row.prop(stab, "show_tracks_expanded", text="", emboss=False)
sub.operator("clip.stabilize_2d_rotation_add", icon='ZOOMIN', text="")
sub.operator("clip.stabilize_2d_rotation_remove", icon='ZOOMOUT', text="")
sub.menu('CLIP_MT_stabilize_2d_rotation_specials', text="",
icon='DOWNARROW_HLT')
col.prop(stab, "target_rot")
col.prop(stab, "influence_rotation")
layout.separator()
col = layout.column()
col.active = stab.use_stabilize_rotation
col.prop(stab, "use_stabilize_scale")
col.prop(stab, "use_autoscale")
if stab.use_autoscale:
col.prop(stab, "scale_max", text="Max")
col.label(text="Auto Scale Factor: %5.3f" % (1.0 / stab.target_zoom))
if not stab.show_tracks_expanded:
row.label(text="Tracks For Stabilization")
else:
col.prop(stab, "target_zoom")
row.label(text="Tracks For Location")
row = box.row()
row.template_list("UI_UL_list", "stabilization_tracks", stab, "tracks",
stab, "active_track_index", rows=2)
col.prop(stab, "influence_scale")
sub = row.column(align=True)
sub.operator("clip.stabilize_2d_add", icon='ZOOMIN', text="")
sub.operator("clip.stabilize_2d_remove", icon='ZOOMOUT', text="")
sub.menu('CLIP_MT_stabilize_2d_specials', text="",
icon='DOWNARROW_HLT')
row = box.row()
row.label(text="Tracks For Rotation / Scale")
row = box.row()
row.active = stab.use_stabilize_rotation
row.template_list("UI_UL_list", "stabilization_rotation_tracks", stab, "rotation_tracks",
stab, "active_rotation_track_index", rows=2)
sub = row.column(align=True)
sub.operator("clip.stabilize_2d_rotation_add", icon='ZOOMIN', text="")
sub.operator("clip.stabilize_2d_rotation_remove", icon='ZOOMOUT', text="")
sub.menu('CLIP_MT_stabilize_2d_rotation_specials', text="",
icon='DOWNARROW_HLT')
row = layout.row()
row.active = stab.use_stabilize_rotation
row.prop(stab, "use_stabilize_scale")
if stab.use_autoscale:
row = layout.row(align=True)
row.prop(stab, "use_autoscale")
row.prop(stab, "scale_max", text="Max")
else:
layout.prop(stab, "use_autoscale")
layout.separator()
layout.label(text="Expected Position")
layout.prop(stab, "target_pos", text="")
layout.prop(stab, "target_rot")
if stab.use_autoscale:
layout.label(text="Auto Scale Factor: %5.3f" % (1.0 / stab.target_zoom))
else:
layout.prop(stab, "target_zoom")
layout.separator()
row = layout.row()
row.active = 0 < len(stab.tracks.values())
row.prop(stab, "influence_location")
col = layout.column()
col.active = stab.use_stabilize_rotation and 0 < len(stab.rotation_tracks.values())
row = col.row()
row.prop(stab, "influence_rotation")
row = col.row()
row.prop(stab, "influence_scale")
layout.prop(stab, "filter_type")

View File

@ -345,6 +345,7 @@ void BKE_tracking_settings_init(MovieTracking *tracking)
tracking->stabilization.rotinf = 1.0f;
tracking->stabilization.maxscale = 2.0f;
tracking->stabilization.filter = TRACKING_FILTER_BILINEAR;
tracking->stabilization.flag |= TRACKING_SHOW_STAB_TRACKS;
BKE_tracking_object_add(tracking, "Camera");
}

View File

@ -91,6 +91,9 @@ static void migrate_single_rot_stabilization_track_settings(MovieTrackingStabili
}
}
stab->rot_track = NULL; /* this field is now ignored */
/* by default show the track lists expanded, to improve "discoverability" */
stab->flag |= TRACKING_SHOW_STAB_TRACKS;
}
static void do_version_constraints_radians_degrees_270_1(ListBase *lb)

View File

@ -463,6 +463,7 @@ enum {
TRACKING_AUTOSCALE = (1 << 1),
TRACKING_STABILIZE_ROTATION = (1 << 2),
TRACKING_STABILIZE_SCALE = (1 << 3),
TRACKING_SHOW_STAB_TRACKS = (1 << 5)
};
/* MovieTrackingStrabilization->filter */

View File

@ -1815,6 +1815,13 @@ static void rna_def_trackingStabilization(BlenderRNA *brna)
RNA_def_property_enum_items(prop, filter_items);
RNA_def_property_ui_text(prop, "Interpolate", "Interpolation to use for sub-pixel shifts and rotations due to stabilization");
RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
/* UI display : show participating tracks */
prop = RNA_def_property(srna, "show_tracks_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_SHOW_STAB_TRACKS);
RNA_def_property_ui_text(prop, "Show Tracks", "Show UI list of tracks participating in stabilization");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
}
static void rna_def_reconstructedCamera(BlenderRNA *brna)