[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17896] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Tue Dec 16 19:42:12 CET 2008


Revision: 17896
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17896
Author:   ton
Date:     2008-12-16 19:42:12 +0100 (Tue, 16 Dec 2008)

Log Message:
-----------
2.5

More notifier and redraw cleanup

- notifiers are not filtered anymore, apart from window/screen notifiers,
  they get to all regions.
- fixed drawing of 'action zones' in areas.
- added support for basic multilayer draw, like for action zones now,
  and future other area decorations (tabs, region handlers)
  check: ED_area_overdraw_flush()
         ED_area_overdraw()
- bugfix in UI redraw tags, it was calling region pointer in free'd
  data
- added notifier for marker-changed
- added keymap for markers to ipo window

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
    branches/blender2.5/blender/source/blender/editors/include/ED_screen_types.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    branches/blender2.5/blender/source/blender/editors/screen/area.c
    branches/blender2.5/blender/source/blender/editors/screen/glutil.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/space_ipo.c
    branches/blender2.5/blender/source/blender/editors/space_time/ed_markers.c
    branches/blender2.5/blender/source/blender/editors/space_time/space_time.c
    branches/blender2.5/blender/source/blender/editors/space_time/time_ops.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2008-12-16 17:36:51 UTC (rev 17895)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2008-12-16 18:42:12 UTC (rev 17896)
@@ -54,11 +54,13 @@
 void	ED_spacetypes_keymap(struct wmWindowManager *wm);
 struct	ARegionType *ED_regiontype_from_id(struct SpaceType *st, int regionid);
 int		ED_area_header_standardbuttons(const bContext *C, struct uiBlock *block, int yco);
+void	ED_area_overdraw(struct bContext *C);
+void	ED_area_overdraw_flush(struct bContext *C);
 
+
 /* areas */
 void	ED_area_initialize(struct wmWindowManager *wm, struct wmWindow *win, struct ScrArea *sa);
 void	ED_area_exit(struct bContext *C, struct ScrArea *sa);
-void	ED_area_do_draw(struct bContext *C, struct ScrArea *sa);
 int		ED_screen_area_active(const struct bContext *C);
 void	ED_area_tag_redraw(ScrArea *sa);
 

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_screen_types.h	2008-12-16 17:36:51 UTC (rev 17895)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen_types.h	2008-12-16 18:42:12 UTC (rev 17896)
@@ -32,7 +32,8 @@
 typedef struct AZone {
 	struct AZone *next, *prev;
 	int type;
-	int flag;
+	short flag;
+	short do_draw;
 	int pos;
 	short x1, y1, x2, y2;
 } AZone;
@@ -41,6 +42,8 @@
 #define	AZONE_TRI			1
 #define AZONE_QUAD			2
 
+/* actionzone flag */
+
 /* actionzone pos */
 #define AZONE_S				1
 #define AZONE_SW			2

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2008-12-16 17:36:51 UTC (rev 17895)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2008-12-16 18:42:12 UTC (rev 17896)
@@ -2880,14 +2880,14 @@
 	if(data->origstr)
 		MEM_freeN(data->origstr);
 
+	/* redraw (data is but->active!) */
+	ED_region_tag_redraw(data->region);
+	
 	/* clean up button */
 	MEM_freeN(but->active);
 	but->active= NULL;
 	but->flag &= ~(UI_ACTIVE|UI_SELECT);
 
-	/* redraw */
-	ED_region_tag_redraw(data->region);
-
 	/* adds empty mousemove in queue for re-init handler, in case mouse is
 	 * still over a button. we cannot just check for this ourselfs because
 	 * at this point the mouse may be over a button in another region */

Modified: branches/blender2.5/blender/source/blender/editors/screen/area.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/area.c	2008-12-16 17:36:51 UTC (rev 17895)
+++ branches/blender2.5/blender/source/blender/editors/screen/area.c	2008-12-16 18:42:12 UTC (rev 17896)
@@ -104,7 +104,6 @@
 
 void ED_region_do_listen(ARegion *ar, wmNotifier *note)
 {
-
 	/* generic notes first */
 	switch(note->type) {
 		case WM_NOTE_WINDOW_REDRAW:
@@ -118,24 +117,54 @@
 	}
 }
 
-/* only internal decoration, AZone for now */
-void ED_area_do_draw(bContext *C, ScrArea *sa)
+/* based on screen region draw tags, set draw tags in azones, and future region tabs etc */
+void ED_area_overdraw_flush(bContext *C)
 {
-	AZone *az;
+	ScrArea *sa;
 	
-	/* hrmf, screenspace for zones */
+	for(sa= C->screen->areabase.first; sa; sa= sa->next) {
+		ARegion *ar;
+		
+		for(ar= sa->regionbase.first; ar; ar= ar->next) {
+			if(ar->do_draw) {
+				AZone *az;
+				
+				for(az= sa->actionzones.first; az; az= az->next) {
+					int xs= (az->x1+az->x2)/2, ys= (az->y1+az->y2)/2;
+		
+					/* test if inside */
+					if(BLI_in_rcti(&ar->winrct, xs, ys)) {
+						az->do_draw= 1;
+					}
+				}
+			}
+		}
+	}	
+}
+
+void ED_area_overdraw(bContext *C)
+{
+	ScrArea *sa;
+	
+	/* Draw AZones, in screenspace */
 	wm_subwindow_set(C->window, C->window->screen->mainwin);
+
+	glEnable( GL_BLEND );
+	glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
 	
-	/* temporary viz for 'action corner' */
-	for(az= sa->actionzones.first; az; az= az->next) {
-		
-		glEnable( GL_BLEND );
-		glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
-		glColor4ub(0, 0, 0, 80);
-		if(az->type==AZONE_TRI) sdrawtrifill(az->x1, az->y1, az->x2, az->y2);
-		//if(az->type==AZONE_TRI) sdrawtri(az->x1, az->y1, az->x2, az->y2);
-		glDisable( GL_BLEND );
-	}
+	for(sa= C->screen->areabase.first; sa; sa= sa->next) {
+		AZone *az;
+		for(az= sa->actionzones.first; az; az= az->next) {
+			if(az->do_draw) {
+				if(az->type==AZONE_TRI) {
+					glColor4ub(0, 0, 0, 70);
+					sdrawtrifill(az->x1, az->y1, az->x2, az->y2);
+				}
+				az->do_draw= 0;
+			}
+		}
+	}	
+	glDisable( GL_BLEND );
 	
 }
 
@@ -180,15 +209,17 @@
 
 void ED_region_tag_redraw(ARegion *ar)
 {
-	ar->do_draw= 1;
+	if(ar)
+		ar->do_draw= 1;
 }
 
 void ED_area_tag_redraw(ScrArea *sa)
 {
 	ARegion *ar;
 	
-	for(ar= sa->regionbase.first; ar; ar= ar->next)
-		ar->do_draw= 1;
+	if(sa)
+		for(ar= sa->regionbase.first; ar; ar= ar->next)
+			ar->do_draw= 1;
 }
 
 
@@ -328,6 +359,7 @@
 	sa->winy= sa->totrct.ymax-sa->totrct.ymin+1;
 }
 
+
 #define AZONESPOT		12
 void area_azone_initialize(ScrArea *sa) 
 {

Modified: branches/blender2.5/blender/source/blender/editors/screen/glutil.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/glutil.c	2008-12-16 17:36:51 UTC (rev 17895)
+++ branches/blender2.5/blender/source/blender/editors/screen/glutil.c	2008-12-16 18:42:12 UTC (rev 17896)
@@ -103,7 +103,8 @@
 
 */
 
-static void sdrawtripoints(short x1, short y1, short x2, short y2){
+static void sdrawtripoints(short x1, short y1, short x2, short y2)
+{
 	short v[2];
 	v[0]= x1; v[1]= y1;
 	glVertex2sv(v);

Modified: branches/blender2.5/blender/source/blender/editors/space_ipo/space_ipo.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_ipo/space_ipo.c	2008-12-16 17:36:51 UTC (rev 17895)
+++ branches/blender2.5/blender/source/blender/editors/space_ipo/space_ipo.c	2008-12-16 18:42:12 UTC (rev 17896)
@@ -293,6 +293,12 @@
 static void ipo_main_area_listener(ARegion *ar, wmNotifier *wmn)
 {
 	/* context changes */
+	switch(wmn->type) {
+		
+		case WM_NOTE_MARKERS_CHANGED:
+			ED_region_tag_redraw(ar);
+			break;
+	}
 }
 
 /* only called once, from space/spacetypes.c */
@@ -316,7 +322,7 @@
 	art->init= ipo_main_area_init;
 	art->draw= ipo_main_area_draw;
 	art->listener= ipo_main_area_listener;
-	art->keymapflag= ED_KEYMAP_VIEW2D;
+	art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_MARKERS;
 
 	BLI_addhead(&st->regiontypes, art);
 	

Modified: branches/blender2.5/blender/source/blender/editors/space_time/ed_markers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_time/ed_markers.c	2008-12-16 17:36:51 UTC (rev 17895)
+++ branches/blender2.5/blender/source/blender/editors/space_time/ed_markers.c	2008-12-16 18:42:12 UTC (rev 17896)
@@ -332,7 +332,7 @@
 	ed_marker_move_apply(C, op);
 	ed_marker_move_exit(C, op);	
 	
-	ED_area_tag_redraw(C->area);
+	WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL);
 }
 
 
@@ -374,7 +374,7 @@
 		case RIGHTMOUSE:
 			if(WM_modal_tweak_check(evt, mm->event_type)) {
 				ed_marker_move_exit(C, op);
-				ED_area_tag_redraw(C->area);
+				WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL);
 				return OPERATOR_FINISHED;
 			}
 			
@@ -451,7 +451,7 @@
 					}
 				}
 				
-				ED_area_tag_redraw(C->area);
+				WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL);
 				// headerprint(str); XXX
 			}
 	}
@@ -618,8 +618,7 @@
 	else
 		select_timeline_marker_frame(cfra, 0);
 	
-	/* XXX notifier for markers... */
-	ED_area_tag_redraw(C->area);
+	WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL);
 
 	return OPERATOR_PASS_THROUGH;
 }
@@ -712,8 +711,7 @@
 		}
 	}
 	
-	/* XXX notifier for markers... */
-	ED_area_tag_redraw(C->area);
+	WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL);
 
 	return 1;
 }
@@ -766,8 +764,7 @@
 			marker->flag &= ~SELECT;
 	}
 	
-	/* XXX notifier for markers... */
-	ED_area_tag_redraw(C->area);
+	WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL);
 
 	return OPERATOR_FINISHED;
 }
@@ -813,10 +810,9 @@
 		}
 	}
 	
-	/* XXX notifier for markers... */
-	if(changed)
-		ED_area_tag_redraw(C->area);
-
+	if(changed) {
+		WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL);
+	}
 	return OPERATOR_FINISHED;
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/space_time/space_time.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_time/space_time.c	2008-12-16 17:36:51 UTC (rev 17895)
+++ branches/blender2.5/blender/source/blender/editors/space_time/space_time.c	2008-12-16 18:42:12 UTC (rev 17896)
@@ -162,8 +162,11 @@
 static void time_main_area_listener(ARegion *ar, wmNotifier *wmn)
 {
 	/* context changes */
-	
 	switch(wmn->type) {
+		
+		case WM_NOTE_MARKERS_CHANGED:
+			ED_region_tag_redraw(ar);
+			break;
 	}
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/space_time/time_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_time/time_ops.c	2008-12-16 17:36:51 UTC (rev 17895)
+++ branches/blender2.5/blender/source/blender/editors/space_time/time_ops.c	2008-12-16 18:42:12 UTC (rev 17896)
@@ -218,8 +218,8 @@
 	WM_keymap_verify_item(keymap, "ED_TIME_OT_change_frame", LEFTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "ED_TIME_OT_toggle_time", TKEY, KM_PRESS, 0, 0);
 	
-
 	/* markers (XXX move to function?) */
+	keymap= WM_keymap_listbase(wm, "Markers", 0, 0);
 	WM_keymap_verify_item(keymap, "ED_MARKER_OT_add", MKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "ED_MARKER_OT_move", EVT_TWEAK_R, KM_ANY, 0, 0);
 	WM_keymap_verify_item(keymap, "ED_MARKER_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_types.h	2008-12-16 17:36:51 UTC (rev 17895)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list