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

Brecht Van Lommel brecht at blender.org
Fri Dec 26 14:11:09 CET 2008


Revision: 18075
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18075
Author:   blendix
Date:     2008-12-26 14:11:04 +0100 (Fri, 26 Dec 2008)

Log Message:
-----------
UI: Panels

* API and usage is basically the same still.
* Panels were moved to region level. I first thought of keeping them at area
  level, but having them at region level it's simpler to handle events and do
  drawing, and also to integrate with view2d. They can still become area level
  overlapping regions, if we make a floating (or docked) region that can
  contain panels.
* Added back a few panels from the scene buttons for testing.

Issues still:
* The view2d handling and alignment refresh of panels is not correct yet in the
  buttons window. 
* I did not yet bring back the block handlers system. It was basically a system
  that stored which panel was open and where the events for that panel would go.
  Just a few functions, but not sure how it fits in 2.5.
* There was a case where dragging panels would not properly remove the window
  level handler, but could not redo anymore even though I don't think I fixed
  it.
* Some text in the panels goes past the end of the button, that is due to the
  checkmark button drawing, not related to this commit.

Other UI code changes:
* Renamed interface.h to interface_intern.h for consistency.
* Fixed some issues with freeing of blocks when they changed due to context.
* uiDrawBlock now takes a context pointer (mostly for block drawextra).

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
    branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
    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_draw.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_icons.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    branches/blender2.5/blender/source/blender/editors/interface/view2d.c
    branches/blender2.5/blender/source/blender/editors/screen/area.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
    branches/blender2.5/blender/source/blender/editors/space_action/action_draw.c
    branches/blender2.5/blender/source/blender/editors/space_action/action_header.c
    branches/blender2.5/blender/source/blender/editors/space_buttons/Makefile
    branches/blender2.5/blender/source/blender/editors/space_buttons/SConscript
    branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_header.c
    branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_intern.h
    branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_file/file_header.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_header.c
    branches/blender2.5/blender/source/blender/editors/space_info/info_header.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_header.c
    branches/blender2.5/blender/source/blender/editors/space_nla/nla_header.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_draw.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_header.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_header.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
    branches/blender2.5/blender/source/blender/editors/space_script/script_header.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_header.c
    branches/blender2.5/blender/source/blender/editors/space_sound/sound_header.c
    branches/blender2.5/blender/source/blender/editors/space_text/text_header.c
    branches/blender2.5/blender/source/blender/editors/space_time/time_header.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c
    branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_scene.c

Removed Paths:
-------------
    branches/blender2.5/blender/source/blender/editors/interface/interface.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2008-12-26 13:11:04 UTC (rev 18075)
@@ -123,6 +123,7 @@
 ARegion *BKE_area_region_copy(ARegion *ar)
 {
 	ARegion *newar= MEM_dupallocN(ar);
+	Panel *pa, *newpa, *patab;
 	
 	newar->handlers.first= newar->handlers.last= NULL;
 	newar->uiblocks.first= newar->uiblocks.last= NULL;
@@ -131,7 +132,24 @@
 	/* XXX regiondata callback */
 	if(ar->regiondata)
 		newar->regiondata= MEM_dupallocN(ar->regiondata);
+
+	newar->panels.first= newar->panels.last= NULL;
+	BLI_duplicatelist(&newar->panels, &ar->panels);
 	
+	/* copy panel pointers */
+	for(newpa= newar->panels.first; newpa; newpa= newpa->next) {
+		patab= newar->panels.first;
+		pa= ar->panels.first;
+		while(patab) {
+			if(newpa->paneltab == pa) {
+				newpa->paneltab = patab;
+				break;
+			}
+			patab= patab->next;
+			pa= pa->next;
+		}
+	}
+	
 	return newar;
 }
 
@@ -174,8 +192,12 @@
 /* not region itself */
 void BKE_area_region_free(ARegion *ar)
 {
-	if(ar && ar->type && ar->type->free)
-		ar->type->free(ar);
+	if(ar) {
+		if(ar->type && ar->type->free)
+			ar->type->free(ar);
+
+		BLI_freelistN(&ar->panels);
+	}
 }
 
 /* not area itself */
@@ -193,10 +215,6 @@
 	BLI_freelistN(&sa->regionbase);
 	BLI_freelistN(&sa->actionzones);
 	
-	BLI_freelistN(&sa->panels);
-	//	uiFreeBlocks(&sa->uiblocks);
-	//	uiFreePanels(&sa->panels);
-	
 #ifndef DISABLE_PYTHON
 	BPY_free_scriptlink(&sa->scriptlink);
 #endif

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2008-12-26 13:11:04 UTC (rev 18075)
@@ -3560,7 +3560,7 @@
 	if(sce->sculptdata.cumap)
 		direct_link_curvemapping(fd, sce->sculptdata.cumap);
 	else
-		; //XXX sculpt_reset_curve(&sce->sculptdata);
+		sculpt_reset_curve(&sce->sculptdata);
 
 	if(sce->ed) {
 		ListBase *old_seqbasep= &((Editing *)sce->ed)->seqbase;
@@ -4150,6 +4150,17 @@
 
 static void direct_link_region(FileData *fd, ARegion *ar)
 {
+	Panel *pa;
+
+	link_list(fd, &(ar->panels));
+
+	for(pa= ar->panels.first; pa; pa=pa->next) {
+		pa->paneltab= newdataadr(fd, pa->paneltab);
+		pa->active= 0;
+		pa->sortcounter= 0;
+		pa->activedata= NULL;
+	}
+
 	ar->handlers.first= ar->handlers.last= NULL;
 	ar->uiblocks.first= ar->uiblocks.last= NULL;
 	ar->headerstr= NULL;
@@ -4200,16 +4211,13 @@
 
 	/* areas */
 	for(sa= sc->areabase.first; sa; sa= sa->next) {
-		Panel *pa;
 		SpaceLink *sl;
 		ARegion *ar;
 
 		link_list(fd, &(sa->spacedata));
-		link_list(fd, &(sa->panels));
 		link_list(fd, &(sa->regionbase));
 
 		sa->handlers.first= sa->handlers.last= NULL;
-		sa->uiblocks.first= sa->uiblocks.last= NULL;
 		sa->type= NULL;	/* spacetype callbacks */
 		
 		/* accident can happen when read/save new file with older version */
@@ -4220,12 +4228,6 @@
 			BLI_addtail(&sa->spacedata, sinfo);
 		}
 		
-		for(pa= sa->panels.first; pa; pa=pa->next) {
-			pa->paneltab= newdataadr(fd, pa->paneltab);
-			pa->active= 0;
-			pa->sortcounter= 0;
-		}
-		
 		for (sl= sa->spacedata.first; sl; sl= sl->next) {
 			link_list(fd, &(sl->regionbase));
 
@@ -4705,19 +4707,19 @@
 static int map_223_keybd_code_to_224_keybd_code(int code)
 {
 	switch (code) {
-//XXX	case 312:	return F12KEY;
-//XXX		case 159:	return PADSLASHKEY;
-//XXX		case 161:	return PAD0;
-//XXX		case 154:	return PAD1;
-//XXX		case 150:	return PAD2;
-//XXX		case 155:	return PAD3;
-//XXX		case 151:	return PAD4;
-//XXX		case 156:	return PAD5;
-//XXX		case 152:	return PAD6;
-//XXX		case 157:	return PAD7;
-//XXX		case 153:	return PAD8;
-//XXX		case 158:	return PAD9;
-	default: return code;
+		case 312:	return 311; /* F12KEY */
+		case 159:	return 161; /* PADSLASHKEY */
+		case 161:	return 150; /* PAD0 */
+		case 154:	return 151; /* PAD1 */
+		case 150:	return 152; /* PAD2 */
+		case 155:	return 153; /* PAD3 */
+		case 151:	return 154; /* PAD4 */
+		case 156:	return 155; /* PAD5 */
+		case 152:	return 156; /* PAD6 */
+		case 157:	return 157; /* PAD7 */
+		case 153:	return 158; /* PAD8 */
+		case 158:	return 159; /* PAD9 */
+		default: return code;
 	}
 }
 

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c	2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c	2008-12-26 13:11:04 UTC (rev 18075)
@@ -1655,12 +1655,13 @@
 
 			writestruct(wd, DATA, "ScrArea", 1, sa);
 
-			for(pa= sa->panels.first; pa; pa= pa->next)
-				writestruct(wd, DATA, "Panel", 1, pa);
-			
-			for(ar= sa->regionbase.first; ar; ar= ar->next)
+			for(ar= sa->regionbase.first; ar; ar= ar->next) {
 				writestruct(wd, DATA, "ARegion", 1, ar);
 
+				for(pa= ar->panels.first; pa; pa= pa->next)
+					writestruct(wd, DATA, "Panel", 1, pa);
+			}
+
 			/* space handler scriptlinks */
 			write_scriptlink(wd, &sa->scriptlink);
 

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h	2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h	2008-12-26 13:11:04 UTC (rev 18075)
@@ -39,6 +39,7 @@
 struct gla2DDrawInfo;
 struct Object;
 struct bActionGroup;
+struct Ipo;
 struct IpoCurve;
 
 /* ************************************************ */

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2008-12-26 13:11:04 UTC (rev 18075)
@@ -176,7 +176,6 @@
 /* Common Drawing Functions */
 
 void uiEmboss(float x1, float y1, float x2, float y2, int sel);
-void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad, int active);
 void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad);
 void uiSetRoundBox(int type);
 void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad);
@@ -222,12 +221,13 @@
 
 uiBlock *uiBeginBlock(const struct bContext *C, struct ARegion *region, char *name, short dt, short font);
 void uiEndBlock(const struct bContext *C, uiBlock *block);
+void uiDrawBlock(const struct bContext *C, struct uiBlock *block);
 uiBlock *uiGetBlock(char *name, struct ARegion *ar);
 void uiFreeBlock(const struct bContext *C, uiBlock *block);
 void uiFreeBlocks(const struct bContext *C, struct ListBase *lb);
+void uiFreeInactiveBlocks(const struct bContext *C, struct ListBase *lb);
 
 void uiBoundsBlock(struct uiBlock *block, int addval);
-void uiDrawBlock(struct uiBlock *block);
 void uiTextBoundsBlock(uiBlock *block, int addval);
 
 void uiBlockSetButLock(uiBlock *block, int val, char *lockstr);
@@ -357,18 +357,16 @@
 
 extern void uiFreePanels(struct ListBase *lb);
 extern void uiNewPanelTabbed(char *, char *);
-extern int uiNewPanel(struct ScrArea *sa, struct uiBlock *block, char *panelname, char *tabname, int ofsx, int ofsy, int sizex, int sizey);
+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 uiDrawPanels(const struct bContext *C, int re_align);
 	
-extern void uiSetPanel_view2d(struct ScrArea *sa);
-extern void uiMatchPanel_view2d(struct ScrArea *sa);
+extern void uiSetPanelsView2d(struct ARegion *ar);
+extern void uiMatchPanelsView2d(struct ARegion *ar);
 
-extern void uiDrawBlocksPanels(struct ScrArea *sa, int re_align);
 extern void uiNewPanelHeight(struct uiBlock *block, int sizey);
 extern void uiNewPanelTitle(struct uiBlock *block, char *str);
-extern void uiPanelPush(struct uiBlock *block);
-extern void uiPanelPop(struct uiBlock *block);
 extern uiBlock *uiFindOpenPanelBlockName(ListBase *lb, char *name);
-extern int uiAlignPanelStep(struct ScrArea *sa, float fac);
+extern int uiAlignPanelStep(struct ScrArea *sa, struct ARegion *ar, float fac);
 extern void uiPanelControl(int);
 extern void uiSetPanelHandler(int);
 
@@ -383,6 +381,7 @@
 /* Handlers for regions with UI blocks */
 
 void UI_add_region_handlers(struct ListBase *handlers);
+void UI_add_area_handlers(struct ListBase *handlers);
 void UI_add_popup_handlers(struct ListBase *handlers, uiMenuBlockHandle *menu);
 
 /* Module initialization and exit */

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2008-12-26 13:11:04 UTC (rev 18075)
@@ -69,7 +69,7 @@
 #include "RNA_access.h"
 #include "RNA_types.h"
 
-#include "interface.h"
+#include "interface_intern.h"
 
 /* 
  * a full doc with API notes can be found in bf-blender/blender/doc/interface_API.txt
@@ -86,7 +86,6 @@
 
 /* ************* translation ************** */
 
-/* XXX 2.50 missing from context */
 int ui_translate_buttons()
 {
 	return (U.transopts & USER_TR_BUTTONS);
@@ -116,6 +115,12 @@
 
 	gx= *x;
 	gy= *y;
+
+	if(block->panel) {
+		gx += block->panel->ofsx;
+		gy += block->panel->ofsy;
+	}
+
 	*x= ((float)sx) + ((float)getsizex)*(0.5+ 0.5*(gx*block->winmat[0][0]+ gy*block->winmat[1][0]+ block->winmat[3][0]));
 	*y= ((float)sy) + ((float)getsizey)*(0.5+ 0.5*(gx*block->winmat[0][1]+ gy*block->winmat[1][1]+ block->winmat[3][1]));
 }
@@ -170,6 +175,11 @@
 
 	*y=  (a*(py-f) + d*(c-px))/(a*e-d*b);
 	*x= (px- b*(*y)- c)/a;
+
+	if(block->panel) {
+		*x -= block->panel->ofsx;
+		*y -= block->panel->ofsy;
+	}
 }
 
 void ui_window_to_block(const ARegion *ar, uiBlock *block, int *x, int *y)
@@ -482,7 +492,6 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list