[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17495] branches/blender2.5/blender/source /blender: Cleanup of area-rip operator

Ton Roosendaal ton at blender.org
Tue Nov 18 14:51:02 CET 2008


Revision: 17495
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17495
Author:   ton
Date:     2008-11-18 14:51:02 +0100 (Tue, 18 Nov 2008)

Log Message:
-----------
Cleanup of area-rip operator

- moved from WM to Screen code (it uses active area)
- less code :) result of cleaning some calls
- added WM_window_open() to WM API for this
- now opens new window on top of area, and leaves old screen unaffected
  (simple, atomic, the 'do not think for user' convention :)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
    branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c
    branches/blender2.5/blender/source/blender/windowmanager/wm_window.h

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2008-11-18 10:57:06 UTC (rev 17494)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2008-11-18 13:51:02 UTC (rev 17495)
@@ -59,7 +59,6 @@
 void	ED_screen_refresh(struct wmWindowManager *wm, struct wmWindow *win);
 void	ED_screen_do_listen(struct wmWindow *win, struct wmNotifier *note);
 bScreen *ED_screen_duplicate(struct wmWindow *win, bScreen *sc);
-bScreen *ED_screen_riparea(struct wmWindow *win, bScreen *sc, struct ScrArea *sa);
 void	ED_screen_set_subwinactive(struct wmWindow *win);
 void	ED_screen_exit(struct bContext *C, struct wmWindow *window, bScreen *screen);
 

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2008-11-18 10:57:06 UTC (rev 17494)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2008-11-18 13:51:02 UTC (rev 17495)
@@ -492,6 +492,7 @@
 	}
 }
 
+/* adds no space data */
 static ScrArea *screen_addarea(bScreen *sc, ScrVert *v1, ScrVert *v2, ScrVert *v3, ScrVert *v4, short headertype, short spacetype)
 {
 	ScrArea *sa= MEM_callocN(sizeof(ScrArea), "addscrarea");
@@ -520,15 +521,19 @@
  */
 int screen_join_areas(bScreen *scr, ScrArea *sa1, ScrArea *sa2);
 
-static bScreen *addscreen_area(wmWindow *win, char *name, short headertype, short spacetype)
+/* empty screen, with 1 dummy area without spacedata */
+/* uses window size */
+static bScreen *screen_add(wmWindow *win, char *name)
 {
 	bScreen *sc;
 	ScrVert *sv1, *sv2, *sv3, *sv4;
 	
 	sc= alloc_libblock(&G.main->screen, ID_SCR, name);
-	
 	sc->scene= G.scene;
+	sc->do_refresh= 1;
 	
+	win->screen= sc;
+	
 	sv1= screen_addvert(sc, 0, 0);
 	sv2= screen_addvert(sc, 0, win->sizey-1);
 	sv3= screen_addvert(sc, win->sizex-1, win->sizey-1);
@@ -539,16 +544,12 @@
 	screen_addedge(sc, sv3, sv4);
 	screen_addedge(sc, sv4, sv1);
 	
-	screen_addarea(sc, sv1, sv2, sv3, sv4, headertype, spacetype);
+	/* dummy type, no spacedata */
+	screen_addarea(sc, sv1, sv2, sv3, sv4, HEADERDOWN, SPACE_INFO);
 		
 	return sc;
 }
 
-static bScreen *addscreen(wmWindow *win, char *name) 
-{
-	return addscreen_area(win, name, HEADERDOWN, SPACE_INFO);
-}
-
 static void screen_copy(bScreen *to, bScreen *from)
 {
 	ScrVert *s1, *s2;
@@ -597,42 +598,61 @@
 
 }
 
-bScreen *ED_screen_riparea(struct wmWindow *win, bScreen *sc, struct ScrArea *sa)
+/* *********** Rip area operator ****************** */
+
+
+/* operator callback */
+/* (ton) removed attempt to merge ripped area with another, don't think this is desired functionality.
+		 conventions: 'atomic' and 'dont think for user' :) */
+static int screen_area_rip_op(bContext *C, wmOperator *op)
 {
-	bScreen *newsc=NULL;
-	ScrArea *newa;
-	ScrArea *tsa;
-
-	if(sc->full != SCREENNORMAL) return NULL; /* XXX handle this case! */
+	wmWindow *win;
+	bScreen *newsc;
+	rcti rect;
 	
-	/* make new screen: */
-	newsc= addscreen_area(win, sc->id.name+2, sa->headertype, sa->spacetype);
+	/*  poll() checks area context, but we don't accept full-area windows */
+	if(C->screen->full != SCREENNORMAL) 
+		return OPERATOR_CANCELLED;
+	
+	/* adds window to WM */
+	rect= C->area->totrct;
+	BLI_translate_rcti(&rect, C->window->posx, C->window->posy);
+	win= WM_window_open(C, &rect);
+	
+	/* allocs new screen and adds to newly created window, using window size */
+	newsc= screen_add(win, C->screen->id.name+2);
+	
+	/* copy area to new screen */
+	area_copy_data((ScrArea *)newsc->areabase.first, C->area, 0);
+	
+	/* screen, areas init */
+	WM_event_add_notifier(C->wm, win, 0, WM_NOTE_SCREEN_CHANGED, 0, NULL);
+	
+	return OPERATOR_FINISHED;
+}
 
-	/* new area is first (and only area) added to new win */
-	newa = (ScrArea *)newsc->areabase.first;
-	area_copy_data(newa, sa, 0);
 
-	/*remove the original area if possible*/
-	for(tsa= sc->areabase.first; tsa; tsa= tsa->next) {
-		if (screen_join_areas(sc,tsa,sa)) 
-			break;
-	}
 
-	removedouble_scredges(sc);
-	removenotused_scredges(sc);
-	removenotused_scrverts(sc);
-
-	return newsc;
+void ED_SCR_OT_area_rip(wmOperatorType *ot)
+{
+	ot->name= "Rip Area into New Window";
+	ot->idname= "ED_SCR_OT_area_rip";
+	
+	ot->invoke= NULL; //WM_operator_confirm;
+	ot->exec= screen_area_rip_op;
+	ot->poll= ED_operator_areaactive;
 }
 
+/* ********************************************* */
+
 bScreen *ED_screen_duplicate(wmWindow *win, bScreen *sc)
 {
 	bScreen *newsc;
 	
 	if(sc->full != SCREENNORMAL) return NULL; /* XXX handle this case! */
 	
-	/* make new screen: */
-	newsc= addscreen(win, sc->id.name+2);
+	/* make new empty screen: */
+	newsc= screen_add(win, sc->id.name+2);
 	/* copy all data */
 	screen_copy(newsc, sc);
 	

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h	2008-11-18 10:57:06 UTC (rev 17494)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h	2008-11-18 13:51:02 UTC (rev 17495)
@@ -43,6 +43,7 @@
 void ED_SCR_OT_split_area(wmOperatorType *ot);
 void ED_SCR_OT_join_areas(wmOperatorType *ot);
 void ED_SCR_OT_actionzone(wmOperatorType *ot);
+void ED_SCR_OT_area_rip(wmOperatorType *ot);
 
 #endif /* ED_SCREEN_INTERN_H */
 

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2008-11-18 10:57:06 UTC (rev 17494)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2008-11-18 13:51:02 UTC (rev 17495)
@@ -90,6 +90,7 @@
 	WM_operatortype_append(ED_SCR_OT_move_areas);
 	WM_operatortype_append(ED_SCR_OT_split_area);
 	WM_operatortype_append(ED_SCR_OT_join_areas);
+	WM_operatortype_append(ED_SCR_OT_area_rip);
 }
 
 /* called in spacetypes.c */
@@ -101,5 +102,6 @@
 	WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_move_areas", LEFTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_split_area", EVT_ACTIONZONE, 0, 0, 0);	/* action tria */
 	WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_join_areas", EVT_ACTIONZONE, 0, 0, 0);	/* action tria */ 
+	WM_keymap_verify_item(&wm->windowkeymap, "ED_SCR_OT_area_rip", RKEY, KM_PRESS, KM_ALT, 0);
 }
 

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_api.h	2008-11-18 10:57:06 UTC (rev 17494)
+++ branches/blender2.5/blender/source/blender/windowmanager/WM_api.h	2008-11-18 13:51:02 UTC (rev 17495)
@@ -35,6 +35,7 @@
 struct wmEvent;
 struct wmEventHandler;
 struct wmGesture;
+struct rcti;
 
 			/* general API */
 void		WM_setprefsize		(int stax, int stay, int sizx, int sizy);
@@ -43,6 +44,8 @@
 void		WM_exit				(struct bContext *C);
 void		WM_main				(struct bContext *C);
 
+wmWindow	*WM_window_open		(struct bContext *C, struct rcti *rect);
+
 			/* files */
 int			WM_read_homefile	(struct bContext *C, int from_memory);
 int			WM_write_homefile	(struct bContext *C, struct wmOperator *op);

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c	2008-11-18 10:57:06 UTC (rev 17494)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c	2008-11-18 13:51:02 UTC (rev 17495)
@@ -81,7 +81,6 @@
 {
 	/* note, this doesn't replace existing keymap items */
 	WM_keymap_verify_item(&wm->windowkeymap, "WM_OT_window_duplicate", AKEY, KM_PRESS, 0, 0);
-	WM_keymap_verify_item(&wm->windowkeymap, "WM_OT_window_rip", RKEY, KM_PRESS, KM_ALT, 0);
 	WM_keymap_verify_item(&wm->windowkeymap, "WM_OT_save_homefile", UKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_verify_item(&wm->windowkeymap, "WM_OT_window_fullscreen_toggle", FKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(&wm->windowkeymap, "WM_OT_exit_blender", QKEY, KM_PRESS, KM_CTRL, 0);
@@ -120,7 +119,8 @@
 	
 	C->wm= wm;
 	
-	win= wm_window_new(C, C->screen);
+	win= wm_window_new(C);
+	win->screen= C->screen;
 	wm->winactive= win;
 	wm_window_make_drawable(C, win); 
 }

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c	2008-11-18 10:57:06 UTC (rev 17494)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c	2008-11-18 13:51:02 UTC (rev 17495)
@@ -98,16 +98,6 @@
 	ot->poll= WM_operator_winactive;
 }
 
-static void WM_OT_window_rip(wmOperatorType *ot)
-{
-	ot->name= "Rip Area into New Window";
-	ot->idname= "WM_OT_window_rip";
-	
-	ot->invoke= wm_window_rip_op; //WM_operator_confirm;
-	ot->exec= NULL;
-	ot->poll= WM_operator_winactive;
-}
-
 static void WM_OT_save_homefile(wmOperatorType *ot)
 {
 	ot->name= "Save User Settings";
@@ -266,7 +256,6 @@
 void wm_operatortype_init(void)
 {
 	WM_operatortype_append(WM_OT_window_duplicate);
-	WM_operatortype_append(WM_OT_window_rip);
 	WM_operatortype_append(WM_OT_save_homefile);
 	WM_operatortype_append(WM_OT_window_fullscreen_toggle);
 	WM_operatortype_append(WM_OT_exit_blender);

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c	2008-11-18 10:57:06 UTC (rev 17494)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c	2008-11-18 13:51:02 UTC (rev 17495)
@@ -21,7 +21,7 @@
  * on ghostwinlay.c (C) 2001-2002 by NaN Holding BV
  * All rights reserved.
  *
- * Contributor(s): Blender Foundation
+ * Contributor(s): Blender Foundation, 2008
  *
  * ***** END GPL LICENSE BLOCK *****
  */
@@ -125,118 +125,46 @@
 }
 
 /* dont change context itself */
-wmWindow *wm_window_new(bContext *C, bScreen *screen)
+wmWindow *wm_window_new(bContext *C)
 {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list