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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-03-05 10:33:09 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-03-05 10:39:02 +0300
commitb8ef725497e45648ac7214927294e3ab60b71bc2 (patch)
tree27ec6c9d7739ad55ff607dc53a82a8d6d33dc82a /source
parente83854e759f61ed82c9c0ceedadf55c9a670245a (diff)
Cemara tracking: move select all into a utility function
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/include/ED_clip.h2
-rw-r--r--source/blender/editors/space_clip/clip_editor.c94
-rw-r--r--source/blender/editors/space_clip/tracking_select.c84
3 files changed, 99 insertions, 81 deletions
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;