示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
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);
}
示例#4
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);
}
示例#5
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);
}
示例#6
0
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);
}
示例#7
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);
}