[Bf-blender-cvs] [f92bb64] master: Fix T37843: area split widget missing in python console editor.

Brecht Van Lommel noreply at git.blender.org
Wed Dec 18 12:04:13 CET 2013


Commit: f92bb6450571d6ac9ed31ccbd9d4d73a2c39b12e
Author: Brecht Van Lommel
Date:   Wed Dec 18 12:02:31 2013 +0100
http://developer.blender.org/rBf92bb6450571d6ac9ed31ccbd9d4d73a2c39b12e

Fix T37843: area split widget missing in python console editor.

Python was indirectly causing redraw tags during drawing, which interfered
with the ARegion.drawrct, now ignore these during draw.

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

M	source/blender/blenloader/intern/readfile.c
M	source/blender/editors/screen/area.c
M	source/blender/makesdna/DNA_screen_types.h

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

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index f3244a6..97e11d5 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6183,7 +6183,7 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype)
 	ar->swinid = 0;
 	ar->type = NULL;
 	ar->swap = 0;
-	ar->do_draw = FALSE;
+	ar->do_draw = 0;
 	ar->regiontimer = NULL;
 	memset(&ar->drawrct, 0, sizeof(ar->drawrct));
 }
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 2fd3423..a1daa3b 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -419,6 +419,8 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
 		BLI_rcti_isect(&ar->winrct, &ar->drawrct, &ar->drawrct);
 		scissor_pad = false;
 	}
+
+	ar->do_draw |= RGN_DRAWING;
 	
 	/* note; this sets state, so we can use wmOrtho and friends */
 	wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct, scissor_pad);
@@ -453,7 +455,7 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
 	glDisable(GL_BLEND);
 #endif
 
-	ar->do_draw = FALSE;
+	ar->do_draw = 0;
 	memset(&ar->drawrct, 0, sizeof(ar->drawrct));
 	
 	uiFreeInactiveBlocks(C, &ar->uiblocks);
@@ -469,7 +471,9 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
 
 void ED_region_tag_redraw(ARegion *ar)
 {
-	if (ar) {
+	/* don't tag redraw while drawing, it shouldn't happen normally
+	 * but python scripts can cause this to happen indirectly */
+	if (ar && !(ar->do_draw & RGN_DRAWING)) {
 		/* zero region means full region redraw */
 		ar->do_draw = RGN_DRAW;
 		memset(&ar->drawrct, 0, sizeof(ar->drawrct));
@@ -484,7 +488,7 @@ void ED_region_tag_redraw_overlay(ARegion *ar)
 
 void ED_region_tag_redraw_partial(ARegion *ar, rcti *rct)
 {
-	if (ar) {
+	if (ar && !(ar->do_draw & RGN_DRAWING)) {
 		if (!ar->do_draw) {
 			/* no redraw set yet, set partial region */
 			ar->do_draw = RGN_DRAW_PARTIAL;
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 005b0bd..d343b2b 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -365,6 +365,7 @@ enum {
 /* region do_draw */
 #define RGN_DRAW			1
 #define RGN_DRAW_PARTIAL	2
+#define RGN_DRAWING			4
 
 #endif




More information about the Bf-blender-cvs mailing list