[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