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:
Diffstat (limited to 'source/blender/editors/space_clip')
-rw-r--r--source/blender/editors/space_clip/clip_draw.c14
-rw-r--r--source/blender/editors/space_clip/clip_intern.h3
-rw-r--r--source/blender/editors/space_clip/clip_ops.c3
-rw-r--r--source/blender/editors/space_clip/space_clip.c4
-rw-r--r--source/blender/editors/space_clip/tracking_ops.c101
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;
+}