81 lines
1.6 KiB
C
81 lines
1.6 KiB
C
#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;
|
|
}
|