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

Brecht Van Lommel brecht at blender.org
Thu Apr 16 23:39:45 CEST 2009


Revision: 19763
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19763
Author:   blendix
Date:     2009-04-16 23:39:45 +0200 (Thu, 16 Apr 2009)

Log Message:
-----------
UI:
* For new buttons spaces, automatically set horizontal/vertical
  align depending on size, instead of free.

* Cleaned up the UI panel API. There's now a new uiBeginPanel
  function which takes a panel type, and a uiEndPanel which takes
  the final size. uiNewPanel* functions will be phased out.
* Animate the re-alignment when a panel size changes, e.g. when
  enabling dupliframes.

* Load ui scripts from the release/ folder first if it is
  available. This makes it easier to edit ui scripts, since it
  will directly use the original files which avoids having to
  run the build system.
* Improve editing of panel types while blender is open. That
  means fixing some issues with lacking updates, overlaps, strange
  ordering. It even does an animation now when the panel resizes.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenlib/intern/util.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c
    branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h
    branches/blender2.5/blender/source/blender/python/intern/bpy_panel_wrap.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: branches/blender2.5/blender/source/blender/blenlib/intern/util.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenlib/intern/util.c	2009-04-16 20:13:13 UTC (rev 19762)
+++ branches/blender2.5/blender/source/blender/blenlib/intern/util.c	2009-04-16 21:39:45 UTC (rev 19763)
@@ -831,10 +831,10 @@
 /* this function returns the path to a blender folder, if it exists,
  * trying in this order:
  *
- * $HOME/.blender/folder_name
- * path_to_executable/.blender/folder_name
  * path_to_executable/release/folder_name (in svn)
  * ./release/folder_name (in svn)
+ * $HOME/.blender/folder_name
+ * path_to_executable/.blender/folder_name
  *
  * returns NULL if none is found. */
 
@@ -848,12 +848,20 @@
 	char *s;
 	int i;
 
+	/* try path_to_executable/release/folder_name (in svn) */
+	if (folder_name) {
+		BLI_snprintf(tmpdir, sizeof(tmpdir), "release/%s", folder_name);
+		BLI_make_file_string("/", fulldir, bprogdir, tmpdir);
+		if (BLI_exists(fulldir)) return fulldir;
+		else fulldir[0] = '\0';
+	}
+
+	/* try ./release/folder_name (in svn) */
 	if(folder_name) {
-		if(fulldir[0] != '\0')
-			return fulldir;
+		BLI_snprintf(fulldir, sizeof(fulldir), "./release/%s", folder_name);
+		if (BLI_exists(fulldir)) return fulldir;
+		else fulldir[0] = '\0';
 	}
-	else if(homedir[0] != '\0')
-		return homedir;
 
 	/* BLI_gethome() can return NULL if env vars are not set */
 	s = BLI_gethome();
@@ -913,21 +921,6 @@
 		else return homedir;
 	}
 
-	/* try path_to_executable/release/folder_name (in svn) */
-	if (folder_name) {
-		BLI_snprintf(tmpdir, sizeof(tmpdir), "release/%s", folder_name);
-		BLI_make_file_string("/", fulldir, bprogdir, tmpdir);
-		if (BLI_exists(fulldir)) return fulldir;
-		else fulldir[0] = '\0';
-	}
-
-	/* try ./release/folder_name (in svn) */
-	if(folder_name) {
-		BLI_snprintf(fulldir, sizeof(fulldir), "./release/%s", folder_name);
-		if (BLI_exists(fulldir)) return fulldir;
-		else fulldir[0] = '\0';
-	}
-
 	return NULL;
 }
 

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-04-16 20:13:13 UTC (rev 19762)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-04-16 21:39:45 UTC (rev 19763)
@@ -4460,7 +4460,7 @@
 
 	for(pa= ar->panels.first; pa; pa=pa->next) {
 		pa->paneltab= newdataadr(fd, pa->paneltab);
-		pa->active= 0;
+		pa->runtime_flag= 0;
 		pa->sortcounter= 0;
 		pa->activedata= NULL;
 		pa->type= NULL;

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-04-16 20:13:13 UTC (rev 19762)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-04-16 21:39:45 UTC (rev 19763)
@@ -481,18 +481,18 @@
  * could use a good cleanup, though how they will function in 2.5 is
  * not clear yet so we postpone that. */
 
-extern void uiNewPanelTabbed(char *, char *);
-extern int uiNewPanel(const struct bContext *C, struct ARegion *ar, uiBlock *block, char *panelname, char *tabname, int ofsx, int ofsy, int sizex, int sizey);
+void uiBeginPanels(const struct bContext *C, struct ARegion *ar);
+void uiEndPanels(const struct bContext *C, struct ARegion *ar);
 
-extern void uiBeginPanels(const struct bContext *C, struct ARegion *ar);
-extern void uiEndPanels(const struct bContext *C, struct ARegion *ar);
-extern void uiFreePanels(struct ListBase *lb);
-	
-extern void uiPanelsHome(struct ARegion *ar);
+struct Panel *uiBeginPanel(struct ARegion *ar, uiBlock *block, struct PanelType *pt);
+void uiEndPanel(uiBlock *block, int width, int height);
 
+void uiPanelsHome(struct ARegion *ar);
+
+/* deprecated */
+extern int uiNewPanel(const struct bContext *C, struct ARegion *ar, uiBlock *block, char *panelname, char *tabname, int ofsx, int ofsy, int sizex, int sizey);
 extern void uiNewPanelHeight(struct uiBlock *block, int sizey);
 extern void uiNewPanelTitle(struct uiBlock *block, char *str);
-struct Panel *uiPanelFromBlock(struct uiBlock *block);
 
 /* Handlers
  *

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-04-16 20:13:13 UTC (rev 19762)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-04-16 21:39:45 UTC (rev 19763)
@@ -1688,9 +1688,6 @@
 		ui_free_but(C, but);
 	}
 
-	if(block->panel) {
-		block->panel->active= 0;
-	}
 	BLI_freelistN(&block->saferct);
 	
 	MEM_freeN(block);

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c	2009-04-16 20:13:13 UTC (rev 19762)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c	2009-04-16 21:39:45 UTC (rev 19763)
@@ -1216,26 +1216,26 @@
 
 		if(pt->draw && (!pt->poll || pt->poll(C))) {
 			block= uiBeginBlock(C, ar, pt->idname, UI_EMBOSS);
-			
-			if(vertical) {
-				w= (ar->type->minsizex)? ar->type->minsizex-12: block->aspect*ar->winx-12;
-				em= (ar->type->minsizex)? 10: 20;
-			}
-			else {
-				w= (ar->type->minsizex)? ar->type->minsizex-12: UI_PANEL_WIDTH-12;
-				em= (ar->type->minsizex)? 10: 20;
-			}
+			panel= uiBeginPanel(ar, block, pt);
 
-			if(uiNewPanel(C, ar, block, pt->name, pt->name, x, y, w, 0)) {
-				panel= uiPanelFromBlock(block);
+			if(panel) {
+				if(vertical) {
+					w= (ar->type->minsizex)? ar->type->minsizex-12: block->aspect*ar->winx-12;
+					em= (ar->type->minsizex)? 10: 20;
+				}
+				else {
+					w= (ar->type->minsizex)? ar->type->minsizex-12: UI_PANEL_WIDTH-12;
+					em= (ar->type->minsizex)? 10: 20;
+				}
+
 				panel->type= pt;
-				panel->layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, x, y, w, em);
+				panel->layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, PNL_SAFETY, 0, w-2*PNL_SAFETY, em);
 
 				pt->draw(C, panel);
 
 				uiLayoutEnd(C, block, panel->layout, &xco, &yco);
 				panel->layout= NULL;
-				uiNewPanelHeight(block, y - yco + 12);
+				uiEndPanel(block, w, -yco + 12);
 			}
 			else {
 				w= PNL_HEADER;

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c	2009-04-16 20:13:13 UTC (rev 19762)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c	2009-04-16 21:39:45 UTC (rev 19763)
@@ -25,10 +25,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-/* 
-     a full doc with API notes can be found in bf-blender/blender/doc/interface_API.txt
-
- */
+/* a full doc with API notes can be found in bf-blender/blender/doc/interface_API.txt */
  
 #include <math.h>
 #include <stdlib.h>
@@ -63,11 +60,16 @@
 
 #include "interface_intern.h"
 
-/* Defines */
+/*********************** defines and structs ************************/
 
 #define ANIMATION_TIME		0.30
 #define ANIMATION_INTERVAL	0.02
 
+#define PNL_LAST_ADDED		1
+#define PNL_ACTIVE			2
+#define PNL_WAS_ACTIVE		4
+#define PNL_ANIM_ALIGN		8
+
 typedef enum uiHandlePanelState {
 	PANEL_STATE_DRAG,
 	PANEL_STATE_DRAG_SCALE,
@@ -89,12 +91,11 @@
 	int startsizex, startsizey;
 } uiHandlePanelData;
 
-static void panel_activate_state(bContext *C, Panel *pa, uiHandlePanelState state);
+static void panel_activate_state(const bContext *C, Panel *pa, uiHandlePanelState state);
 
-/* ******************************** */
+/*********************** space specific code ************************/
+/* temporary code to remove all sbuts stuff from panel code         */
 
-/* temporary code to remove all sbuts stuff from panel code */
-
 static int panel_aligned(ScrArea *sa, ARegion *ar)
 {
 	if(sa->spacetype==SPACE_BUTS && ar->regiontype == RGN_TYPE_WINDOW) {
@@ -107,26 +108,46 @@
 	return 0;
 }
 
-static int panels_re_align(ScrArea *sa, ARegion *ar)
+static int panels_re_align(ScrArea *sa, ARegion *ar, Panel **r_pa)
 {
+	Panel *pa;
+	int active= 0;
+
+	*r_pa= NULL;
+
 	if(sa->spacetype==SPACE_BUTS && ar->regiontype == RGN_TYPE_WINDOW) {
 		SpaceButs *sbuts= sa->spacedata.first;
 
 		if(sbuts->align)
 			if(sbuts->re_align || sbuts->mainbo!=sbuts->mainb || sbuts->tabo!=sbuts->tab[sbuts->mainb])
 				return 1;
-
-		return 0;
 	}
 	else if(ar->regiontype==RGN_TYPE_UI)
 		return 1;
+
+	for(pa=ar->panels.first; pa; pa=pa->next) {
+		if((pa->runtime_flag & PNL_WAS_ACTIVE) && !(pa->runtime_flag & PNL_ACTIVE))
+			return 1;
+		if(!(pa->runtime_flag & PNL_WAS_ACTIVE) && (pa->runtime_flag & PNL_ACTIVE))
+			return 1;
+		if(pa->activedata)
+			active= 1;
+	}
+
+	for(pa=ar->panels.first; pa; pa=pa->next) {
+		if(pa->runtime_flag & PNL_ANIM_ALIGN) {
+			if(!active)
+				*r_pa= pa;
+			return 1;
+		}
+	}
 	
 	return 0;
 }
 
-/* ************** panels ************* */
+/****************************** panels ******************************/
 
-static void copy_panel_offset(Panel *pa, Panel *papar)
+static void ui_panel_copy_offset(Panel *pa, Panel *papar)
 {
 	/* with respect to sizes... papar is parent */
 
@@ -134,30 +155,118 @@
 	pa->ofsy= papar->ofsy + papar->sizey-pa->sizey;
 }
 
-/* global... but will be NULLed after each 'newPanel' call */
-static char *panel_tabbed=NULL, *group_tabbed=NULL;
+Panel *uiBeginPanel(ARegion *ar, uiBlock *block, PanelType *pt)
+{
+	Panel *pa, *patab, *palast;
+	char *panelname= pt->name;
+	char *tabname= pt->name;
+	char *hookname= NULL;
+	
+	/* check if Panel exists, then use that one */
+	for(pa=ar->panels.first; pa; pa=pa->next)
+		if(strncmp(pa->panelname, panelname, UI_MAX_NAME_STR)==0)
+			if(strncmp(pa->tabname, tabname, UI_MAX_NAME_STR)==0)
+				break;
+	
+	if(pa) {
+		pa->type= pt;
+		BLI_remlink(&ar->panels, pa);
+	}
+	else {
+		/* new panel */
+		pa= MEM_callocN(sizeof(Panel), "new panel");
+		pa->type= pt;
+		BLI_strncpy(pa->panelname, panelname, UI_MAX_NAME_STR);
+		BLI_strncpy(pa->tabname, tabname, UI_MAX_NAME_STR);
+	
+		pa->ofsx= PNL_DIST;
+		pa->ofsy= PNL_DIST;
+		pa->sizex= 0;
+		pa->sizey= 0;
+		
+		/* make new Panel tabbed? */
+		if(hookname) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list