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

Ton Roosendaal ton at blender.org
Fri Jul 24 14:43:59 CEST 2009


Revision: 21851
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21851
Author:   ton
Date:     2009-07-24 14:43:59 +0200 (Fri, 24 Jul 2009)

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

New feature: allowing to open temporarily windows for output.
Implemented for:

- Render output (use output menu "new window" option).
- User Preferences (alt+U, plus added in 'File' menu)

Currently the window opens where your mouse is. The Render window
works as usual, with ESC or F11 moving it to back or front again.
That allows the window position to remain where you moved it on 
new renders.
If you close a render window when it renders, the render thread
will be killed.

User prefs show 'info window' now... i thought we'd use outliner?
Anyhoo, I've made the 'save settings' to close the 2nd window as
well.

Opening a secondary file window for save I'll check on later,
this has to be checked with the current event system still.

the WM_window_open_temp() api call for this maintains currently
a *single* temp window. If you have a render window open, and call
for the preferences, the render window will be used for it. And
the other way around.

On closing the blender window, the temp windows close automatically
when there's no regular window open, and blender quits.

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/editors/space_image/image_draw.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_files.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_jobs.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c
    branches/blender2.5/blender/source/blender/windowmanager/wm.h
    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	2009-07-24 12:36:38 UTC (rev 21850)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2009-07-24 12:43:59 UTC (rev 21851)
@@ -87,6 +87,7 @@
 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, struct bScreen *sc);
+bScreen *ED_screen_add(struct wmWindow *win, struct Scene *scene, char *name);
 void	ED_screen_set(struct bContext *C, struct bScreen *sc);
 void	ED_screen_set_scene(struct bContext *C, struct Scene *scene);
 void	ED_screen_set_subwinactive(struct wmWindow *win, struct wmEvent *event);
@@ -95,6 +96,8 @@
 int		ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type);
 void	ED_screen_full_prevspace(struct bContext *C);
 
+void	ED_screen_new_window(struct bContext *C, struct rcti *position, int type);
+
 /* anim */
 void	ED_update_for_newframe(const struct bContext *C, int mute);
 unsigned int ED_screen_view3d_layers(struct bScreen *screen);
@@ -143,5 +146,6 @@
 #define ED_KEYMAP_ANIMATION	8
 #define ED_KEYMAP_FRAMES	16
 
+
 #endif /* ED_SCREEN_H */
 

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2009-07-24 12:36:38 UTC (rev 21850)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2009-07-24 12:43:59 UTC (rev 21851)
@@ -54,6 +54,7 @@
 #include "ED_screen.h"
 #include "ED_screen_types.h"
 
+/* XXX actually should be not here... solve later */
 #include "wm_subwindow.h"
 
 #include "screen_intern.h"	/* own module include */
@@ -404,7 +405,7 @@
 
 /* empty screen, with 1 dummy area without spacedata */
 /* uses window size */
-bScreen *screen_add(wmWindow *win, Scene *scene, char *name)
+bScreen *ED_screen_add(wmWindow *win, Scene *scene, char *name)
 {
 	bScreen *sc;
 	ScrVert *sv1, *sv2, *sv3, *sv4;
@@ -947,7 +948,7 @@
 	if(sc->full != SCREENNORMAL) return NULL; /* XXX handle this case! */
 	
 	/* make new empty screen: */
-	newsc= screen_add(win, sc->scene, sc->id.name+2);
+	newsc= ED_screen_add(win, sc->scene, sc->id.name+2);
 	/* copy all data */
 	screen_copy(newsc, sc);
 	/* set in window */
@@ -1368,8 +1369,6 @@
 	
 	ED_update_for_newframe(C, 1);
 	
-//	set_radglobal();
-	
 	/* complete redraw */
 	WM_event_add_notifier(C, NC_WINDOW, NULL);
 	
@@ -1434,7 +1433,7 @@
 		
 		oldscreen->full = SCREENFULL;
 		
-		sc= screen_add(CTX_wm_window(C), CTX_data_scene(C), "temp");
+		sc= ED_screen_add(CTX_wm_window(C), CTX_data_scene(C), "temp");
 		sc->full = SCREENFULL; // XXX
 		
 		/* timer */

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h	2009-07-24 12:36:38 UTC (rev 21850)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h	2009-07-24 12:43:59 UTC (rev 21851)
@@ -36,7 +36,6 @@
 void		area_copy_data	(ScrArea *sa1, ScrArea *sa2, int swap_space);
 
 /* screen_edit.c */
-bScreen		*screen_add(struct wmWindow *win, struct Scene *scene, char *name);
 ScrEdge		*screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2);
 ScrArea		*area_split(wmWindow *win, bScreen *sc, ScrArea *sa, char dir, float fac);
 int			screen_area_join(bContext *C, bScreen* scr, ScrArea *sa1, ScrArea *sa2);

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-07-24 12:36:38 UTC (rev 21850)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-07-24 12:43:59 UTC (rev 21851)
@@ -74,6 +74,8 @@
 #include "UI_interface.h"
 #include "UI_resources.h"
 
+#include "wm_window.h"
+
 #include "screen_intern.h"	/* own module include */
 
 #define KM_MODAL_CANCEL		1
@@ -502,7 +504,7 @@
 	return OPERATOR_RUNNING_MODAL;
 }
 
-void SCREEN_OT_actionzone(wmOperatorType *ot)
+static void SCREEN_OT_actionzone(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Handle area action zones";
@@ -668,7 +670,7 @@
 	newwin= WM_window_open(C, &rect);
 	
 	/* allocs new screen and adds to newly created window, using window size */
-	newsc= screen_add(newwin, CTX_data_scene(C), sc->id.name+2);
+	newsc= ED_screen_add(newwin, CTX_data_scene(C), sc->id.name+2);
 	newwin->screen= newsc;
 	
 	/* copy area to new screen */
@@ -921,7 +923,7 @@
 	return OPERATOR_RUNNING_MODAL;
 }
 
-void SCREEN_OT_area_move(wmOperatorType *ot)
+static void SCREEN_OT_area_move(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Move area edges";
@@ -1237,7 +1239,7 @@
 	{'v', "VERTICAL", 0, "Vertical", ""},
 	{0, NULL, 0, NULL, NULL}};
 
-void SCREEN_OT_area_split(wmOperatorType *ot)
+static void SCREEN_OT_area_split(wmOperatorType *ot)
 {
 	ot->name = "Split area";
 	ot->idname = "SCREEN_OT_area_split";
@@ -1386,7 +1388,7 @@
 	return OPERATOR_FINISHED;
 }
 
-void SCREEN_OT_frame_offset(wmOperatorType *ot)
+static void SCREEN_OT_frame_offset(wmOperatorType *ot)
 {
 	ot->name = "Frame Offset";
 	ot->idname = "SCREEN_OT_frame_offset";
@@ -1442,7 +1444,7 @@
 	return OPERATOR_CANCELLED;
 }
 
-void SCREEN_OT_screen_set(wmOperatorType *ot)
+static void SCREEN_OT_screen_set(wmOperatorType *ot)
 {
 	ot->name = "Set Screen";
 	ot->idname = "SCREEN_OT_screen_set";
@@ -1465,7 +1467,7 @@
 	return OPERATOR_FINISHED;
 }
 
-void SCREEN_OT_screen_full_area(wmOperatorType *ot)
+static void SCREEN_OT_screen_full_area(wmOperatorType *ot)
 {
 	ot->name = "Toggle Make Area Fullscreen";
 	ot->idname = "SCREEN_OT_screen_full_area";
@@ -1737,7 +1739,7 @@
 }
 
 /* Operator for joining two areas (space types) */
-void SCREEN_OT_area_join(wmOperatorType *ot)
+static void SCREEN_OT_area_join(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Join area";
@@ -1770,7 +1772,7 @@
 	return OPERATOR_CANCELLED;
 }
 
-void SCREEN_OT_repeat_last(wmOperatorType *ot)
+static void SCREEN_OT_repeat_last(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Repeat Last";
@@ -1822,7 +1824,7 @@
 	return OPERATOR_FINISHED;
 }
 
-void SCREEN_OT_repeat_history(wmOperatorType *ot)
+static void SCREEN_OT_repeat_history(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Repeat History";
@@ -1855,7 +1857,7 @@
 	return OPERATOR_CANCELLED;
 }
 
-void SCREEN_OT_redo_last(wmOperatorType *ot)
+static void SCREEN_OT_redo_last(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Redo Last";
@@ -1898,7 +1900,7 @@
 	return OPERATOR_FINISHED;
 }
 
-void SCREEN_OT_region_split(wmOperatorType *ot)
+static void SCREEN_OT_region_split(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Split Region";
@@ -1987,7 +1989,7 @@
 	return OPERATOR_FINISHED;
 }
 
-void SCREEN_OT_region_foursplit(wmOperatorType *ot)
+static void SCREEN_OT_region_foursplit(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Split Region in 4 Parts";
@@ -2025,7 +2027,7 @@
 }
 
 
-void SCREEN_OT_region_flip(wmOperatorType *ot)
+static void SCREEN_OT_region_flip(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Flip Region";
@@ -2195,7 +2197,7 @@
 	return OPERATOR_FINISHED;
 }
 
-void SCREEN_OT_animation_play(wmOperatorType *ot)
+static void SCREEN_OT_animation_play(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Animation player";
@@ -2244,7 +2246,7 @@
 	return 1;
 }
 
-void SCREEN_OT_border_select(wmOperatorType *ot)
+static void SCREEN_OT_border_select(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Border select";
@@ -2371,13 +2373,36 @@
 }
 #endif // XXX not used
 
-static void screen_set_image_output(bContext *C)
+/* new window uses x,y to set position */
+static void screen_set_image_output(bContext *C, int mx, int my)
 {
 	Scene *scene= CTX_data_scene(C);
 	ScrArea *sa;
 	SpaceImage *sima;
 	
-	if(scene->r.displaymode==R_OUTPUT_SCREEN) {
+	if(scene->r.displaymode==R_OUTPUT_WINDOW) {
+		rcti rect;
+		int sizex, sizey;
+		
+		sizex= 10 + (scene->r.xsch*scene->r.size)/100;
+		sizey= 40 + (scene->r.ysch*scene->r.size)/100;
+		
+		/* arbitrary... miniature image window views don't make much sense */
+		if(sizex < 320) sizex= 320;
+		if(sizey < 256) sizey= 256;
+		
+		/* XXX some magic to calculate postition */
+		rect.xmin= mx + CTX_wm_window(C)->posx - sizex/2;
+		rect.ymin= my + CTX_wm_window(C)->posy - sizey/2;
+		rect.xmax= rect.xmin + sizex;
+		rect.ymax= rect.ymin + sizey;
+		
+		/* changes context! */
+		WM_window_open_temp(C, &rect, WM_WINDOW_RENDER);
+		
+		sa= CTX_wm_area(C);
+	}
+	else if(scene->r.displaymode==R_OUTPUT_SCREEN) {
 		/* this function returns with changed context */
 		ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE);
 		sa= CTX_wm_area(C);
@@ -2710,7 +2735,7 @@
 	// store spare
 	
 	/* ensure at least 1 area shows result */
-	screen_set_image_output(C);
+	screen_set_image_output(C, event->x, event->y);
 
 	/* job custom data */
 	rj= MEM_callocN(sizeof(RenderJob), "render job");
@@ -2758,7 +2783,7 @@
 
 
 /* contextual render, using current scene, view3d? */
-void SCREEN_OT_render(wmOperatorType *ot)
+static void SCREEN_OT_render(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Render";
@@ -2782,7 +2807,12 @@
 	ScrArea *sa= CTX_wm_area(C);
 	SpaceImage *sima= sa->spacedata.first;
 	
-	if(sima->flag & SI_PREVSPACE) {
+	/* test if we have a temp screen in front */
+	if(CTX_wm_window(C)->screen->full==SCREENTEMP) {
+		wm_window_lower(CTX_wm_window(C));
+	}
+	/* determine if render already shows */
+	else if(sima->flag & SI_PREVSPACE) {
 		sima->flag &= ~SI_PREVSPACE;
 		
 		if(sima->flag & SI_FULLWINDOW) {
@@ -2800,7 +2830,7 @@
 	return OPERATOR_FINISHED;
 }
 
-void SCREEN_OT_render_view_cancel(struct wmOperatorType *ot)
+static void SCREEN_OT_render_view_cancel(struct wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Cancel Render View";
@@ -2813,12 +2843,16 @@
 
 /* *********************** show render viewer *************** */
 
-static int render_view_show_exec(bContext *C, wmOperator *unused)
+static int render_view_show_invoke(bContext *C, wmOperator *unused, wmEvent *event)
 {
 	ScrArea *sa= find_area_showing_r_result(C);
-	
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list