[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17959] branches/blender2.5/blender/source /blender/editors/space_view3d: 2.5

Ton Roosendaal ton at blender.org
Fri Dec 19 20:27:41 CET 2008


Revision: 17959
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17959
Author:   ton
Date:     2008-12-19 20:27:41 +0100 (Fri, 19 Dec 2008)

Log Message:
-----------
2.5

View3d: added zoom with padplus/minus and scrollwheel.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c	2008-12-19 19:11:02 UTC (rev 17958)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c	2008-12-19 19:27:41 UTC (rev 17959)
@@ -64,6 +64,9 @@
 #include "WM_api.h"
 #include "WM_types.h"
 
+#include "RNA_access.h"
+#include "RNA_define.h"
+
 #include "ED_screen.h"
 #include "ED_types.h"
 
@@ -89,6 +92,7 @@
 	float reverse, dist0;
 	
 	int origx, origy, oldx, oldy;
+	int origkey;
 	
 } ViewOpsData;
 
@@ -135,6 +139,7 @@
 	QUATCOPY(vod->oldquat, v3d->viewquat);
 	vod->origx= vod->oldx= event->x;
 	vod->origy= vod->oldy= event->y;
+	vod->origkey= event->type;
 	
 	calctrackballvec(&vod->ar->winrct, event->x, event->y, vod->trackvec);
 	
@@ -344,22 +349,22 @@
 
 static int viewrotate_modal(bContext *C, wmOperator *op, wmEvent *event)
 {
+	ViewOpsData *vod= op->customdata;
 
 	/* execute the events */
 	switch(event->type) {
 		case MOUSEMOVE:
-			viewrotate_apply(op->customdata, event->x, event->y, event->ctrl);
+			viewrotate_apply(vod, event->x, event->y, event->ctrl);
 			break;
 			
-		case MIDDLEMOUSE:
-			if(event->val==0) {
+		default:
+			if(event->type==vod->origkey && event->val==0) {
 				
-				MEM_freeN(op->customdata);
+				MEM_freeN(vod);
 				op->customdata= NULL;
 				
 				return OPERATOR_FINISHED;
 			}
-			break;
 	}
 	
 	return OPERATOR_RUNNING_MODAL;
@@ -400,6 +405,7 @@
 	/* api callbacks */
 	ot->invoke= viewrotate_invoke;
 	ot->modal= viewrotate_modal;
+	ot->poll= ED_operator_areaactive;
 }
 
 /* ************************ viewmove ******************************** */
@@ -431,21 +437,22 @@
 
 static int viewmove_modal(bContext *C, wmOperator *op, wmEvent *event)
 {	
+	ViewOpsData *vod= op->customdata;
+	
 	/* execute the events */
 	switch(event->type) {
 		case MOUSEMOVE:
-			viewmove_apply(op->customdata, event->x, event->y);
+			viewmove_apply(vod, event->x, event->y);
 			break;
 			
-		case MIDDLEMOUSE:
-			if(event->val==0) {
+		default:
+			if(event->type==vod->origkey && event->val==0) {
 				
-				MEM_freeN(op->customdata);
+				MEM_freeN(vod);
 				op->customdata= NULL;
 				
 				return OPERATOR_FINISHED;
 			}
-			break;
 	}
 	
 	return OPERATOR_RUNNING_MODAL;
@@ -473,6 +480,7 @@
 	/* api callbacks */
 	ot->invoke= viewmove_invoke;
 	ot->modal= viewmove_modal;
+	ot->poll= ED_operator_areaactive;
 }
 
 /* ************************ viewzoom ******************************** */
@@ -579,38 +587,74 @@
 
 static int viewzoom_modal(bContext *C, wmOperator *op, wmEvent *event)
 {	
+	ViewOpsData *vod= op->customdata;
+	
 	/* execute the events */
 	switch(event->type) {
 		case MOUSEMOVE:
-			viewzoom_apply(op->customdata, event->x, event->y);
+			viewzoom_apply(vod, event->x, event->y);
 			break;
 			
-		case MIDDLEMOUSE:
-			if(event->val==0) {
+		default:
+			if(event->type==vod->origkey && event->val==0) {
 				
-				MEM_freeN(op->customdata);
+				MEM_freeN(vod);
 				op->customdata= NULL;
 				
 				return OPERATOR_FINISHED;
 			}
-			break;
 	}
 	
 	return OPERATOR_RUNNING_MODAL;
 }
 
-static int viewzoom_invoke(bContext *C, wmOperator *op, wmEvent *event)
+static int viewzoom_exec(bContext *C, wmOperator *op)
 {
-	/* makes op->customdata */
-	viewops_data(C, op, event);
+	ScrArea *sa= CTX_wm_area(C);
+	View3D *v3d= sa->spacedata.first;
+	int delta= RNA_int_get(op->ptr, "delta");
+
+	if(delta < 0) {
+		/* this min and max is also in viewmove() */
+		if(v3d->persp==V3D_CAMOB) {
+			v3d->camzoom-= 10;
+			if(v3d->camzoom<-30) v3d->camzoom= -30;
+		}
+		else if(v3d->dist<10.0*v3d->far) v3d->dist*=1.2f;
+	}
+	else {
+		if(v3d->persp==V3D_CAMOB) {
+			v3d->camzoom+= 10;
+			if(v3d->camzoom>300) v3d->camzoom= 300;
+		}
+		else if(v3d->dist> 0.001*v3d->grid) v3d->dist*=.83333f;
+	}
 	
-	/* add temp handler */
-	WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+	ED_region_tag_redraw(CTX_wm_region(C));
 	
-	return OPERATOR_RUNNING_MODAL;
+	return OPERATOR_FINISHED;
 }
 
+static int viewzoom_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	int delta= RNA_int_get(op->ptr, "delta");
 
+	if(delta) {
+		viewzoom_exec(C, op);
+	}
+	else {
+		/* makes op->customdata */
+		viewops_data(C, op, event);
+		
+		/* add temp handler */
+		WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+		
+		return OPERATOR_RUNNING_MODAL;
+	}
+	return OPERATOR_FINISHED;
+}
+
+
 void ED_VIEW3D_OT_viewzoom(wmOperatorType *ot)
 {
 	
@@ -620,7 +664,11 @@
 	
 	/* api callbacks */
 	ot->invoke= viewzoom_invoke;
+	ot->exec= viewzoom_exec;
 	ot->modal= viewzoom_modal;
+	ot->poll= ED_operator_areaactive;
+	
+	RNA_def_property(ot->srna, "delta", PROP_INT, PROP_NONE);
 }
 
 /* ************************* below the line! *********************** */

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2008-12-19 19:11:02 UTC (rev 17958)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2008-12-19 19:27:41 UTC (rev 17959)
@@ -73,5 +73,11 @@
 	WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewrotate", MIDDLEMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewmove", MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewzoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0);
+	
+	RNA_int_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewzoom", PADPLUSKEY, KM_PRESS, 0, 0)->ptr, "delta", 1);
+	RNA_int_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewzoom", PADMINUS, KM_PRESS, 0, 0)->ptr, "delta", -1);
+	RNA_int_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewzoom", WHEELUPMOUSE, KM_ANY, 0, 0)->ptr, "delta", 1);
+	RNA_int_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewzoom", WHEELDOWNMOUSE, KM_ANY, 0, 0)->ptr, "delta", -1);
+
 }
 





More information about the Bf-blender-cvs mailing list