blob: f2f5bd3a2e81a995a8cfba1f73e6386faff8aa57 [file] [log] [blame]
#include "menu.h"
#include "layout.h"
#define MENU_FIRST_COLUMN 3
#define MENU_SECOND_COLUMN 44
#define MENU_TOP 4
#define MENU_BOTTOM 16
void menu_layout(menu_t *menu)
{
int
x=MENU_FIRST_COLUMN,
y=MENU_TOP,
max_width = 0,
max_front_width = 0,
max_back_width = 0;
int
height = 0,
//temp_h,
temp_l;
item_t*
item;
if (menu->type == MENUTYPE_POPUP)
{
x = 0;
y = 0;
}
/* Find size maximums */
item = (item_t *)(menu->item_list.first);
while (item)
{
if (item->w > max_width)
max_width = item->w;
if (item->front_width > max_front_width)
max_front_width = item->front_width;
if (item->back_width > max_back_width)
max_back_width = item->back_width;
item = (item_t *)(item->link.next);
}
/* Layout phase */
item = (item_t *)(menu->item_list.first);
while (item)
{
item->x = x;
item->y = y;
temp_l = menu->item_spacing + item->h - 1;
y += temp_l;
if (y > MENU_BOTTOM || item->break_after == true)
{
y = MENU_TOP;
x = MENU_SECOND_COLUMN;
}
height += temp_l;
item->w = max_width;
item->front_width = max_front_width;
item->back_width = max_back_width;
item = (item_t *)(item->link.next);
}
height -= menu->item_spacing;
/* Set the first item to be the acrive one */
if (menu->current_item == NULL)
{
menu->current_item = (item_t *)(menu->item_list.first);
while (menu->current_item && menu->current_item->disabled == true)
{
menu->current_item = (item_t *)(menu->current_item->link.next);
}
}
menu->w = max_width;
menu->h = height;
}