[Bf-blender-cvs] [b8ef725497e] master: Cemara tracking: move select all into a utility function

Campbell Barton noreply at git.blender.org
Tue Mar 5 08:40:46 CET 2019


Commit: b8ef725497e45648ac7214927294e3ab60b71bc2
Author: Campbell Barton
Date:   Tue Mar 5 18:33:09 2019 +1100
Branches: master
https://developer.blender.org/rBb8ef725497e45648ac7214927294e3ab60b71bc2

Cemara tracking: move select all into a utility function

===================================================================

M	source/blender/editors/include/ED_clip.h
M	source/blender/editors/space_clip/clip_editor.c
M	source/blender/editors/space_clip/tracking_select.c

===================================================================

diff --git a/source/blender/editors/include/ED_clip.h b/source/blender/editors/include/ED_clip.h
index eb4d979e5e8..a146bbeb0af 100644
--- a/source/blender/editors/include/ED_clip.h
+++ b/source/blender/editors/include/ED_clip.h
@@ -61,6 +61,8 @@ bool ED_space_clip_color_sample(struct SpaceClip *sc, struct ARegion *ar, int mv
 void ED_clip_update_frame(const struct Main *mainp, int cfra);
 bool ED_clip_view_selection(const struct bContext *C, struct ARegion *ar, bool fit);
 
+void ED_clip_select_all(struct SpaceClip *sc, int action, bool *r_has_selection);
+
 void ED_clip_point_undistorted_pos(struct SpaceClip *sc, const float co[2], float r_co[2]);
 void ED_clip_point_stable_pos(struct SpaceClip *sc, struct ARegion *ar, float x, float y, float *xr, float *yr);
 void ED_clip_point_stable_pos__reverse(struct SpaceClip *sc, struct ARegion *ar, const float co[2], float r_co[2]);
diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c
index 6d4fd927d76..79a159bac2e 100644
--- a/source/blender/editors/space_clip/clip_editor.c
+++ b/source/blender/editors/space_clip/clip_editor.c
@@ -58,6 +58,7 @@
 #include "ED_screen.h"
 #include "ED_clip.h"
 #include "ED_mask.h"
+#include "ED_select_utils.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -429,6 +430,99 @@ bool ED_clip_view_selection(const bContext *C, ARegion *ar, bool fit)
 	return true;
 }
 
+void ED_clip_select_all(SpaceClip *sc, int action, bool *r_has_selection)
+{
+	MovieClip *clip = ED_space_clip_get_clip(sc);
+	const int framenr = ED_space_clip_get_clip_frame_number(sc);
+	MovieTracking *tracking = &clip->tracking;
+	MovieTrackingTrack *track = NULL;   /* selected track */
+	MovieTrackingPlaneTrack *plane_track = NULL;   /* selected plane track */
+	MovieTrackingMarker *marker;
+	ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
+	ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
+	bool has_selection = false;
+
+	if (action == SEL_TOGGLE) {
+		action = SEL_SELECT;
+
+		for (track = tracksbase->first; track; track = track->next) {
+			if (TRACK_VIEW_SELECTED(sc, track)) {
+				marker = BKE_tracking_marker_get(track, framenr);
+
+				if (MARKER_VISIBLE(sc, track, marker)) {
+					action = SEL_DESELECT;
+					break;
+				}
+			}
+		}
+
+		for (plane_track = plane_tracks_base->first;
+		     plane_track;
+		     plane_track = plane_track->next)
+		{
+			if (PLANE_TRACK_VIEW_SELECTED(plane_track)) {
+				action = SEL_DESELECT;
+				break;
+			}
+		}
+	}
+
+	for (track = tracksbase->first; track; track = track->next) {
+		if ((track->flag & TRACK_HIDDEN) == 0) {
+			marker = BKE_tracking_marker_get(track, framenr);
+
+			if (MARKER_VISIBLE(sc, track, marker)) {
+				switch (action) {
+					case SEL_SELECT:
+						track->flag |= SELECT;
+						track->pat_flag |= SELECT;
+						track->search_flag |= SELECT;
+						break;
+					case SEL_DESELECT:
+						track->flag &= ~SELECT;
+						track->pat_flag &= ~SELECT;
+						track->search_flag &= ~SELECT;
+						break;
+					case SEL_INVERT:
+						track->flag ^= SELECT;
+						track->pat_flag ^= SELECT;
+						track->search_flag ^= SELECT;
+						break;
+				}
+			}
+		}
+
+		if (TRACK_VIEW_SELECTED(sc, track))
+			has_selection = true;
+	}
+
+	for (plane_track = plane_tracks_base->first;
+	     plane_track;
+	     plane_track = plane_track->next)
+	{
+		if ((plane_track->flag & PLANE_TRACK_HIDDEN) == 0) {
+			switch (action) {
+				case SEL_SELECT:
+					plane_track->flag |= SELECT;
+					break;
+				case SEL_DESELECT:
+					plane_track->flag &= ~SELECT;
+					break;
+				case SEL_INVERT:
+					plane_track->flag ^= SELECT;
+					break;
+			}
+			if (plane_track->flag & SELECT) {
+				has_selection = true;
+			}
+		}
+	}
+
+	if (r_has_selection) {
+		*r_has_selection = has_selection;
+	}
+}
+
 void ED_clip_point_undistorted_pos(SpaceClip *sc, const float co[2], float r_co[2])
 {
 	copy_v2_v2(r_co, co);
diff --git a/source/blender/editors/space_clip/tracking_select.c b/source/blender/editors/space_clip/tracking_select.c
index 920c984676f..c9d24db7ba6 100644
--- a/source/blender/editors/space_clip/tracking_select.c
+++ b/source/blender/editors/space_clip/tracking_select.c
@@ -792,90 +792,12 @@ static int select_all_exec(bContext *C, wmOperator *op)
 	SpaceClip *sc = CTX_wm_space_clip(C);
 	MovieClip *clip = ED_space_clip_get_clip(sc);
 	MovieTracking *tracking = &clip->tracking;
-	MovieTrackingTrack *track = NULL;   /* selected track */
-	MovieTrackingPlaneTrack *plane_track = NULL;   /* selected plane track */
-	MovieTrackingMarker *marker;
-	ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
-	ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
-	int action = RNA_enum_get(op->ptr, "action");
-	int framenr = ED_space_clip_get_clip_frame_number(sc);
-	bool has_selection = false;
-
-	if (action == SEL_TOGGLE) {
-		action = SEL_SELECT;
-
-		for (track = tracksbase->first; track; track = track->next) {
-			if (TRACK_VIEW_SELECTED(sc, track)) {
-				marker = BKE_tracking_marker_get(track, framenr);
-
-				if (MARKER_VISIBLE(sc, track, marker)) {
-					action = SEL_DESELECT;
-					break;
-				}
-			}
-		}
-
-		for (plane_track = plane_tracks_base->first;
-		     plane_track;
-		     plane_track = plane_track->next)
-		{
-			if (PLANE_TRACK_VIEW_SELECTED(plane_track)) {
-				action = SEL_DESELECT;
-				break;
-			}
-		}
-	}
-
-	for (track = tracksbase->first; track; track = track->next) {
-		if ((track->flag & TRACK_HIDDEN) == 0) {
-			marker = BKE_tracking_marker_get(track, framenr);
 
-			if (MARKER_VISIBLE(sc, track, marker)) {
-				switch (action) {
-					case SEL_SELECT:
-						track->flag |= SELECT;
-						track->pat_flag |= SELECT;
-						track->search_flag |= SELECT;
-						break;
-					case SEL_DESELECT:
-						track->flag &= ~SELECT;
-						track->pat_flag &= ~SELECT;
-						track->search_flag &= ~SELECT;
-						break;
-					case SEL_INVERT:
-						track->flag ^= SELECT;
-						track->pat_flag ^= SELECT;
-						track->search_flag ^= SELECT;
-						break;
-				}
-			}
-		}
+	int action = RNA_enum_get(op->ptr, "action");
 
-		if (TRACK_VIEW_SELECTED(sc, track))
-			has_selection = true;
-	}
+	bool has_selection = false;
 
-	for (plane_track = plane_tracks_base->first;
-	     plane_track;
-	     plane_track = plane_track->next)
-	{
-		if ((plane_track->flag & PLANE_TRACK_HIDDEN) == 0) {
-			switch (action) {
-				case SEL_SELECT:
-					plane_track->flag |= SELECT;
-					break;
-				case SEL_DESELECT:
-					plane_track->flag &= ~SELECT;
-					break;
-				case SEL_INVERT:
-					plane_track->flag ^= SELECT;
-					break;
-			}
-			if (plane_track->flag & SELECT) {
-				has_selection = true;
-			}
-		}
-	}
+	ED_clip_select_all(sc, action, &has_selection);
 
 	if (!has_selection)
 		sc->flag &= ~SC_LOCK_SELECTION;



More information about the Bf-blender-cvs mailing list