[Add] New rectangle widget. More widget creation checking.
This commit is contained in:
parent
c5280cb4b3
commit
9d08ff3ae0
@ -12,7 +12,8 @@ typedef enum WidgetType_ {
|
|||||||
WIDGET_BUTTON,
|
WIDGET_BUTTON,
|
||||||
WIDGET_TEXT,
|
WIDGET_TEXT,
|
||||||
WIDGET_IMAGE,
|
WIDGET_IMAGE,
|
||||||
WIDGET_LIST
|
WIDGET_LIST,
|
||||||
|
WIDGET_RECT
|
||||||
} WidgetType;
|
} WidgetType;
|
||||||
|
|
||||||
typedef enum WidgetStatus_ {
|
typedef enum WidgetStatus_ {
|
||||||
@ -55,6 +56,11 @@ typedef struct Widget_ {
|
|||||||
int pos; // Current topmost option (in view).
|
int pos; // Current topmost option (in view).
|
||||||
void (*fptr) (char*); // Modify callback.
|
void (*fptr) (char*); // Modify callback.
|
||||||
} lst;
|
} lst;
|
||||||
|
// Widget rect.
|
||||||
|
struct {
|
||||||
|
glColour* colour; // Background colour.
|
||||||
|
int border; // Border.
|
||||||
|
} rct;
|
||||||
} dat;
|
} dat;
|
||||||
} Widget;
|
} Widget;
|
||||||
|
|
||||||
@ -101,6 +107,7 @@ static void toolkit_renderButton(Widget* btn, double bx, double by);
|
|||||||
static void toolkit_renderText(Widget* txt, double bx, double by);
|
static void toolkit_renderText(Widget* txt, double bx, double by);
|
||||||
static void toolkit_renderImage(Widget* img, double bx, double by);
|
static void toolkit_renderImage(Widget* img, double bx, double by);
|
||||||
static void toolkit_renderList(Widget* lst, double bx, double by);
|
static void toolkit_renderList(Widget* lst, double bx, double by);
|
||||||
|
static void toolkit_renderRect(Widget* rct, double bx, double by);
|
||||||
static void toolkit_drawOutline(double x, double y, double w,
|
static void toolkit_drawOutline(double x, double y, double w,
|
||||||
double h, double b, glColour* c, glColour* lc);
|
double h, double b, glColour* c, glColour* lc);
|
||||||
static void toolkit_drawRect(double x, double y, double w, double h,
|
static void toolkit_drawRect(double x, double y, double w, double h,
|
||||||
@ -151,7 +158,8 @@ void window_addText(const unsigned int wid, const int x, const int y,
|
|||||||
else wgt->x = (double)x;
|
else wgt->x = (double)x;
|
||||||
if(y < 0) wgt->y = wdw->h + y - h;
|
if(y < 0) wgt->y = wdw->h + y - h;
|
||||||
else wgt->y = (double) y;
|
else wgt->y = (double) y;
|
||||||
wgt->dat.txt.colour = colour;
|
if(colour == NULL) wgt->dat.txt.colour = &cBlack;
|
||||||
|
else wgt->dat.txt.colour = colour;
|
||||||
wgt->dat.txt.centered = centered;
|
wgt->dat.txt.centered = centered;
|
||||||
if(string) wgt->dat.txt.text = strdup(string);
|
if(string) wgt->dat.txt.text = strdup(string);
|
||||||
else wgt->dat.txt.text = NULL;
|
else wgt->dat.txt.text = NULL;
|
||||||
@ -167,11 +175,14 @@ void window_addImage(const unsigned int wid, const int x, const int y,
|
|||||||
wgt->type = WIDGET_IMAGE;
|
wgt->type = WIDGET_IMAGE;
|
||||||
wgt->name = strdup(name);
|
wgt->name = strdup(name);
|
||||||
|
|
||||||
// Set the propertied.
|
// Set the properties.
|
||||||
wgt->dat.img.image = image;
|
wgt->dat.img.image = image;
|
||||||
if(x < 0) wgt->x = wdw->w - wgt->dat.img.image->sw + x;
|
wgt->w = (image == NULL) ? 0 : wgt->dat.img.image->sw;
|
||||||
|
wgt->h = (image == NULL) ? 0 : wgt->dat.img.image->sh;
|
||||||
|
if(x < 0) wgt->x = wdw->w - wgt->w + x;
|
||||||
else wgt->x = (double)x;
|
else wgt->x = (double)x;
|
||||||
if(y < 0) wgt->y = wdw->h + y;
|
if(y < 0) wgt->y = wdw->h + y;
|
||||||
|
//if(y < 0) wgt->y = wdw->h - wgt->h + y;
|
||||||
else wgt->y = (double)y;
|
else wgt->y = (double)y;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,6 +213,26 @@ void window_addList(const unsigned int wid, const int x, const int y,
|
|||||||
toolkit_nextFocus();
|
toolkit_nextFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void window_addRect(const unsigned int wid, const int x, const int y, const int w,
|
||||||
|
const int h, char* name, glColour* colour, int border) {
|
||||||
|
|
||||||
|
Window* wdw = window_wget(wid);
|
||||||
|
Widget* wgt = window_newWidget(wdw);
|
||||||
|
|
||||||
|
wgt->type = WIDGET_RECT;
|
||||||
|
wgt->name = strdup(name);
|
||||||
|
|
||||||
|
wgt->dat.rct.colour = colour;
|
||||||
|
wgt->dat.rct.border = border;
|
||||||
|
|
||||||
|
wgt->w = (double)w;
|
||||||
|
wgt->h = (double)h;
|
||||||
|
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;
|
||||||
|
else wgt->y = (double)y;
|
||||||
|
}
|
||||||
|
|
||||||
// Return pointer to newly allocated widget.
|
// Return pointer to newly allocated widget.
|
||||||
static Widget* window_newWidget(Window* w) {
|
static Widget* window_newWidget(Window* w) {
|
||||||
Widget* wgt = NULL;
|
Widget* wgt = NULL;
|
||||||
@ -595,6 +626,9 @@ static void window_render(Window* w) {
|
|||||||
case WIDGET_LIST:
|
case WIDGET_LIST:
|
||||||
toolkit_renderList(&w->widgets[i], x, y);
|
toolkit_renderList(&w->widgets[i], x, y);
|
||||||
break;
|
break;
|
||||||
|
case WIDGET_RECT:
|
||||||
|
toolkit_renderRect(&w->widgets[i], x, y);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Focus widget.
|
// Focus widget.
|
||||||
@ -736,6 +770,30 @@ static void toolkit_renderList(Widget* lst, double bx, double by) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Render a rectangle.
|
||||||
|
static void toolkit_renderRect(Widget* rct, double bx, double by) {
|
||||||
|
double x, y;
|
||||||
|
glColour* lc, *c, *oc;
|
||||||
|
|
||||||
|
x = bx + rct->x;
|
||||||
|
y = by + rct->y;
|
||||||
|
|
||||||
|
lc = &cGrey90;
|
||||||
|
c = &cGrey70;
|
||||||
|
oc = &cGrey30;
|
||||||
|
|
||||||
|
if(rct->dat.rct.colour)
|
||||||
|
// Draw rect only if it exists.
|
||||||
|
toolkit_drawRect(x, y, rct->w, rct->h, rct->dat.rct.colour, NULL);
|
||||||
|
|
||||||
|
if(rct->dat.rct.border) {
|
||||||
|
// Inner outline.
|
||||||
|
toolkit_drawOutline(x, y, rct->w, rct->h, 0., lc, c);
|
||||||
|
// Outter outline.
|
||||||
|
toolkit_drawOutline(x, y, rct->w, rct->h, 1., oc, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Render the window.
|
// Render the window.
|
||||||
void toolkit_render(void) {
|
void toolkit_render(void) {
|
||||||
int i;
|
int i;
|
||||||
@ -981,7 +1039,7 @@ static void toolkit_listFocus(Widget* lst, double bx, double by) {
|
|||||||
char* toolkit_getList(const unsigned int wid, char* name) {
|
char* toolkit_getList(const unsigned int wid, char* name) {
|
||||||
Widget* wgt = window_getwgt(wid, name);
|
Widget* wgt = window_getwgt(wid, name);
|
||||||
|
|
||||||
if((wgt->type != WIDGET_LIST) || (wgt->dat.lst.selected != -1))
|
if((wgt->type != WIDGET_LIST) || (wgt->dat.lst.selected == -1))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return wgt->dat.lst.options[wgt->dat.lst.selected];
|
return wgt->dat.lst.options[wgt->dat.lst.selected];
|
||||||
|
@ -25,6 +25,11 @@ void window_addList(const unsigned int wid,
|
|||||||
char* name, char** items, int nitems, int defitem,
|
char* name, char** items, int nitems, int defitem,
|
||||||
void(*call)(char*));
|
void(*call)(char*));
|
||||||
|
|
||||||
|
void window_addRect(const unsigned int wid,
|
||||||
|
const int x, const int y, // Position.
|
||||||
|
const int w, const int h, // size.
|
||||||
|
char* name, glColour* colour, int border); // Properties.
|
||||||
|
|
||||||
// Modification
|
// Modification
|
||||||
void window_modifyText(const unsigned int wid, char* name, char* newstring);
|
void window_modifyText(const unsigned int wid, char* name, char* newstring);
|
||||||
void window_modifyImage(const unsigned int wid, char* name, glTexture* image);
|
void window_modifyImage(const unsigned int wid, char* name, glTexture* image);
|
||||||
|
Loading…
Reference in New Issue
Block a user