예제 #1
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);
}
예제 #2
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);
}
예제 #3
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);
}
예제 #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 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);
}
예제 #6
0
void ArpBox::ComputeIndents(void)
{
	float fw = BasicFont()->StringWidth("W");
	font_height fhs;
	BasicFont()->GetHeight(&fhs);
	float fh = fhs.ascent+fhs.descent+fhs.leading;
	float ps = PenSize();
	if( ps < 1 ) ps = 1;
	indent_l = indent_r = floor( (fw/2) + (ps*2) + .5 );
	indent_b = floor( (fh/2) + (ps*2) + .5 );

	const char* lab = Label();
	min_w = 0;
	if( lab && *lab ) {
		min_w = BasicFont()->StringWidth(lab)
				+ indent_l + indent_r;
		indent_t = floor( fh + ps*2 + .5 );
	} else {
		indent_t = floor( (fh/2) + ps*2 + .5 );
	}
}
예제 #7
0
void ArpMenuField::initialize()
{
	if( ParamSet() ) {
		ParamSet()->AddParameters(parameters_menufield, &suite_menufield);
		PV_MenuBackColor.Init(ParamSet(), MenuBackColorP,
							  ui_color(B_PANEL_BACKGROUND_COLOR),
							  "MenuBackColor");
		rgb_color black;
		black.red = black.green = black.blue = 0;
		black.alpha = 255;
		PV_MenuForeColor.Init(ParamSet(), MenuForeColorP,
							  black, "MenuTextColor");
		PV_MenuFont.Init(ParamSet(), MenuFontP,
						 *BasicFont(), "PlainFont");
	}
	
	SetBodyFill(ArpWest);
}
예제 #8
0
void ArpTextControl::initialize()
{
	if( ParamSet() ) {
		ParamSet()->AddParameters(parameters_textcontrol, &suite_textcontrol);
		PV_FillBackColor.Init(ParamSet(), FillBackColorP,
							  tint_color( ui_color(B_PANEL_BACKGROUND_COLOR),
										  B_LIGHTEN_MAX_TINT ),
							  "FillBackColor");
		rgb_color black;
		black.red = black.green = black.blue = 0;
		black.alpha = 255;
		PV_FillForeColor.Init(ParamSet(), FillForeColorP,
							  black, "FillTextColor");
		PV_FillFont.Init(ParamSet(), FillFontP,
						 *BasicFont(), "PlainFont");
		PV_MinTextString.Init(ParamSet(), MinTextStringP, "");
		PV_PrefTextString.Init(ParamSet(), PrefTextStringP, "");
		PV_MaxTextString.Init(ParamSet(), MaxTextStringP, "");
	}
	
	SetBodyFill(ArpWest);
}