diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-05-22 10:06:22 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-05-22 10:06:22 +0400 |
commit | 4c0e50011e77e05628be805932eb213e5bb4f209 (patch) | |
tree | 584f80df33c43be221777f42decc504a8e3fa586 /source/blender/editors/space_clip | |
parent | aa0caa448eb192b61800130b86c86794f43832e7 (diff) |
Fix #35461: Marker gets initialized to arbitrary position
Use center of currently visible frame part instead of
center of the whole frame for position of marker which
is adding from toolbox.
Used separate operator for this to keep operators more
atomic and not confuse with lots of conflicting properties.
Diffstat (limited to 'source/blender/editors/space_clip')
-rw-r--r-- | source/blender/editors/space_clip/clip_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/space_clip/space_clip.c | 1 | ||||
-rw-r--r-- | source/blender/editors/space_clip/tracking_ops.c | 46 |
3 files changed, 48 insertions, 0 deletions
diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_intern.h index e0ecdd2ba54..f1851ef25a7 100644 --- a/source/blender/editors/space_clip/clip_intern.h +++ b/source/blender/editors/space_clip/clip_intern.h @@ -145,6 +145,7 @@ struct MovieTrackingTrack *tracking_marker_check_slide(struct bContext *C, const int *area_r, int *action_r, int *corner_r); void CLIP_OT_add_marker(struct wmOperatorType *ot); +void CLIP_OT_add_marker_at_center(struct wmOperatorType *ot); void CLIP_OT_delete_track(struct wmOperatorType *ot); void CLIP_OT_delete_marker(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index d4d2a1af380..fcb33474fa2 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -465,6 +465,7 @@ static void clip_operatortypes(void) /* markers */ WM_operatortype_append(CLIP_OT_add_marker); + WM_operatortype_append(CLIP_OT_add_marker_at_center); WM_operatortype_append(CLIP_OT_slide_marker); WM_operatortype_append(CLIP_OT_delete_track); WM_operatortype_append(CLIP_OT_delete_marker); diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index 46bdc7ca173..59e5c665f73 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -159,6 +159,52 @@ void CLIP_OT_add_marker(wmOperatorType *ot) "Location", "Location of marker on frame", -1.0f, 1.0f); } +/********************** add marker operator *********************/ + +static int add_marker_at_center_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event)) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip_get_clip(sc); + ARegion *ar = CTX_wm_region(C); + float pos[2]; + int width, height; + + ED_space_clip_get_size(sc, &width, &height); + + if (!width || !height) + return OPERATOR_CANCELLED; + + ED_clip_point_stable_pos(sc, ar, + BLI_rcti_size_x(&ar->winrct) / 2.0f, + BLI_rcti_size_y(&ar->winrct) / 2.0f, + &pos[0], &pos[1]); + + add_marker(C, pos[0], pos[1]); + + /* reset offset from locked position, so frame jumping wouldn't be so confusing */ + sc->xlockof = 0; + sc->ylockof = 0; + + WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip); + + return OPERATOR_FINISHED; +} + +void CLIP_OT_add_marker_at_center(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Add Marker at Center"; + ot->idname = "CLIP_OT_add_marker_at_center"; + ot->description = "Place new marker at the center of visible frame"; + + /* api callbacks */ + ot->invoke = add_marker_at_center_invoke; + ot->poll = ED_space_clip_tracking_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + /********************** delete track operator *********************/ static int delete_track_exec(bContext *C, wmOperator *UNUSED(op)) |