diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-05-14 16:41:56 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-05-14 16:41:56 +0400 |
commit | 8b687f6c36d66c2afed5ed129c71c225439dec57 (patch) | |
tree | aca533ca56b583c7f0ebc930cd4f4d1b8b52ebba /source | |
parent | be5b447100710b8b81ed6c683cfc5ca34b866d1b (diff) |
code cleanup: add WM_gesture_lasso_path_to_array, move mouse path to array conversion there.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/space_clip/tracking_ops.c | 27 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_select.c | 22 | ||||
-rw-r--r-- | source/blender/editors/uvedit/uvedit_ops.c | 29 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 1 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operators.c | 38 |
5 files changed, 62 insertions, 55 deletions
diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index 14fdadd65c7..aaa4b014451 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -945,7 +945,7 @@ void CLIP_OT_select_border(wmOperatorType *ot) } -static int do_lasso_select_mar(bContext *C, int mcords[][2], short moves, short select) +static int do_lasso_select_marker(bContext *C, int mcords[][2], short moves, short select) { ARegion *ar = CTX_wm_region(C); SpaceClip *sc = CTX_wm_space_clip(C); @@ -963,8 +963,9 @@ static int do_lasso_select_mar(bContext *C, int mcords[][2], short moves, short track = tracksbase->first; while (track) { if ((track->flag & TRACK_HIDDEN) == 0) { + MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); + if (MARKER_VISIBLE(sc, track, marker)) { - MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); float screen_co[2]; /* tracker in screen coords */ @@ -994,26 +995,16 @@ static int do_lasso_select_mar(bContext *C, int mcords[][2], short moves, short static int clip_lasso_select_exec(bContext *C, wmOperator *op) { - int i = 0; - int mcords[1024][2]; - - RNA_BEGIN (op->ptr, itemptr, "path") - { - float loc[2]; + int mcords_tot; + int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot); - RNA_float_get_array(&itemptr, "loc", loc); - mcords[i][0] = (int)loc[0]; - mcords[i][1] = (int)loc[1]; - i++; - if (i >= 1024) break; - } - RNA_END; - - if (i > 1) { + if (mcords) { short select; select = !RNA_boolean_get(op->ptr, "deselect"); - do_lasso_select_movieclip(C, mcords, i, select); + do_lasso_select_marker(C, mcords, mcords_tot, select); + + MEM_freeN(mcords); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index d7b03447d5b..583736716c6 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -827,22 +827,10 @@ static void view3d_lasso_select(bContext *C, ViewContext *vc, int mcords[][2], s static int view3d_lasso_select_exec(bContext *C, wmOperator *op) { ViewContext vc; - int i = 0; - int mcords[1024][2]; - - RNA_BEGIN (op->ptr, itemptr, "path") - { - float loc[2]; - - RNA_float_get_array(&itemptr, "loc", loc); - mcords[i][0] = (int)loc[0]; - mcords[i][1] = (int)loc[1]; - i++; - if (i >= 1024) break; - } - RNA_END; + int mcords_tot; + int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot); - if (i > 1) { + if (mcords) { short extend, select; view3d_operator_needs_opengl(C); @@ -851,8 +839,10 @@ static int view3d_lasso_select_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); select = !RNA_boolean_get(op->ptr, "deselect"); - view3d_lasso_select(C, &vc, mcords, i, extend, select); + view3d_lasso_select(C, &vc, mcords, mcords_tot, extend, select); + MEM_freeN(mcords); + return OPERATOR_FINISHED; } return OPERATOR_PASS_THROUGH; diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 595d1905e16..a4227d92e27 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -2709,34 +2709,21 @@ static int do_lasso_select_mesh_uv(bContext *C, int mcords[][2], short moves, sh static int uv_lasso_select_exec(bContext *C, wmOperator *op) { - int i = 0; - int mcords[1024][2]; + int mcords_tot; + int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot); - RNA_BEGIN (op->ptr, itemptr, "path") - { - float loc[2]; - - RNA_float_get_array(&itemptr, "loc", loc); - mcords[i][0] = (int)loc[0]; - mcords[i][1] = (int)loc[1]; - i++; - if (i >= 1024) break; - } - RNA_END; - - if (i > 1) { + if (mcords) { short select; + short change; select = !RNA_boolean_get(op->ptr, "deselect"); + change = do_lasso_select_mesh_uv(C, mcords, mcords_tot, select); - if (do_lasso_select_mesh_uv(C, mcords, i, select)) { - return OPERATOR_FINISHED; - } - else { - return OPERATOR_CANCELLED; - } + MEM_freeN(mcords); + return change ? OPERATOR_FINISHED : OPERATOR_CANCELLED; } + return OPERATOR_PASS_THROUGH; } diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index f3872cb9594..3bbd5583aa5 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -259,6 +259,7 @@ int WM_gesture_lines_cancel(struct bContext *C, struct wmOperator *op); int WM_gesture_lasso_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event); int WM_gesture_lasso_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event); int WM_gesture_lasso_cancel(struct bContext *C, struct wmOperator *op); +int (*WM_gesture_lasso_path_to_array(struct bContext *C, struct wmOperator *op, int *mcords_tot))[2]; int WM_gesture_straightline_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event); int WM_gesture_straightline_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event); int WM_gesture_straightline_cancel(struct bContext *C, struct wmOperator *op); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 27c4a38c131..c18625c0168 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -2789,6 +2789,44 @@ int WM_gesture_lines_cancel(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } +/** + * helper function, we may want to add options for conversion to view space + * + * caller must free. + */ +int (*WM_gesture_lasso_path_to_array(bContext *UNUSED(C), wmOperator *op, int *mcords_tot))[2] +{ + PropertyRNA *prop = RNA_struct_find_property(op->ptr, "path"); + int (*mcords)[2] = NULL; + BLI_assert(prop != NULL); + + if (prop) { + const int len = RNA_property_collection_length(op->ptr, prop); + + if (len) { + int i = 0; + mcords = MEM_mallocN(sizeof(int) * 2 * len, __func__); + + RNA_PROP_BEGIN(op->ptr, itemptr, prop) + { + float loc[2]; + + RNA_float_get_array(&itemptr, "loc", loc); + mcords[i][0] = (int)loc[0]; + mcords[i][1] = (int)loc[1]; + i++; + } + RNA_PROP_END; + } + *mcords_tot = len; + } + else { + *mcords_tot = 0; + } + + return mcords; +} + #if 0 /* template to copy from */ |