public void populate(){

		float currentlineheight =0;
		float totalheight;
		Vec2u pp = getPopulatePad();
		Vec2u currentPoint = pp;
		
		ArrayList<GuiItem> items_cur_line = new ArrayList<GuiItem>();
		
		for(GuiItem g : items){
			if(		horizontal_wrap > 0
			&&		currentPoint.x + g.width_height().x + g.margins.left + g.margins.right > this.horizontal_wrap
			&& items_cur_line.size() > 0
			){
				for(GuiItem l : items_cur_line)
					l.drawing_offset.x += (horizontal_wrap - currentPoint.x)*((float)(1+horizontal_float)/2f);
				items_cur_line = new ArrayList<GuiItem>();
				currentPoint.y = currentlineheight+pp.y;
				total_wh.y +=currentlineheight;
				currentlineheight = 0;
				currentPoint.x = pp.x;
			}
			
			currentPoint.x += g.margins.left;
			g.drawing_offset.x = currentPoint.x;
			Vec2u gwh = g.width_height();
			totalheight = gwh.y + g.margins.top + g.margins.bottom;
			if(totalheight > currentlineheight){
				for(GuiItem l : items_cur_line) 
					l.drawing_offset.y += (totalheight -currentlineheight)*((float)(1+vertical_float)/2f);
				currentlineheight = totalheight;
			}else g.drawing_offset.y = (currentlineheight-totalheight)*((float)(1+vertical_float)/2f);
			currentPoint.x += gwh.x + g.margins.right;
			items_cur_line.add(g);
		}
		total_wh.x = (horizontal_wrap > 0)?horizontal_wrap:currentPoint.x;
		total_wh.y += padding.bottom;
	}