diff options
Diffstat (limited to 'source/blender/editors/space_clip')
-rw-r--r-- | source/blender/editors/space_clip/clip_draw.c | 14 | ||||
-rw-r--r-- | source/blender/editors/space_clip/clip_intern.h | 3 | ||||
-rw-r--r-- | source/blender/editors/space_clip/clip_ops.c | 3 | ||||
-rw-r--r-- | source/blender/editors/space_clip/space_clip.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_clip/tracking_ops.c | 101 |
5 files changed, 109 insertions, 16 deletions
diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index ca2646e9967..1593ecd7cb8 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -76,19 +76,19 @@ void clip_draw_curfra_label(SpaceClip *sc, float x, float y) uiStyle *style= UI_GetStyle(); int fontid= style->widget.uifont_id; char str[32]; - float fontsize, fontwidth; + float font_dims[2] = {0.0f, 0.0f}; /* frame number */ BLF_size(fontid, 11.0f, U.dpi); BLI_snprintf(str, sizeof(str), "%d", sc->user.framenr); - fontsize= BLF_height(fontid, str); - fontwidth= BLF_width(fontid, str); - glRecti(x, y, x+fontwidth+6, y+fontsize+4); + BLF_width_and_height(fontid, str, &font_dims[0], &font_dims[1]); + + glRecti(x, y, x + font_dims[0] + 6.0f, y + font_dims[1] + 4.0f); UI_ThemeColor(TH_TEXT); BLF_position(fontid, x+2.0f, y+2.0f, 0.0f); - BLF_draw(fontid, str, strlen(str)); + BLF_draw(fontid, str, sizeof(str)); } static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Scene *scene) @@ -805,13 +805,13 @@ static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, MovieTra BLI_snprintf(str, sizeof(str), "%s", track->name); BLF_position(fontid, pos[0], pos[1], 0.0f); - BLF_draw(fontid, str, strlen(str)); + BLF_draw(fontid, str, sizeof(str)); pos[1]-= fontsize; if(track->flag&TRACK_HAS_BUNDLE) { BLI_snprintf(str, sizeof(str), "Average error: %.3f", track->error); BLF_position(fontid, pos[0], pos[1], 0.0f); - BLF_draw(fontid, str, strlen(str)); + BLF_draw(fontid, str, sizeof(str)); pos[1]-= fontsize; } diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_intern.h index 64881499a31..3f7456e90dc 100644 --- a/source/blender/editors/space_clip/clip_intern.h +++ b/source/blender/editors/space_clip/clip_intern.h @@ -145,4 +145,7 @@ void CLIP_OT_clean_tracks(struct wmOperatorType *ot); void CLIP_OT_tracking_object_new(struct wmOperatorType *ot); void CLIP_OT_tracking_object_remove(struct wmOperatorType *ot); +void CLIP_OT_copy_tracks(struct wmOperatorType *ot); +void CLIP_OT_paste_tracks(struct wmOperatorType *ot); + #endif /* ED_CLIP_INTERN_H */ diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c index fe0b58ddda9..c7d09c2edfc 100644 --- a/source/blender/editors/space_clip/clip_ops.c +++ b/source/blender/editors/space_clip/clip_ops.c @@ -220,14 +220,11 @@ void CLIP_OT_open(wmOperatorType *ot) static int reload_exec(bContext *C, wmOperator *UNUSED(op)) { - SpaceClip *sc= CTX_wm_space_clip(C); MovieClip *clip= CTX_data_edit_movieclip(C); if(!clip) return OPERATOR_CANCELLED; - sc->scopes.ok= 0; - BKE_movieclip_reload(clip); WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, clip); diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index 5291121571c..82da9b3b956 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -377,6 +377,10 @@ static void clip_operatortypes(void) /* object tracking */ WM_operatortype_append(CLIP_OT_tracking_object_new); WM_operatortype_append(CLIP_OT_tracking_object_remove); + + /* clipboard */ + WM_operatortype_append(CLIP_OT_copy_tracks); + WM_operatortype_append(CLIP_OT_paste_tracks); } static void clip_keymap(struct wmKeyConfig *keyconf) diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index d6940d14dbf..b67fac69745 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -1220,21 +1220,39 @@ static int track_count_markers(SpaceClip *sc, MovieClip *clip) return tot; } +static void clear_invisible_track_selection(SpaceClip *sc, MovieClip *clip) +{ + ListBase *tracksbase= BKE_tracking_get_tracks(&clip->tracking); + int hidden = 0; + + if ((sc->flag&SC_SHOW_MARKER_PATTERN)==0) + hidden |= TRACK_AREA_PAT; + + if ((sc->flag&SC_SHOW_MARKER_SEARCH)==0) + hidden |= TRACK_AREA_SEARCH; + + if (hidden) { + MovieTrackingTrack *track = tracksbase->first; + + while(track) { + BKE_tracking_track_flag(track, hidden, SELECT, 1); + + track = track->next; + } + } +} + static void track_init_markers(SpaceClip *sc, MovieClip *clip, int *frames_limit_r) { ListBase *tracksbase= BKE_tracking_get_tracks(&clip->tracking); MovieTrackingTrack *track; - int framenr= sc->user.framenr, hidden= 0; + int framenr= sc->user.framenr; int frames_limit= 0; - if((sc->flag&SC_SHOW_MARKER_PATTERN)==0) hidden|= TRACK_AREA_PAT; - if((sc->flag&SC_SHOW_MARKER_SEARCH)==0) hidden|= TRACK_AREA_SEARCH; + clear_invisible_track_selection(sc, clip); track= tracksbase->first; while(track) { - if(hidden) - BKE_tracking_track_flag(track, hidden, SELECT, 1); - if(TRACK_SELECTED(track)) { if((track->flag&TRACK_HIDDEN)==0 && (track->flag&TRACK_LOCKED)==0) { BKE_tracking_ensure_marker(track, framenr); @@ -3504,3 +3522,74 @@ void CLIP_OT_tracking_object_remove(wmOperatorType *ot) /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } + +/********************** copy tracks to clipboard operator *********************/ + +static int copy_tracks_exec(bContext *C, wmOperator *UNUSED(op)) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking = &clip->tracking; + MovieTrackingObject *object = BKE_tracking_active_object(tracking); + + clear_invisible_track_selection(sc, clip); + + BKE_tracking_clipboard_copy_tracks(tracking, object); + + return OPERATOR_FINISHED; +} + +void CLIP_OT_copy_tracks(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Copy Tracks"; + ot->description = "Copy selected tracks to clipboard"; + ot->idname = "CLIP_OT_copy_tracks"; + + /* api callbacks */ + ot->exec = copy_tracks_exec; + ot->poll = ED_space_clip_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER; +} + +/********************** paste tracks from clipboard operator *********************/ + +static int paste_tracks_poll(bContext *C) +{ + if (ED_space_clip_poll(C)) { + return BKE_tracking_clipboard_has_tracks(); + } + + return 0; +} + +static int paste_tracks_exec(bContext *C, wmOperator *UNUSED(op)) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking = &clip->tracking; + MovieTrackingObject *object = BKE_tracking_active_object(tracking); + + BKE_tracking_clipboard_paste_tracks(tracking, object); + + WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, clip); + + return OPERATOR_FINISHED; +} + +void CLIP_OT_paste_tracks(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Paste Tracks"; + ot->description = "Paste tracks from clipboard"; + ot->idname = "CLIP_OT_paste_tracks"; + + /* api callbacks */ + ot->exec = paste_tracks_exec; + ot->poll = paste_tracks_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} |