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); + } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs