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:
authorTon Roosendaal <ton@blender.org>2009-02-07 17:03:34 +0300
committerTon Roosendaal <ton@blender.org>2009-02-07 17:03:34 +0300
commit875a08884ba670387299a0baef19ace90170d271 (patch)
tree9eb93b650166385b82ab60965abf8416d5baf23b /source/blender/windowmanager
parentd21a4780dabb8827eeed2a82079aa468594763c6 (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.h2
-rw-r--r--source/blender/windowmanager/WM_types.h2
-rw-r--r--source/blender/windowmanager/intern/wm_gesture.c8
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c25
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 */