void ArpTextControl::ComputeDimens(ArpDimens& cur_dimens) { // Copy fill font to all children copy_font((BView*)this); float vw=0, vh=0; GetPreferredSize(&vw,&vh); const float divw = BasicFont()->StringWidth(Label()) + BasicFont()->StringWidth(" "); vw = divw+12+PV_FillFont.Value().StringWidth("WWWWWW"); cur_dimens.X().SetTo(divw, vw-divw-12, vw-divw-12, ArpAnySize, 0); cur_dimens.Y().SetTo(0, vh, vh, vh, 0); //printf("Left: %f, Width: %f, Divider: %f\n", // Frame().left, Frame().Width(), Divider()); ArpUniDimens& dx = cur_dimens.X(); float minb = dx.MinBody(); float prefb = dx.PrefBody(); float maxb = dx.MaxBody(); if( PV_MinTextString.Value().Length() > 0 ) { minb = PV_FillFont.Value().StringWidth(PV_MinTextString.Value().String()); } if( PV_PrefTextString.Value().Length() > 0 ) { prefb = PV_FillFont.Value().StringWidth(PV_PrefTextString.Value().String()); } if( PV_MaxTextString.Value().Length() > 0 ) { maxb = PV_FillFont.Value().StringWidth(PV_MaxTextString.Value().String()); } dx.SetBody(minb, prefb, maxb); dx.AddBody(12); }
void ArpIntControl::ComputeDimens(ArpDimens& cur_dimens) { float vw=0, vh=0; GetPreferredSize(&vw,&vh); const float divw = BasicFont()->StringWidth(Label()) + BasicFont()->StringWidth(" "); vw = divw+12+StringWidth("WWWWWW"); cur_dimens.X().SetTo(divw, vw-divw-12, vw-divw-12, ArpAnySize, 0); cur_dimens.Y().SetTo(0, vh, vh, vh, 0); //printf("Left: %f, Width: %f, Divider: %f\n", // Frame().left, Frame().Width(), Divider()); ArpUniDimens& dx = cur_dimens.X(); float minb = dx.MinBody(); float prefb = dx.PrefBody(); float maxb = dx.MaxBody(); minb = StringWidth(""); prefb = StringWidth("WWW"); maxb = StringWidth("WWWWWW"); dx.SetBody(minb, prefb, maxb); dx.AddBody(12); }
void ArpOutlineListView::ComputeDimens(ArpDimens& cur_dimens) { float min_w=0, min_h=0; float pref_w=0, pref_h=0; int32 num = CountItems(); int32 max_num = 4; for( int32 i=0; i<num; i++ ) { BListItem* item = ItemAt(i); if( item ) { item->Update(this,BasicFont()); float w = item->Width(); float h = item->Height(); min_h = max(min_h,h); pref_w = max(pref_w,w); if( max_num > 0 ) pref_h += h; max_num--; } } pref_h+=2; float fw = BasicFont()->StringWidth("WWWW"); font_height fhs; BasicFont()->GetHeight(&fhs); float fh = fhs.ascent+fhs.descent+fhs.leading; min_w = max(min_w,fw); min_h = max(min_h,fh); pref_w = max(pref_w,min_w); pref_h = max(pref_h,min_h); cur_dimens.X().SetTo(0, min_w, pref_w, ArpAnySize, 0); cur_dimens.Y().SetTo(0, min_h, pref_h, ArpAnySize, 0); }
void TestView::ComputeDimens(ArpDimens& cur_dimens) { float fw = BasicFont()->StringWidth("W"); font_height fhs; BasicFont()->GetHeight(&fhs); float fh = fhs.ascent+fhs.descent+fhs.leading; cur_dimens.X().SetTo(0, fw, fw*2, ArpAnySize, 0); cur_dimens.Y().SetTo(0, fh, fh*2, ArpAnySize, 0); }
void ArpBox::ComputeDimens(ArpDimens& cur_dimens) { ArpBaseLayout::ComputeDimens(cur_dimens); ArpUniDimens& curx(cur_dimens.X()); ArpUniDimens& cury(cur_dimens.Y()); if( curx.TotalMax() <= 0 ) curx.SetTo(0, 30, 30, 30, 0); if( cury.TotalMax() <= 0 ) cury.SetTo(0, 30, 30, 30, 0); ComputeIndents(); curx.AddLabel(indent_l,indent_r); cury.AddLabel(indent_t,indent_b); }
void ArpMenuField::ComputeDimens(ArpDimens& cur_dimens) { BMenu* menu = MenuBar(); BMenu* popup = Menu(); if( menu ) { copy_attrs(menu); copy_attrs(popup); menu->SetFont(&PV_MenuFont); menu->InvalidateLayout(); } get_view_dimens(&cur_dimens, this, false); font_height fhs; BasicFont()->GetHeight(&fhs); const float fh = fhs.ascent+fhs.descent+fhs.leading; float fw = BasicFont()->StringWidth("WWWW"); float pref_w=0; if( popup ) { int32 num = popup->CountItems(); for( int32 i=0; i<num; i++ ) { BMenuItem* item = popup->ItemAt(i); if( item ) { const float w=BasicFont()->StringWidth(item->Label()); ArpD(cdb << ADH << "Dimensions for popup label " << item->Label() << ": " << w << endl); if( w > pref_w ) pref_w = w; } } } cur_dimens.Y().SetTo(0, fh+12, fh+12, fh+12, 0); float labelWidth = (Label() && *Label()) ? BasicFont()->StringWidth(Label()) + BasicFont()->StringWidth(" ") : 0; cur_dimens.X().SetTo(labelWidth, (fw < pref_w ? fw : pref_w) + 20, pref_w + 20, pref_w + 20, 0); }
void ArpMenuBar::ComputeDimens(ArpDimens& cur_dimens) { InvalidateLayout(); // Copy my font to all children BFont font; GetFont(&font); copy_font((BMenu*)this,&font); get_view_dimens(&cur_dimens, this, false); cur_dimens.X().SetMaxBody(ArpAnySize); }