[Add] List widget renders. Time to make it actually work properly?

This commit is contained in:
Allanis 2013-03-06 13:02:42 +00:00
parent 961875a799
commit f0fa480fb4
3 changed files with 48 additions and 2 deletions

View File

@ -42,11 +42,23 @@ static void news_close(char* str);
// The local market.
static void commodity_exchange(void) {
char** goods;
int ngoods;
goods = malloc(sizeof(char*)*3);
goods[0] = strdup("Heya!");
goods[1] = strdup("Just");
goods[2] = strdup("testing.");
ngoods = 3;
secondary_wid = window_create("Commodity Exchange", -1, -1, COMMODITY_WIDTH, COMMODITY_HEIGHT);
window_addButton(secondary_wid, -20, 20,
BUTTON_WIDTH, BUTTON_HEIGHT, "btnCommodityClose",
"Close", commodity_exchange_close);
window_addList(secondary_wid, 20, -40, COMMODITY_WIDTH-30, COMMODITY_HEIGHT-80-BUTTON_HEIGHT,
"lstGoods", goods, ngoods, -1);
}
static void commodity_exchange_close(char* str) {

View File

@ -48,6 +48,7 @@ typedef struct Widget_ {
char** options; // Pointer to the options.
int noptions; // total number of options.
int selected; // Currently selected option.
int pos; // Current topmost option (in view).
} lst;
} dat;
} Widget;
@ -175,8 +176,9 @@ void window_addList(const unsigned int wid, const int x, const int y,
wgt->dat.lst.options = items;
wgt->dat.lst.noptions = nitems;
wgt->dat.lst.selected = defitem; // -1 would be none.
wgt->dat.lst.pos = 0;
wgt->w = (double) w;
wgt->h = (double) h;
wgt->h = (double) h - ((h % (gl_defFont.h+2)) + 2);
if(x < 0) wgt->x = wdw->w - wgt->w + x;
else wgt->x = (double) x;
if(y < 0) wgt->y = wdw->h - wgt->h + y;
@ -664,10 +666,37 @@ static void toolkit_renderImage(Widget* img, double bx, double by) {
// Render the list.
static void toolkit_renderList(Widget* lst, double bx, double by) {
double x, y;
int i;
double x, y, tx, ty;
glColour* lc, *c, *oc;
x = bx + lst->x;
y = by + lst->y;
lc = &cGrey90;
c = &cGrey70;
oc = &cGrey30;
// List bg.
toolkit_drawRect(x, y, lst->w, lst->h, &cWhite, NULL);
// Inner outline.
toolkit_drawOutline(x, y, lst->w, lst->h, 1., lc, c);
// Outter outline.
toolkit_drawOutline(x, y, lst->w, lst->h, 2., oc, NULL);
// Draw content.
tx = (double)gl_screen.w/2. + x+2.;
ty = (double)gl_screen.h/2. + y+lst->h - 2. - gl_defFont.h;
y = ty-2.;
for(i = lst->dat.lst.pos; i < lst->dat.lst.noptions; i++) {
gl_printMax(&gl_defFont, (int)lst->w-4,
tx, ty, &cBlack, lst->dat.lst.options[i]);
ty -= 2 + gl_defFont.h;
if(ty-y > lst->h) break;
}
}
// Render the window.

View File

@ -19,6 +19,11 @@ void window_addText(const unsigned int wid, const int x, const int y,
void window_addImage(const unsigned int wid, const int x, const int y,
char* name, glTexture* image);
void window_addList(const unsigned int wid,
const int x, const int y, // Position.
const int w, const int h, // Size.
char* name, char** items, int nitems, int defitem);
// Modification
void window_modifyText(const unsigned int wid, char* name, char* newstring);
void window_modifyImage(const unsigned int wid, char* name, glTexture* image);