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:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-03-04 23:34:01 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-03-04 23:34:01 +0400
commitf79232cf3459c64d3024fbfb374770aca91865d0 (patch)
treef659dc7ecc5b7411025834c5cbb76d634dcb2701 /source/blender/editors/space_clip
parenta0ab2eefb9c99140ebb3daad3be2303caea64b96 (diff)
Movie clip editor: implemented border select operator for curves view
Diffstat (limited to 'source/blender/editors/space_clip')
-rw-r--r--source/blender/editors/space_clip/clip_graph_ops.c87
-rw-r--r--source/blender/editors/space_clip/clip_intern.h1
-rw-r--r--source/blender/editors/space_clip/space_clip.c3
3 files changed, 91 insertions, 0 deletions
diff --git a/source/blender/editors/space_clip/clip_graph_ops.c b/source/blender/editors/space_clip/clip_graph_ops.c
index f902422ab43..581b8787edb 100644
--- a/source/blender/editors/space_clip/clip_graph_ops.c
+++ b/source/blender/editors/space_clip/clip_graph_ops.c
@@ -37,6 +37,7 @@
#include "BLI_utildefines.h"
#include "BLI_math.h"
#include "BLI_listbase.h"
+#include "BLI_rect.h"
#include "BKE_context.h"
#include "BKE_movieclip.h"
@@ -304,6 +305,92 @@ void CLIP_OT_graph_select(wmOperatorType *ot)
"Extend", "Extend selection rather than clearing the existing selection");
}
+/********************** border select operator *********************/
+
+typedef struct BorderSelectuserData {
+ rctf rect;
+ int change, mode, extend;
+} BorderSelectuserData;
+
+static void border_select_cb(void *userdata, MovieTrackingTrack *UNUSED(track),
+ MovieTrackingMarker *marker, int coord, float val)
+{
+ BorderSelectuserData *data = (BorderSelectuserData *) userdata;
+
+ if (BLI_in_rctf(&data->rect, marker->framenr, val)) {
+ int flag = 0;
+
+ if (coord == 0)
+ flag = MARKER_GRAPH_SEL_X;
+ else
+ flag = MARKER_GRAPH_SEL_Y;
+
+ if (data->mode == GESTURE_MODAL_SELECT)
+ marker->flag |= flag;
+ else
+ marker->flag &= ~flag;
+
+ data->change = TRUE;
+ }
+ else if (!data->extend) {
+ marker->flag&= ~(MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y);
+ }
+}
+
+static int border_select_graph_exec(bContext *C, wmOperator *op)
+{
+ SpaceClip *sc = CTX_wm_space_clip(C);
+ ARegion *ar = CTX_wm_region(C);
+ MovieClip *clip = ED_space_clip(sc);
+ MovieTracking *tracking= &clip->tracking;
+ MovieTrackingTrack *act_track= BKE_tracking_active_track(tracking);
+ BorderSelectuserData userdata;
+ rcti rect;
+
+ /* get rectangle from operator */
+ rect.xmin = RNA_int_get(op->ptr, "xmin");
+ rect.ymin = RNA_int_get(op->ptr, "ymin");
+ rect.xmax = RNA_int_get(op->ptr, "xmax");
+ rect.ymax = RNA_int_get(op->ptr, "ymax");
+
+ UI_view2d_region_to_view(&ar->v2d, rect.xmin, rect.ymin, &userdata.rect.xmin, &userdata.rect.ymin);
+ UI_view2d_region_to_view(&ar->v2d, rect.xmax, rect.ymax, &userdata.rect.xmax, &userdata.rect.ymax);
+
+ userdata.change = FALSE;
+ userdata.mode = RNA_int_get(op->ptr, "gesture_mode");
+ userdata.extend = RNA_boolean_get(op->ptr, "extend");
+
+ clip_graph_tracking_values_iterate_track(sc, act_track, &userdata, border_select_cb, NULL, NULL);
+
+ if (userdata.change) {
+ WM_event_add_notifier(C, NC_GEOM|ND_SELECT, NULL);
+
+ return OPERATOR_FINISHED;
+ }
+
+ return OPERATOR_CANCELLED;
+}
+
+void CLIP_OT_graph_select_border(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Border Select";
+ ot->description = "Select curve points using border selection";
+ ot->idname = "CLIP_OT_graph_select_border";
+
+ /* api callbacks */
+ ot->invoke = WM_border_select_invoke;
+ ot->exec = border_select_graph_exec;
+ ot->modal = WM_border_select_modal;
+ ot->poll = ED_space_clip_graph_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
+
+ /* properties */
+ WM_operator_properties_gesture_border(ot, TRUE);
+}
+
/******************** delete curve operator ********************/
static int delete_curve_exec(bContext *C, wmOperator *UNUSED(op))
diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_intern.h
index c0b7137b5d8..d9457368c89 100644
--- a/source/blender/editors/space_clip/clip_intern.h
+++ b/source/blender/editors/space_clip/clip_intern.h
@@ -58,6 +58,7 @@ void clip_draw_graph(struct SpaceClip *sc, struct ARegion *ar, struct Scene *sce
void ED_clip_graph_center_current_frame(struct Scene *scene, struct ARegion *ar);
void CLIP_OT_graph_select(struct wmOperatorType *ot);
+void CLIP_OT_graph_select_border(struct wmOperatorType *ot);
void CLIP_OT_graph_delete_curve(struct wmOperatorType *ot);
void CLIP_OT_graph_delete_knot(struct wmOperatorType *ot);
void CLIP_OT_graph_view_all(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c
index 00b997ba190..43890405ac3 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -370,6 +370,7 @@ static void clip_operatortypes(void)
/* graph editing */
WM_operatortype_append(CLIP_OT_graph_select);
+ WM_operatortype_append(CLIP_OT_graph_select_border);
WM_operatortype_append(CLIP_OT_graph_delete_curve);
WM_operatortype_append(CLIP_OT_graph_delete_knot);
WM_operatortype_append(CLIP_OT_graph_view_all);
@@ -553,6 +554,8 @@ static void clip_keymap(struct wmKeyConfig *keyconf)
kmi = WM_keymap_add_item(keymap, "CLIP_OT_graph_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "extend", TRUE);
+ WM_keymap_add_item(keymap, "CLIP_OT_graph_select_border", BKEY, KM_PRESS, 0, 0);
+
/* delete */
WM_keymap_add_item(keymap, "CLIP_OT_graph_delete_curve", DELKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CLIP_OT_graph_delete_curve", XKEY, KM_PRESS, 0, 0);