diff options
author | Ton Roosendaal <ton@blender.org> | 2009-02-07 17:03:34 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2009-02-07 17:03:34 +0300 |
commit | 875a08884ba670387299a0baef19ace90170d271 (patch) | |
tree | 9eb93b650166385b82ab60965abf8416d5baf23b /source/blender/windowmanager | |
parent | d21a4780dabb8827eeed2a82079aa468594763c6 (diff) |
2.5
- Node editor: link cut back, now under ALT+LMB, to prevent
accidents. Note it now nicely intersects the real curved
noodles with a line you draw!
- To make above work, replaced ogl curve draw with own bezier
code.
- Added new WM standard operator callback for lines-gesture,
the Lasso gesture now draws a closed line.
- Both callbacks have optional property 'cursor' to make it
give modal info. For future also linestyle or color can be
defined.
- Changed 'pin' icon in Image header to something that looks
less scary... but there's no pin icon yet?
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_types.h | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_gesture.c | 8 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operators.c | 25 |
4 files changed, 35 insertions, 2 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index e30153221a2..f0f8996cca9 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -148,6 +148,8 @@ int WM_border_select_invoke (struct bContext *C, struct wmOperator *op, struct int WM_border_select_modal (struct bContext *C, struct wmOperator *op, struct wmEvent *event); int WM_gesture_circle_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event); int WM_gesture_circle_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event); +int WM_gesture_lines_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event); +int WM_gesture_lines_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event); 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); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 0f4466636b5..75b27505995 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -221,7 +221,7 @@ typedef struct wmNotifier { /* wmGesture->type */ #define WM_GESTURE_TWEAK 0 -#define WM_GESTURE_LINE 1 +#define WM_GESTURE_LINES 1 #define WM_GESTURE_RECT 2 #define WM_GESTURE_CROSS_RECT 3 #define WM_GESTURE_LASSO 4 diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index 2f4ded00de5..c899d1d290e 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -83,7 +83,7 @@ wmGesture *WM_gesture_new(bContext *C, wmEvent *event, int type) rect->ymax= event->y - sy; } } - else if (type==WM_GESTURE_LASSO) { + else if (ELEM(type, WM_GESTURE_LINES, WM_GESTURE_LASSO)) { short *lasso; gesture->customdata= lasso= MEM_callocN(2*sizeof(short)*WM_LASSO_MAX_POINTS, "lasso points"); lasso[0] = event->x - sx; @@ -201,6 +201,8 @@ static void wm_gesture_draw_lasso(wmWindow *win, wmGesture *gt) glBegin(GL_LINE_STRIP); for(i=0; i<gt->points; i++, lasso+=2) glVertex2sv(lasso); + if(gt->type==WM_GESTURE_LASSO) + glVertex2sv((short *)gt->customdata); glEnd(); glColor3ub(255, 255, 255); @@ -209,6 +211,8 @@ static void wm_gesture_draw_lasso(wmWindow *win, wmGesture *gt) lasso= (short *)gt->customdata; for(i=0; i<gt->points; i++, lasso+=2) glVertex2sv(lasso); + if(gt->type==WM_GESTURE_LASSO) + glVertex2sv((short *)gt->customdata); glEnd(); glDisable(GL_LINE_STIPPLE); @@ -253,6 +257,8 @@ void wm_gesture_draw(wmWindow *win) else wm_gesture_draw_cross(win, gt); } + else if(gt->type==WM_GESTURE_LINES) + wm_gesture_draw_lasso(win, gt); else if(gt->type==WM_GESTURE_LASSO) wm_gesture_draw_lasso(win, gt); } diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index e060169d702..b9bdabcdbfd 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -557,6 +557,8 @@ static void wm_gesture_end(bContext *C, wmOperator *op) ED_area_tag_redraw(CTX_wm_area(C)); + if( RNA_struct_find_property(op->ptr, "cursor") ) + WM_cursor_restore(CTX_wm_window(C)); } int WM_border_select_invoke(bContext *C, wmOperator *op, wmEvent *event) @@ -808,6 +810,24 @@ int WM_gesture_lasso_invoke(bContext *C, wmOperator *op, wmEvent *event) wm_gesture_tag_redraw(C); + if( RNA_struct_find_property(op->ptr, "cursor") ) + WM_cursor_modal(CTX_wm_window(C), RNA_int_get(op->ptr, "cursor")); + + return OPERATOR_RUNNING_MODAL; +} + +int WM_gesture_lines_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + op->customdata= WM_gesture_new(C, event, WM_GESTURE_LINES); + + /* add modal handler */ + WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op); + + wm_gesture_tag_redraw(C); + + if( RNA_struct_find_property(op->ptr, "cursor") ) + WM_cursor_modal(CTX_wm_window(C), RNA_int_get(op->ptr, "cursor")); + return OPERATOR_RUNNING_MODAL; } @@ -875,6 +895,11 @@ int WM_gesture_lasso_modal(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_RUNNING_MODAL; } +int WM_gesture_lines_modal(bContext *C, wmOperator *op, wmEvent *event) +{ + return WM_gesture_lasso_modal(C, op, event); +} + #if 0 /* template to copy from */ |