[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29642] trunk/blender/source/blender: Fix #21470: changing brush settings redraws the 3d view unecessarily,
Brecht Van Lommel
brecht at blender.org
Wed Jun 23 11:58:33 CEST 2010
Revision: 29642
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29642
Author: blendix
Date: 2010-06-23 11:58:32 +0200 (Wed, 23 Jun 2010)
Log Message:
-----------
Fix #21470: changing brush settings redraws the 3d view unecessarily,
added ED_region_tag_redraw_overlay to only redo overlay drawing, which
in case of triple buffer is much faster.
Modified Paths:
--------------
trunk/blender/source/blender/editors/include/ED_screen.h
trunk/blender/source/blender/editors/screen/area.c
trunk/blender/source/blender/editors/space_view3d/space_view3d.c
trunk/blender/source/blender/makesdna/DNA_screen_types.h
trunk/blender/source/blender/windowmanager/intern/wm_draw.c
Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h 2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/editors/include/ED_screen.h 2010-06-23 09:58:32 UTC (rev 29642)
@@ -55,6 +55,7 @@
void ED_region_init(struct bContext *C, struct ARegion *ar);
void ED_region_tag_redraw(struct ARegion *ar);
void ED_region_tag_redraw_partial(struct ARegion *ar, struct rcti *rct);
+void ED_region_tag_redraw_overlay(struct ARegion *ar);
void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
void ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, char *context, int contextnr);
void ED_region_header_init(struct ARegion *ar);
Modified: trunk/blender/source/blender/editors/screen/area.c
===================================================================
--- trunk/blender/source/blender/editors/screen/area.c 2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/editors/screen/area.c 2010-06-23 09:58:32 UTC (rev 29642)
@@ -372,6 +372,12 @@
}
}
+void ED_region_tag_redraw_overlay(ARegion *ar)
+{
+ if(ar)
+ ar->do_draw_overlay= RGN_DRAW;
+}
+
void ED_region_tag_redraw_partial(ARegion *ar, rcti *rct)
{
if(ar) {
Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c 2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c 2010-06-23 09:58:32 UTC (rev 29642)
@@ -587,7 +587,7 @@
break;
case NC_BRUSH:
if(wmn->action == NA_EDITED)
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_overlay(ar);
break;
case NC_MATERIAL:
switch(wmn->data) {
Modified: trunk/blender/source/blender/makesdna/DNA_screen_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_screen_types.h 2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/makesdna/DNA_screen_types.h 2010-06-23 09:58:32 UTC (rev 29642)
@@ -152,7 +152,9 @@
short sizex, sizey; /* current split size in pixels (if zero it uses regiontype) */
short do_draw; /* private, cached notifier events */
+ short do_draw_overlay; /* private, cached notifier events */
short swap; /* private, indicator to survive swap-exchange */
+ short pad[3];
struct ARegionType *type; /* callbacks for this region type */
Modified: trunk/blender/source/blender/windowmanager/intern/wm_draw.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_draw.c 2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/windowmanager/intern/wm_draw.c 2010-06-23 09:58:32 UTC (rev 29642)
@@ -642,6 +642,13 @@
{
ScrArea *sa;
ARegion *ar;
+
+ for(ar= win->screen->regionbase.first; ar; ar= ar->next) {
+ if(ar->do_draw_overlay) {
+ wm_tag_redraw_overlay(win, ar);
+ ar->do_draw_overlay= 0;
+ }
+ }
if(win->screen->do_refresh)
return 1;
@@ -687,8 +694,11 @@
void wm_tag_redraw_overlay(wmWindow *win, ARegion *ar)
{
/* for draw triple gestures, paint cursors don't need region redraw */
- if(ar && win && wm_automatic_draw_method(win) != USER_DRAW_TRIPLE)
- ED_region_tag_redraw(ar);
+ if(ar && win) {
+ if(wm_automatic_draw_method(win) != USER_DRAW_TRIPLE)
+ ED_region_tag_redraw(ar);
+ win->screen->do_draw_paintcursor= 1;
+ }
}
void wm_draw_update(bContext *C)
More information about the Bf-blender-cvs
mailing list