[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47958] trunk/blender/source/blender/ editors/space_clip: Code deduplicaiton in motion tracking slide operator

Sergey Sharybin sergey.vfx at gmail.com
Fri Jun 15 16:26:31 CEST 2012


Revision: 47958
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47958
Author:   nazgul
Date:     2012-06-15 14:26:27 +0000 (Fri, 15 Jun 2012)
Log Message:
-----------
Code deduplicaiton in motion tracking slide operator

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_clip/clip_intern.h
    trunk/blender/source/blender/editors/space_clip/tracking_ops.c
    trunk/blender/source/blender/editors/space_clip/tracking_select.c

Modified: trunk/blender/source/blender/editors/space_clip/clip_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_clip/clip_intern.h	2012-06-15 14:11:23 UTC (rev 47957)
+++ trunk/blender/source/blender/editors/space_clip/clip_intern.h	2012-06-15 14:26:27 UTC (rev 47958)
@@ -131,7 +131,8 @@
 void clip_draw_sfra_efra(struct View2D *v2d, struct Scene *scene);
 
 /* tracking_ops.c */
-struct MovieTrackingTrack *tracking_marker_check_slide(struct bContext *C, struct wmEvent *event);
+struct MovieTrackingTrack *tracking_marker_check_slide(struct bContext *C, struct wmEvent *event,
+                                                       int *area_r, int *action_r, int *corner_r);
 
 void CLIP_OT_add_marker(struct wmOperatorType *ot);
 void CLIP_OT_delete_track(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/space_clip/tracking_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/tracking_ops.c	2012-06-15 14:11:23 UTC (rev 47957)
+++ trunk/blender/source/blender/editors/space_clip/tracking_ops.c	2012-06-15 14:26:27 UTC (rev 47958)
@@ -483,7 +483,7 @@
 	WM_cursor_set(win, CURSOR_STD);
 }
 
-MovieTrackingTrack *tracking_marker_check_slide(bContext *C, wmEvent *event)
+MovieTrackingTrack *tracking_marker_check_slide(bContext *C, wmEvent *event, int *area_r, int *action_r, int *corner_r)
 {
 	SpaceClip *sc = CTX_wm_space_clip(C);
 	MovieClip *clip = ED_space_clip(sc);
@@ -492,6 +492,7 @@
 	float co[2];
 	ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
 	int framenr = ED_space_clip_clip_framenr(sc);
+	int action = -1, area = 0, corner = -1;
 
 	ED_space_clip_size(sc, &width, &height);
 
@@ -507,14 +508,21 @@
 			int ok = FALSE;
 
 			if ((marker->flag & MARKER_DISABLED) == 0) {
-				if (mouse_on_offset(sc, track, marker, co, width, height))
+				if (mouse_on_offset(sc, track, marker, co, width, height)) {
+					area = TRACK_AREA_POINT;
+					action = SLIDE_ACTION_POS;
 					ok = TRUE;
+				}
 
 				if (!ok && (sc->flag & SC_SHOW_MARKER_SEARCH)) {
 					if (mouse_on_corner(sc, marker, TRACK_AREA_SEARCH, co, 1, width, height)) {
+						area = TRACK_AREA_SEARCH;
+						action = SLIDE_ACTION_OFFSET;
 						ok = TRUE;
 					}
 					else if (mouse_on_corner(sc, marker, TRACK_AREA_SEARCH, co, 0, width, height)) {
+						area = TRACK_AREA_SEARCH;
+						action = SLIDE_ACTION_SIZE;
 						ok = TRUE;
 					}
 				}
@@ -523,25 +531,42 @@
 					/* XXX: need to be real check if affine tracking is enabled, but for now not
 					 *      sure how to do this, so assume affine tracker is always enabled */
 					if (TRUE) {
-						int corner = get_mouse_pattern_corner(sc, marker, co, width, height);
+						int current_corner = get_mouse_pattern_corner(sc, marker, co, width, height);
 
-						if (corner != -1) {
+						if (current_corner != -1) {
+							area = TRACK_AREA_PAT;
+							action = SLIDE_ACTION_POS;
+							corner = current_corner;
 							ok = TRUE;
 						}
 					}
 					else {
 						if (mouse_on_corner(sc, marker, TRACK_AREA_PAT, co, 1,  width, height)) {
+							area = TRACK_AREA_PAT;
+							action = SLIDE_ACTION_OFFSET;
 							ok = TRUE;
 						}
 
 						if (!ok && mouse_on_corner(sc, marker, TRACK_AREA_PAT, co, 0, width, height)) {
+							area = TRACK_AREA_PAT;
+							action = SLIDE_ACTION_SIZE;
 							ok = TRUE;
 						}
 					}
 				}
 
-				if (ok)
+				if (ok) {
+					if (area_r)
+						*area_r = area;
+
+					if (action_r)
+						*action_r = action;
+
+					if (corner_r)
+						*corner_r = corner;
+
 					return track;
+				}
 			}
 		}
 
@@ -554,13 +579,12 @@
 static void *slide_marker_customdata(bContext *C, wmEvent *event)
 {
 	SpaceClip *sc = CTX_wm_space_clip(C);
-	MovieClip *clip = ED_space_clip(sc);
 	MovieTrackingTrack *track;
 	int width, height;
 	float co[2];
 	void *customdata = NULL;
-	ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
 	int framenr = ED_space_clip_clip_framenr(sc);
+	int area, action, corner;
 
 	ED_space_clip_size(sc, &width, &height);
 
@@ -569,59 +593,11 @@
 
 	ED_clip_mouse_pos(C, event, co);
 
-	track = tracksbase->first;
-	while (track) {
-		if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) {
-			MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
+	track = tracking_marker_check_slide(C, event, &area, &action, &corner);
+	if (track) {
+		MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
 
-			if ((marker->flag & MARKER_DISABLED) == 0) {
-				if (!customdata) {
-					if (mouse_on_offset(sc, track, marker, co, width, height))
-						customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_POINT, 0,
-						                                      SLIDE_ACTION_POS, width, height);
-				}
-
-				if (!customdata && (sc->flag & SC_SHOW_MARKER_SEARCH)) {
-					if (mouse_on_corner(sc, marker, TRACK_AREA_SEARCH, co, 1, width, height)) {
-						customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_SEARCH, 0,
-						                                      SLIDE_ACTION_OFFSET, width, height);
-					}
-					else if (mouse_on_corner(sc, marker, TRACK_AREA_SEARCH, co, 0, width, height)) {
-						customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_SEARCH, 0,
-						                                      SLIDE_ACTION_SIZE, width, height);
-					}
-				}
-
-				if (!customdata && (sc->flag & SC_SHOW_MARKER_PATTERN)) {
-					/* XXX: need to be real check if affine tracking is enabled, but for now not
-					 *      sure how to do this, so assume affine tracker is always enabled */
-					if (TRUE) {
-						int corner = get_mouse_pattern_corner(sc, marker, co, width, height);
-
-						if (corner != -1) {
-							customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_PAT, corner,
-							                                      SLIDE_ACTION_POS, width, height);
-						}
-					}
-					else {
-						if (mouse_on_corner(sc, marker, TRACK_AREA_PAT, co, 1,  width, height)) {
-							customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_PAT, 0,
-							                                      SLIDE_ACTION_OFFSET, width, height);
-						}
-
-						if (!customdata && mouse_on_corner(sc, marker, TRACK_AREA_PAT, co, 0, width, height)) {
-							customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_PAT, 0,
-							                                      SLIDE_ACTION_SIZE, width, height);
-						}
-					}
-				}
-
-				if (customdata)
-					break;
-			}
-		}
-
-		track = track->next;
+		customdata = create_slide_marker_data(sc, track, marker, event, area, corner, action, width, height);
 	}
 
 	return customdata;

Modified: trunk/blender/source/blender/editors/space_clip/tracking_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/tracking_select.c	2012-06-15 14:11:23 UTC (rev 47957)
+++ trunk/blender/source/blender/editors/space_clip/tracking_select.c	2012-06-15 14:26:27 UTC (rev 47958)
@@ -284,7 +284,7 @@
 	int extend = RNA_boolean_get(op->ptr, "extend");
 
 	if (!extend) {
-		MovieTrackingTrack *track = tracking_marker_check_slide(C, event);
+		MovieTrackingTrack *track = tracking_marker_check_slide(C, event, NULL, NULL, NULL);
 
 		if (track) {
 			SpaceClip *sc = CTX_wm_space_clip(C);




More information about the Bf-blender-cvs mailing list