Revision: 37273 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37273 Author: blendix Date: 2011-06-06 20:07:08 +0000 (Mon, 06 Jun 2011) Log Message: ----------- Cycles: UI tweak some quick code to auto hide scrollbars. Not happy with this yet because it runs python draw functions twice when scrollers are showing.
Modified Paths: -------------- branches/cycles/source/blender/editors/include/UI_interface.h branches/cycles/source/blender/editors/interface/interface_panel.c branches/cycles/source/blender/editors/interface/interface_style.c branches/cycles/source/blender/editors/interface/view2d.c branches/cycles/source/blender/editors/screen/area.c Modified: branches/cycles/source/blender/editors/include/UI_interface.h =================================================================== --- branches/cycles/source/blender/editors/include/UI_interface.h 2011-06-06 20:04:58 UTC (rev 37272) +++ branches/cycles/source/blender/editors/include/UI_interface.h 2011-06-06 20:07:08 UTC (rev 37273) @@ -583,6 +583,7 @@ void uiBeginPanels(const struct bContext *C, struct ARegion *ar); void uiEndPanels(const struct bContext *C, struct ARegion *ar); +void uiDrawPanels(const struct bContext *C, struct ARegion *ar); struct Panel *uiBeginPanel(struct ScrArea *sa, struct ARegion *ar, uiBlock *block, struct PanelType *pt, int *open); void uiEndPanel(uiBlock *block, int width, int height); Modified: branches/cycles/source/blender/editors/interface/interface_panel.c =================================================================== --- branches/cycles/source/blender/editors/interface/interface_panel.c 2011-06-06 20:04:58 UTC (rev 37272) +++ branches/cycles/source/blender/editors/interface/interface_panel.c 2011-06-06 20:07:08 UTC (rev 37273) @@ -846,7 +846,12 @@ if(firstpa) firstpa->runtime_flag |= PNL_FIRST; +} +void uiDrawPanels(const bContext *C, ARegion *ar) +{ + uiBlock *block; + UI_ThemeClearColor(TH_BACK); /* draw panels, selected on top */ Modified: branches/cycles/source/blender/editors/interface/interface_style.c =================================================================== --- branches/cycles/source/blender/editors/interface/interface_style.c 2011-06-06 20:04:58 UTC (rev 37272) +++ branches/cycles/source/blender/editors/interface/interface_style.c 2011-06-06 20:07:08 UTC (rev 37273) @@ -122,7 +122,7 @@ style->buttonspacex= 8; style->buttonspacey= 2; style->panelspace= 8; - style->panelouter= 4; + style->panelouter= 3; return style; } Modified: branches/cycles/source/blender/editors/interface/view2d.c =================================================================== --- branches/cycles/source/blender/editors/interface/view2d.c 2011-06-06 20:04:58 UTC (rev 37272) +++ branches/cycles/source/blender/editors/interface/view2d.c 2011-06-06 20:07:08 UTC (rev 37273) @@ -278,10 +278,9 @@ v2d->align= (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y); v2d->keeptot= V2D_KEEPTOT_BOUNDS; - /*v2d->scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + v2d->scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); v2d->scroll |= V2D_SCROLL_HORIZONTAL_HIDE; - v2d->scroll &= ~V2D_SCROLL_VERTICAL_HIDE;*/ - v2d->scroll= 0; + v2d->scroll &= ~V2D_SCROLL_VERTICAL_HIDE; v2d->tot.xmin= 0.0f; v2d->tot.xmax= winx; @@ -291,7 +290,7 @@ v2d->cur.xmin= 0.0f; /* bad workaround for keeping zoom level with scrollers */ - v2d->cur.xmax= (winx/* - V2D_SCROLL_WIDTH*/)*panelzoom; + v2d->cur.xmax= (winx - V2D_SCROLL_WIDTH)*panelzoom; v2d->cur.ymax= 0.0f; v2d->cur.ymin= (-winy)*panelzoom; Modified: branches/cycles/source/blender/editors/screen/area.c =================================================================== --- branches/cycles/source/blender/editors/screen/area.c 2011-06-06 20:04:58 UTC (rev 37272) +++ branches/cycles/source/blender/editors/screen/area.c 2011-06-06 20:07:08 UTC (rev 37273) @@ -1145,38 +1145,22 @@ /************************ standard UI regions ************************/ -void ED_region_panels(const bContext *C, ARegion *ar, int vertical, const char *context, int contextnr) +static void region_panels_layout(const bContext *C, ARegion *ar, int vertical, const char *context, int w, int em, int *r_x, int *r_y) { ScrArea *sa= CTX_wm_area(C); - uiStyle *style= U.uistyles.first; - uiBlock *block; PanelType *pt; Panel *panel; - View2D *v2d= &ar->v2d; - View2DScrollers *scrollers; - int xco, yco, x, y, miny=0, w, em, header, triangle, open, newcontext= 0; + uiBlock *block; + uiStyle *style= U.uistyles.first; + int x, y, miny=0, xco, yco; + int open, header, triangle; - if(contextnr >= 0) - newcontext= UI_view2d_tab_set(v2d, contextnr); - - if(vertical) { - w= v2d->cur.xmax - v2d->cur.xmin; - em= (ar->type->prefsizex)? 10: 20; - } - else { - w= UI_PANEL_WIDTH; - em= (ar->type->prefsizex)? 10: 20; - } - x= 0; y= -style->panelouter; /* create panels */ uiBeginPanels(C, ar); - /* set view2d view matrix for scrolling (without scrollers) */ - UI_view2d_view_ortho(v2d); - for(pt= ar->type->paneltypes.first; pt; pt= pt->next) { /* verify context */ if(context) @@ -1261,6 +1245,40 @@ y= UI_PANEL_WIDTH; } + uiEndPanels(C, ar); + + *r_x = x; + *r_y = y; +} + +void ED_region_panels(const bContext *C, ARegion *ar, int vertical, const char *context, int contextnr) +{ + View2D *v2d= &ar->v2d; + View2DScrollers *scrollers; + int x, y, w, em, newcontext= 0, need_scrollers; + + if(contextnr >= 0) + newcontext= UI_view2d_tab_set(v2d, contextnr); + + if(vertical) { + w= v2d->cur.xmax - v2d->cur.xmin; + em= (ar->type->prefsizex)? 10: 20; + } + else { + w= UI_PANEL_WIDTH; + em= (ar->type->prefsizex)? 10: 20; + } + + /* try to draw without scrollbars */ + UI_view2d_view_ortho(v2d); + + region_panels_layout(C, ar, vertical, context, ar->winx, em, &x, &y); + + /* if it doesn't fit, draw again in smaller space with scrollers */ + need_scrollers = (abs(y) > ar->winy); + if(need_scrollers) + region_panels_layout(C, ar, vertical, context, ar->winx-V2D_SCROLL_WIDTH, em, &x, &y); + /* clear */ UI_ThemeClearColor((ar->type->regionid == RGN_TYPE_PREVIEW)?TH_PREVIEW_BACK:TH_BACK); glClear(GL_COLOR_BUFFER_BIT); @@ -1270,8 +1288,9 @@ /* only allow scrolling in vertical direction */ v2d->keepofs |= V2D_LOCKOFS_X|V2D_KEEPOFS_Y; v2d->keepofs &= ~(V2D_LOCKOFS_Y|V2D_KEEPOFS_X); - //v2d->scroll |= V2D_SCROLL_HORIZONTAL_HIDE; - //v2d->scroll &= ~V2D_SCROLL_VERTICAL_HIDE; + v2d->scroll &= ~(V2D_SCROLL_HORIZONTAL_HIDE|V2D_SCROLL_VERTICAL_HIDE); + if(!need_scrollers) + v2d->scroll |= V2D_SCROLL_HORIZONTAL_HIDE; // don't jump back when panels close or hide if(!newcontext) @@ -1286,8 +1305,9 @@ v2d->keepofs &= ~(V2D_LOCKOFS_X|V2D_LOCKOFS_Y|V2D_KEEPOFS_X|V2D_KEEPOFS_Y); //v2d->keepofs |= V2D_LOCKOFS_Y|V2D_KEEPOFS_X; //v2d->keepofs &= ~(V2D_LOCKOFS_X|V2D_KEEPOFS_Y); - //v2d->scroll |= V2D_SCROLL_VERTICAL_HIDE; - //v2d->scroll &= ~V2D_SCROLL_HORIZONTAL_HIDE; + v2d->scroll &= ~(V2D_SCROLL_HORIZONTAL_HIDE|V2D_SCROLL_VERTICAL_HIDE); + if(!need_scrollers) + v2d->scroll |= V2D_SCROLL_VERTICAL_HIDE; // don't jump back when panels close or hide if(!newcontext) @@ -1297,20 +1317,23 @@ // +V2D_SCROLL_HEIGHT is workaround to set the actual height UI_view2d_totRect_set(v2d, x+V2D_SCROLL_WIDTH, y+V2D_SCROLL_HEIGHT); + UI_view2d_totRect_set(v2d, x+V2D_SCROLL_WIDTH, y+V2D_SCROLL_HEIGHT); /* set the view */ UI_view2d_view_ortho(v2d); /* this does the actual drawing! */ - uiEndPanels(C, ar); + uiDrawPanels(C, ar); /* restore view matrix */ UI_view2d_view_restore(C); /* scrollers */ - //scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); - //UI_view2d_scrollers_draw(C, v2d, scrollers); - //UI_view2d_scrollers_free(scrollers); + if(need_scrollers) { + scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + UI_view2d_scrollers_draw(C, v2d, scrollers); + UI_view2d_scrollers_free(scrollers); + } } void ED_region_panels_init(wmWindowManager *wm, ARegion *ar) @@ -1319,10 +1342,9 @@ // XXX quick hacks for files saved with 2.5 already (i.e. the builtin defaults file) // scrollbars for button regions - /*ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); + ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM); ar->v2d.scroll |= V2D_SCROLL_HORIZONTAL_HIDE; - ar->v2d.scroll &= ~V2D_SCROLL_VERTICAL_HIDE;*/ - ar->v2d.scroll= 0; + ar->v2d.scroll &= ~V2D_SCROLL_VERTICAL_HIDE; ar->v2d.keepzoom |= V2D_KEEPZOOM; // correctly initialised User-Prefs? _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs