[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26044] trunk/blender/source/blender/ editors/screen: resizing any area/ region would redraw all views in every window.

Campbell Barton ideasman42 at gmail.com
Sat Jan 16 23:56:54 CET 2010


Revision: 26044
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26044
Author:   campbellbarton
Date:     2010-01-16 23:56:52 +0100 (Sat, 16 Jan 2010)

Log Message:
-----------
resizing any area/region would redraw all views in every window.
This means a large scene will make blender resize the border between the timeline and the graph editor slow since it redraws the 3d view for each update.

edited the operators to only redraw whats needed. since tons away IFDEF'd this incse it needs to be reverted.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/screen/area.c
    trunk/blender/source/blender/editors/screen/screen_intern.h
    trunk/blender/source/blender/editors/screen/screen_ops.c

Modified: trunk/blender/source/blender/editors/screen/area.c
===================================================================
--- trunk/blender/source/blender/editors/screen/area.c	2010-01-16 22:53:05 UTC (rev 26043)
+++ trunk/blender/source/blender/editors/screen/area.c	2010-01-16 22:56:52 UTC (rev 26044)
@@ -121,10 +121,12 @@
 		case NC_WINDOW:
 			ED_region_tag_redraw(ar);
 			break;
+#ifndef WM_FAST_DRAW
 		case NC_SCREEN:
 			if(note->action==NA_EDITED)
 				ED_region_tag_redraw(ar);
 			/* pass on */
+#endif
 		default:
 			if(ar->type && ar->type->listener)
 				ar->type->listener(ar, note);

Modified: trunk/blender/source/blender/editors/screen/screen_intern.h
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_intern.h	2010-01-16 22:53:05 UTC (rev 26043)
+++ trunk/blender/source/blender/editors/screen/screen_intern.h	2010-01-16 22:56:52 UTC (rev 26044)
@@ -60,6 +60,9 @@
 void SCREEN_OT_screenshot(struct wmOperatorType *ot);
 void SCREEN_OT_screencast(struct wmOperatorType *ot);
 
+/* partial updates, much faster then drawing everything, ton is away so allow easy undo'ing - campbell */
+#define WM_FAST_DRAW
+
 #endif /* ED_SCREEN_INTERN_H */
 
 

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2010-01-16 22:53:05 UTC (rev 26043)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2010-01-16 22:56:52 UTC (rev 26044)
@@ -640,6 +640,11 @@
 				
 				area_swap_exit(C, op);
 				
+#ifdef WM_FAST_DRAW
+				ED_area_tag_redraw(sad->sa1);
+				ED_area_tag_redraw(sad->sa2);
+#endif
+
 				WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 				
 				return OPERATOR_FINISHED;
@@ -708,6 +713,10 @@
 	/* copy area to new screen */
 	area_copy_data((ScrArea *)newsc->areabase.first, sa, 0);
 	
+#ifdef WM_FAST_DRAW
+	ED_area_tag_redraw((ScrArea *)newsc->areabase.first);
+#endif
+
 	/* screen, areas init */
 	WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 	
@@ -854,8 +863,16 @@
 			}
 		}
 	}
-	
-	WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+#ifdef WM_FAST_DRAW
+	{
+		ScrArea *sa;
+		for(sa= sc->areabase.first; sa; sa= sa->next)
+			if(sa->v1->flag || sa->v2->flag || sa->v3->flag || sa->v4->flag)
+				ED_area_tag_redraw(sa);
+	}
+
+#endif
+	WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); /* redraw everything */
 }
 
 static void area_move_apply(bContext *C, wmOperator *op)
@@ -1116,7 +1133,11 @@
 		
 		if(dir=='h') sd->origval= sd->nedge->v1->vec.y;
 		else sd->origval= sd->nedge->v1->vec.x;
-		
+
+#ifdef WM_FAST_DRAW
+		ED_area_tag_redraw(sd->sarea);
+		ED_area_tag_redraw(sd->narea);
+#endif
 		WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 		
 		return 1;
@@ -1128,6 +1149,12 @@
 static void area_split_exit(bContext *C, wmOperator *op)
 {
 	if (op->customdata) {
+#ifdef WM_FAST_DRAW
+		sAreaSplitData *sd= (sAreaSplitData *)op->customdata;
+		if(sd->sarea) ED_area_tag_redraw(sd->sarea);
+		if(sd->narea) ED_area_tag_redraw(sd->narea);
+#endif
+
 		MEM_freeN(op->customdata);
 		op->customdata = NULL;
 	}
@@ -1250,8 +1277,6 @@
 			
 			fac= (dir == 'v') ? event->x-sd->origmin : event->y-sd->origmin;
 			RNA_float_set(op->ptr, "factor", fac / (float)sd->origsize);
-			
-			WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 			break;
 			
 		case LEFTMOUSE:
@@ -1414,7 +1439,9 @@
 				else if(rmd->ar->flag & RGN_FLAG_HIDDEN)
 					ED_region_toggle_hidden(C, rmd->ar);
 			}
-			
+#ifdef WM_FAST_DRAW
+			ED_area_tag_redraw(rmd->sa);
+#endif
 			WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 			
 			break;
@@ -1425,6 +1452,9 @@
 				if(ABS(event->x - rmd->origx) < 2 && ABS(event->y - rmd->origy) < 2) {
 					if(rmd->ar->flag & RGN_FLAG_HIDDEN) {
 						ED_region_toggle_hidden(C, rmd->ar);
+#ifdef WM_FAST_DRAW
+						ED_area_tag_redraw(rmd->sa);
+#endif
 						WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 					}
 				}
@@ -1907,6 +1937,10 @@
 			break;
 		case LEFTMOUSE:
 			if(event->val==KM_RELEASE) {
+#ifdef WM_FAST_DRAW
+				ED_area_tag_redraw(jd->sa1);
+				ED_area_tag_redraw(jd->sa2);
+#endif
 				area_join_apply(C, op);
 				WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 				area_join_exit(C, op);
@@ -2089,6 +2123,9 @@
 				MEM_freeN(ar);
 			}
 		}
+#ifdef WM_FAST_DRAW
+		ED_area_tag_redraw(sa);
+#endif
 		WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 	}
 	else if(ar->next)
@@ -2125,6 +2162,9 @@
 			rv3d->view= RV3D_VIEW_CAMERA; rv3d->persp= RV3D_CAMOB;
 		}
 		
+#ifdef WM_FAST_DRAW
+		ED_area_tag_redraw(sa);
+#endif
 		WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 	}
 	
@@ -2167,6 +2207,9 @@
 	else if(ar->alignment==RGN_ALIGN_RIGHT)
 		ar->alignment= RGN_ALIGN_LEFT;
 	
+#ifdef WM_FAST_DRAW
+		ED_area_tag_redraw(CTX_wm_area(C));
+#endif
 	WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 	
 	return OPERATOR_FINISHED;
@@ -2220,6 +2263,10 @@
 	else if(ar->alignment==RGN_ALIGN_RIGHT)
 		ar->alignment= RGN_ALIGN_LEFT;
 	
+#ifdef WM_FAST_DRAW
+	ED_area_tag_redraw(CTX_wm_area(C));
+#endif
+
 	WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 	printf("executed header region flip\n");
 	





More information about the Bf-blender-cvs mailing list