[Bf-blender-cvs] [247ecd5] wiggly-widgets: Final fix for a completely working new manipulator!

Julian Eisel noreply at git.blender.org
Sat Aug 22 23:12:08 CEST 2015


Commit: 247ecd5ab09fb71bdd4c07f1fc28de1d302d7bf0
Author: Julian Eisel
Date:   Sat Aug 22 23:07:56 2015 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB247ecd5ab09fb71bdd4c07f1fc28de1d302d7bf0

Final fix for a completely working new manipulator!

(hopefully)

Fixes crash when leaving window bounds with cursor.

Seems that new manipulator is now completely working and stable. Next step is to add some new manipulator features :)

===================================================================

M	source/blender/editors/transform/manipulator_widget.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_widgets.c
M	source/blender/windowmanager/wm_event_system.h

===================================================================

diff --git a/source/blender/editors/transform/manipulator_widget.c b/source/blender/editors/transform/manipulator_widget.c
index d10a91c..ac0fac5 100644
--- a/source/blender/editors/transform/manipulator_widget.c
+++ b/source/blender/editors/transform/manipulator_widget.c
@@ -789,10 +789,10 @@ static int calc_manipulator_stats(const bContext *C)
 			ob = NULL;
 
 		for (base = scene->base.first; base; base = base->next) {
-
 			if (TESTBASELIB(v3d, base)) {
 				if (ob == NULL)
 					ob = base->object;
+
 				/* updated object matrix after transform */
 				add_v3_v3v3(loc, base->object->loc, base->object->dloc);
 				calc_tw_center(scene, loc);
@@ -891,6 +891,7 @@ static void manipulator_prepare_mat(Scene *scene, View3D *v3d, RegionView3D *rv3
 			Object *ob = OBACT;
 			if ((v3d->around == V3D_ACTIVE) && !scene->obedit && !(ob->mode & OB_MODE_POSE)) {
 				float loc[3];
+
 				/* updated object matrix after transform */
 				add_v3_v3v3(loc, ob->loc, ob->dloc);
 				copy_v3_v3(rv3d->twmat[3], loc);
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index b884c00..6334dc7 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2122,14 +2122,11 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
 				}
 			}
 			else {
-				/* context region may be changed in wm_handler_operator_call */
-				ARegion *ar = CTX_wm_region(C);
-
 				/* modal, swallows all */
 				action |= wm_handler_operator_call(C, handlers, handler, event, NULL);
 
 				/* update widgets during modal handlers */
-				wm_widget_handler_modal_update(C, event, handler, ar);
+				wm_widget_handler_modal_update(C, event, handler);
 			}
 
 			if (action & WM_HANDLER_BREAK) {
diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c
index dc0f17d..7d4d134 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -871,11 +871,11 @@ void wm_widgetmap_handler_context(bContext *C, wmEventHandler *handler)
 	}
 }
 
-void wm_widget_handler_modal_update(bContext *C, wmEvent *event, wmEventHandler *handler, ARegion *ar)
+void wm_widget_handler_modal_update(bContext *C, wmEvent *event, wmEventHandler *handler)
 {
 	wmWidgetMap *wmap;
 
-	for (wmap = ar->widgetmaps.first; wmap; wmap = wmap->next) {
+	for (wmap = handler->op_region->widgetmaps.first; wmap; wmap = wmap->next) {
 		wmWidget *widget = wm_widgetmap_get_active_widget(wmap);
 		ScrArea *area = CTX_wm_area(C);
 		ARegion *region = CTX_wm_region(C);
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index 8c9d3aa..46ebc15 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -101,7 +101,7 @@ void        wm_drags_check_ops(bContext *C, wmEvent *event);
 void        wm_drags_draw(bContext *C, wmWindow *win, rcti *rect);
 
 /* wm_widgets.c */
-void wm_widget_handler_modal_update(bContext *C, wmEvent *event, wmEventHandler *handler, struct ARegion *ar);
+void wm_widget_handler_modal_update(bContext *C, wmEvent *event, wmEventHandler *handler);
 void wm_widgetmap_handler_context(bContext *C, wmEventHandler *handler);
 
 struct wmWidget *wm_widget_find_highlighted_3D(struct wmWidgetMap *wmap, struct bContext *C, const struct wmEvent *event, unsigned char *part);




More information about the Bf-blender-cvs mailing list