Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-05-22 10:06:22 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-05-22 10:06:22 +0400
commit4c0e50011e77e05628be805932eb213e5bb4f209 (patch)
tree584f80df33c43be221777f42decc504a8e3fa586 /source/blender/editors/space_clip
parentaa0caa448eb192b61800130b86c86794f43832e7 (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.h1
-rw-r--r--source/blender/editors/space_clip/space_clip.c1
-rw-r--r--source/blender/editors/space_clip/tracking_ops.c46
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))