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)


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to