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

Brecht Van Lommel brecht at blender.org
Thu Jul 30 00:57:54 CEST 2009


Revision: 22031
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22031
Author:   blendix
Date:     2009-07-30 00:57:53 +0200 (Thu, 30 Jul 2009)

Log Message:
-----------
2.5: Buttons View

* When resizing the window, the top position is now preserved,
  instead of the center position.
* Fix zoom level not being preserved in various cases, when
  changing both with and height. This replaces some earlier code
  which did this at screen level but wasn't very reliable.
* Different tabs now each preserve their own scroll.
* When switching between tabs, it now scrolls to show as many
  buttons as possible, instead of possibly showing empty space.
  There is a trade-off here between doing that keeping the
  buttons in the same place, no ideal solution exists I think.
* Change zooming in/out to be symmetric, for example doing
  numpad + then - did not give the original zoom level back.
* Added some calls to avoid hanging tooltips when manipulating
  the view.

Internals:
* Added V2D_KEEPOFS_X and V2D_KEEPOFS_Y to keep the top/bottom
  rather than the center.
* Renamed V2D_KEEPZOOM to V2D_LIMITZOOM (seems more appropriate),
  and make V2D_KEEPZOOM preserve the zoom level.

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/editors/include/ED_screen.h
    branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h
    branches/blender2.5/blender/source/blender/editors/interface/view2d.c
    branches/blender2.5/blender/source/blender/editors/interface/view2d_ops.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_buttons/space_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_console/space_console.c
    branches/blender2.5/blender/source/blender/editors/space_file/space_file.c
    branches/blender2.5/blender/source/blender/editors/space_graph/space_graph.c
    branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
    branches/blender2.5/blender/source/blender/editors/space_info/space_info.c
    branches/blender2.5/blender/source/blender/editors/space_logic/space_logic.c
    branches/blender2.5/blender/source/blender/editors/space_nla/space_nla.c
    branches/blender2.5/blender/source/blender/editors/space_node/space_node.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/space_sequencer.c
    branches/blender2.5/blender/source/blender/editors/space_text/space_text.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_view2d_types.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2009-07-29 22:37:33 UTC (rev 22030)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2009-07-29 22:57:53 UTC (rev 22031)
@@ -179,6 +179,9 @@
 		else
 			newar->regiondata= MEM_dupallocN(ar->regiondata);
 	}
+
+	if(ar->v2d.tab_offset)
+		newar->v2d.tab_offset= MEM_dupallocN(ar->v2d.tab_offset);
 	
 	newar->panels.first= newar->panels.last= NULL;
 	BLI_duplicatelist(&newar->panels, &ar->panels);
@@ -271,10 +274,14 @@
 	}
 	else if(ar->type && ar->type->free)
 		ar->type->free(ar);
+	
+	if(ar->v2d.tab_offset) {
+		MEM_freeN(ar->v2d.tab_offset);
+		ar->v2d.tab_offset= NULL;
+	}
 
-	if(ar) {
+	if(ar)
 		BLI_freelistN(&ar->panels);
-	}
 }
 
 /* not area itself */

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-07-29 22:37:33 UTC (rev 22030)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-07-29 22:57:53 UTC (rev 22031)
@@ -4681,6 +4681,9 @@
 		}
 	}
 	
+	ar->v2d.tab_offset= NULL;
+	ar->v2d.tab_num= 0;
+	ar->v2d.tab_cur= 0;
 	ar->handlers.first= ar->handlers.last= NULL;
 	ar->uiblocks.first= ar->uiblocks.last= NULL;
 	ar->headerstr= NULL;
@@ -5654,7 +5657,7 @@
 	
 	/* initialise view2d data for header region, to allow panning */
 	/* is copy from ui_view2d.c */
-	ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT);
+	ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT);
 	ar->v2d.keepofs = V2D_LOCKOFS_Y;
 	ar->v2d.keeptot = V2D_KEEPTOT_STRICT; 
 	ar->v2d.align = V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y;
@@ -5847,7 +5850,7 @@
 				memcpy(&ar->v2d, &snode->v2d, sizeof(View2D));
 				
 				ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM);
-				ar->v2d.keepzoom= V2D_KEEPZOOM|V2D_KEEPASPECT;
+				ar->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT;
 				break;
 			}
 			case SPACE_BUTS:
@@ -5868,7 +5871,7 @@
 				ar->regiontype= RGN_TYPE_WINDOW;
 				ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM_O);
 				ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y);
-				ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT);
+				ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT);
 				break;
 			}
 			case SPACE_TEXT:
@@ -8199,7 +8202,7 @@
 							simasel->v2d.minzoom= 0.5f;
 							simasel->v2d.maxzoom= 1.21f;						
 							simasel->v2d.scroll= 0;
-							simasel->v2d.keepzoom= V2D_KEEPZOOM|V2D_KEEPASPECT;
+							simasel->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT;
 							simasel->v2d.keeptot= 0;
 							simasel->prv_h = 96;
 							simasel->prv_w = 96;

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-29 22:37:33 UTC (rev 22030)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2009-07-29 22:57:53 UTC (rev 22031)
@@ -55,7 +55,7 @@
 void	ED_region_tag_redraw(struct ARegion *ar);
 void	ED_region_tag_redraw_partial(struct ARegion *ar, struct rcti *rct);
 void	ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
-void	ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, char *context);
+void	ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, char *context, int contextnr);
 void	ED_region_header_init(struct ARegion *ar);
 void	ED_region_header(const struct bContext *C, struct ARegion *ar);
 

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h	2009-07-29 22:37:33 UTC (rev 22030)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h	2009-07-29 22:57:53 UTC (rev 22031)
@@ -145,11 +145,16 @@
 void UI_view2d_region_reinit(struct View2D *v2d, short type, int winx, int winy);
 
 void UI_view2d_curRect_validate(struct View2D *v2d);
+void UI_view2d_curRect_validate_resize(struct View2D *v2d, int resize);
 void UI_view2d_curRect_reset(struct View2D *v2d);
 void UI_view2d_sync(struct bScreen *screen, struct ScrArea *sa, struct View2D *v2dcur, int flag);
 
 void UI_view2d_totRect_set(struct View2D *v2d, int width, int height);
+void UI_view2d_totRect_set_resize(struct View2D *v2d, int width, int height, int resize);
 
+/* per tab offsets, returns 1 if tab changed */
+int UI_view2d_tab_set(struct View2D *v2d, int tab);
+
 /* view matrix operations */
 void UI_view2d_view_ortho(const struct bContext *C, struct View2D *v2d);
 void UI_view2d_view_orthoSpecial(const struct bContext *C, struct View2D *v2d, short xaxis);

Modified: branches/blender2.5/blender/source/blender/editors/interface/view2d.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/view2d.c	2009-07-29 22:37:33 UTC (rev 22030)
+++ branches/blender2.5/blender/source/blender/editors/interface/view2d.c	2009-07-29 22:57:53 UTC (rev 22031)
@@ -154,13 +154,15 @@
  */
 void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
 {
-	short tot_changed= 0;
+	short tot_changed= 0, init= 0;
 	uiStyle *style= U.uistyles.first;
 
 	/* initialise data if there is a need for such */
 	if ((v2d->flag & V2D_IS_INITIALISED) == 0) {
 		/* set initialised flag so that View2D doesn't get reinitialised next time again */
 		v2d->flag |= V2D_IS_INITIALISED;
+
+		init= 1;
 		
 		/* see eView2D_CommonViewTypes in UI_view2d.h for available view presets */
 		switch (type) {
@@ -170,7 +172,7 @@
 			case V2D_COMMONVIEW_STANDARD:
 			{
 				/* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */
-				v2d->keepzoom= (V2D_KEEPASPECT|V2D_KEEPZOOM);
+				v2d->keepzoom= (V2D_KEEPASPECT|V2D_LIMITZOOM);
 				v2d->minzoom= 0.01f;
 				v2d->maxzoom= 1000.0f;
 				
@@ -197,7 +199,7 @@
 			case V2D_COMMONVIEW_LIST:
 			{
 				/* zoom + aspect ratio are locked */
-				v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT);
+				v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT);
 				v2d->minzoom= v2d->maxzoom= 1.0f;
 				
 				/* tot rect has strictly regulated placement, and must only occur in +/- quadrant */
@@ -214,7 +216,7 @@
 			case V2D_COMMONVIEW_STACK:
 			{
 				/* zoom + aspect ratio are locked */
-				v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT);
+				v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT);
 				v2d->minzoom= v2d->maxzoom= 1.0f;
 				
 				/* tot rect has strictly regulated placement, and must only occur in +/+ quadrant */
@@ -230,7 +232,7 @@
 			case V2D_COMMONVIEW_HEADER:
 			{
 				/* zoom + aspect ratio are locked */
-				v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT);
+				v2d->keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT);
 				v2d->minzoom= v2d->maxzoom= 1.0f;
 				v2d->min[0]= v2d->max[0]= (float)(winx-1);
 				v2d->min[1]= v2d->max[1]= (float)(winy-1);
@@ -257,9 +259,10 @@
 				float panelzoom= (style) ? style->panelzoom : 1.0f;
 				
 				/* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */
-				v2d->keepzoom= (V2D_KEEPASPECT|V2D_KEEPZOOM);
+				v2d->keepzoom= (V2D_KEEPASPECT|V2D_LIMITZOOM|V2D_KEEPZOOM);
 				v2d->minzoom= 0.5f;
 				v2d->maxzoom= 2.0f;
+				//tot_changed= 1;
 				
 				v2d->align= (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y);
 				v2d->keeptot= V2D_KEEPTOT_BOUNDS;
@@ -298,17 +301,16 @@
 	
 	/* set 'tot' rect before setting cur? */
 	if (tot_changed) 
-		UI_view2d_totRect_set(v2d, winx, winy);
+		UI_view2d_totRect_set_resize(v2d, winx, winy, !init);
 	else
-		UI_view2d_curRect_validate(v2d);
-	
+		UI_view2d_curRect_validate_resize(v2d, !init);
 }
 
 /* Ensure View2D rects remain in a viable configuration 
  *	- cur is not allowed to be: larger than max, smaller than min, or outside of tot
  */
 // XXX pre2.5 -> this used to be called  test_view2d()
-void UI_view2d_curRect_validate(View2D *v2d)
+void UI_view2d_curRect_validate_resize(View2D *v2d, int resize)
 {
 	float totwidth, totheight, curwidth, curheight, width, height;
 	float winx, winy;
@@ -351,10 +353,30 @@
 	if(winx<1) winx= 1;
 	if(winy<1) winy= 1;
 	
-	/* keepzoom (V2D_KEEPZOOM set), indicates that zoom level on each axis must not exceed limits 
+	/* V2D_LIMITZOOM indicates that zoom level should be preserved when the window size changes */
+	if (resize && (v2d->keepzoom & V2D_KEEPZOOM)) {
+		float zoom, oldzoom;
+
+		if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) {
+			zoom= winx / width;
+			oldzoom= v2d->oldwinx / curwidth;
+
+			if(oldzoom != zoom)
+				width *= zoom/oldzoom;
+		}
+
+		if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0) {
+			zoom= winy / height;
+			oldzoom= v2d->oldwiny / curheight;
+
+			if(oldzoom != zoom)
+				height *= zoom/oldzoom;
+		}
+	}
+	/* keepzoom (V2D_LIMITZOOM set), indicates that zoom level on each axis must not exceed limits 
 	 * NOTE: in general, it is not expected that the lock-zoom will be used in conjunction with this
 	 */
-	if (v2d->keepzoom & V2D_KEEPZOOM) {
+	else if (v2d->keepzoom & V2D_LIMITZOOM) {
 		float zoom, fac;
 		
 		/* check if excessive zoom on x-axis */
@@ -460,11 +482,17 @@
 	if ((width != curwidth) || (height != curheight)) {
 		float temp, dh;
 		
-		/* resize from centerpoint */
+		/* resize from centerpoint, unless otherwise specified */
 		if (width != curwidth) {
 			if (v2d->keepofs & V2D_LOCKOFS_X) {
 				cur->xmax += width - (cur->xmax - cur->xmin);
 			}
+			else if (v2d->keepofs & V2D_KEEPOFS_X) {
+				if(v2d->align & V2D_ALIGN_NO_POS_X)
+					cur->xmin -= width - (cur->xmax - cur->xmin);
+				else
+					cur->xmax += width - (cur->xmax - cur->xmin);
+			}
 			else {
 				temp= (cur->xmax + cur->xmin) * 0.5f;
 				dh= width * 0.5f;
@@ -477,6 +505,12 @@
 			if (v2d->keepofs & V2D_LOCKOFS_Y) {
 				cur->ymax += height - (cur->ymax - cur->ymin);
 			}
+			else if (v2d->keepofs & V2D_KEEPOFS_Y) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list