diff --git a/src/toolkit.c b/src/toolkit.c index c2dccd6..71d8e2c 100644 --- a/src/toolkit.c +++ b/src/toolkit.c @@ -89,8 +89,11 @@ static void window_render(Window* w); static void toolkit_renderButton(Widget* btn, 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_renderList(Widget* lst, double bx, double by); static void toolkit_drawOutline(double x, double y, double w, double h, double b, glColour* c, glColour* lc); +static void toolkit_drawRect(double x, double y, double w, double h, + glColour* c, glColour* lc); // Add a button that when pressed will trigger call, passing it's name as the // only parameter. @@ -374,6 +377,21 @@ static void toolkit_drawOutline(double x, double y, double w, double h, glEnd(); } +static void toolkit_drawRect(double x, double y, double w, double h, + glColour* c, glColour* lc) { + glShadeModel((lc) ? GL_SMOOTH : GL_FLAT); + + glBegin(GL_QUADS); + COLOUR(*c); + glVertex2d(x, y); + glVertex2d(x+w, y); + + COLOUR((lc) ? *lc : *c); + glVertex2d(x+w, y+h); + glVertex2d(x, y+h); + glEnd(); +} + // Render a window. static void window_render(Window* w) { int i; @@ -392,25 +410,8 @@ static void window_render(Window* w) { // Window shaded background. // Main body. - glShadeModel(GL_SMOOTH); - glBegin(GL_QUADS); - COLOUR(*dc); - glVertex2d(x+21., y); - glVertex2d(x+w->w-21., y); - - COLOUR(*c); - glVertex2d(x+w->w-21, y+0.6*w->h); - glVertex2d(x+21, y+0.6*w->h); - glEnd(); - - glShadeModel(GL_FLAT); - glBegin(GL_QUADS); - COLOUR(*c); - glVertex2d(x+21., y+0.6*w->h); - glVertex2d(x+w->w-21., y+0.6*w->h); - glVertex2d(x+w->w-21., y+w->h); - glVertex2d(x+21., y+w->h); - glEnd(); + toolkit_drawRect(x+21, y, w->w-42., 0.6*w->h, dc, c); + toolkit_drawRect(x+21, y+0.6*w->h, w->w-42., 0.4*w->h, c, NULL); glShadeModel(GL_SMOOTH); // Left side. @@ -559,7 +560,7 @@ static void window_render(Window* w) { toolkit_renderImage(&w->widgets[i], x, y); break; case WIDGET_LIST: - // TODO widget list rendering. + toolkit_renderList(&w->widgets[i], x, y); break; } } @@ -606,25 +607,9 @@ static void toolkit_renderButton(Widget* btn, double bx, double by) { break; } - // Shaded base. - glShadeModel(GL_SMOOTH); - glBegin(GL_QUADS); - COLOUR(*dc); - glVertex2d(x, y+2/3*btn->h); - glVertex2d(x+btn->w, y+2/3*btn->h); - COLOUR(*c); - glVertex2d(x+btn->w, y+0.6*btn->h); - glVertex2d(x, y+0.6*btn->h); - glEnd(); - - glShadeModel(GL_FLAT); - glBegin(GL_QUADS); - COLOUR(*c); - glVertex2d(x, y+0.6*btn->h); - glVertex2d(x+btn->w, y+0.6*btn->h); - glVertex2d(x+btn->w, y+btn->h); - glVertex2d(x, y+btn->h); - glEnd(); + // Shaded base. + toolkit_drawRect(x, y, btn->w, 0.6*btn->h, dc, c); + toolkit_drawRect(x, y+0.6*btn->h, btn->w, 0.4*btn->h, c, NULL); // Inner outline. toolkit_drawOutline(x, y, btn->w, btn->h, 0., lc, c); @@ -677,6 +662,14 @@ static void toolkit_renderImage(Widget* img, double bx, double by) { img->dat.img.image->sh-1, 2., oc, NULL); } +// Render the list. +static void toolkit_renderList(Widget* lst, double bx, double by) { + double x, y; + + x = bx + lst->x; + y = by + lst->y; +} + // Render the window. void toolkit_render(void) { int i;