diff --git a/engine/IMGUIControls.cc b/engine/IMGUIControls.cc index 093d6de..27128b5 100644 --- a/engine/IMGUIControls.cc +++ b/engine/IMGUIControls.cc @@ -30,6 +30,58 @@ bool regionhit (int x, int y, int w, int h) { return true; } +void DrawBlock (int x, int y, int w, int h) { + const int d = 16; + const float shading_dark = 0.5; + const float shading_light = 1.3; + + assert (h > d); + assert (w > d); + + glBegin(GL_QUADS); + // lower part + glVertex3f (x, y, 0.); + glVertex3f (x, y + d, 0.); + glVertex3f (x + w, y + d, 0.); + glVertex3f (x + w - d, y, 0.); + + // middle part + glVertex3f (x, y + d, 0.); + glVertex3f (x, y + d + h - 2 * d, 0.); + glVertex3f (x + w, y + d + h - 2 * d, 0.); + glVertex3f (x + w, y + d, 0.); + + // bottom part + glVertex3f (x, y + h - d, 0.); + glVertex3f (x + d, y + h, 0.); + glVertex3f (x + w, y + h, 0.); + glVertex3f (x + w, y + h - d, 0.); + + glEnd(); + + // "Shading" + float color[4]; + glGetFloatv (GL_CURRENT_COLOR, color); + + glLineWidth(3); + glColor3f (color[0] * shading_dark, color[1] * shading_dark, color[2] * shading_dark); + + glBegin(GL_LINE_STRIP); + glVertex3f (x,y + 2, 0.); + glVertex3f (x,y + h -d, 0.); + glVertex3f (x + d, y + h, 0.); + glVertex3f (x + w - 2, y + h, 0.); + glEnd(); + + glColor3f (color[0] * shading_light, color[1] * shading_light, color[2] * shading_light); + glBegin(GL_LINE_STRIP); + glVertex3f (x + w - d, y, 0.); + glVertex3f (x + w, y + d, 0.); + glEnd(); + + glColor4fv (color); +} + /** \brief Draws a label with a given caption at the position (vertically centered) * * This function draws the label at the horizontal x position and centers the @@ -85,20 +137,20 @@ bool Button (int id, const char* caption, int x, int y, int w, int h) { // Render glColor3f (0.2, 0.2, 0.2); - DrawRect2D (x + 4, y + 4, w, h); +// DrawBlock (x + 4, y + 4, w, h); if (controller->uistate.hotitem == id || controller->uistate.kbditem == id) { if (controller->uistate.activeitem == id) { glColor3f (0.8, 0.8, 0.8); - DrawRect2D (x, y, w, h); + DrawBlock (x, y, w, h); } else { glColor3f (0.7, 0.7, 0.7); - DrawRect2D (x, y, w, h); + DrawBlock (x, y, w, h); } } else { glColor3f (0.4, 0.4, 0.4); - DrawRect2D (x, y, w, h); + DrawBlock (x, y, w, h); } // Caption @@ -166,7 +218,7 @@ bool LineEdit (int id, int x, int y, std::string &text_value, const int &maxleng assert (controller); int w = maxlength * 16; - int h = 16; + int h = 20; // LogMessage ("id = %d hotitem = %d activeitem = %d kbditem = %d key = %s", id, controller->uistate.hotitem, controller->uistate.activeitem, controller->uistate.kbditem, convert_keycode (controller->uistate.last_keysym)); @@ -188,20 +240,20 @@ bool LineEdit (int id, int x, int y, std::string &text_value, const int &maxleng // Render glColor3f (0.2, 0.2, 0.2); - DrawRect2D (x + 4, y + 4, w, h); + DrawBlock (x + 4, y + 4, w, h); // If we have keyboard focus, we highlight the widget if ( controller->uistate.kbditem == id) { if (controller->uistate.activeitem == id) { glColor3f (0.8, 0.8, 0.8); - DrawRect2D (x, y, w, h); + DrawBlock (x, y, w, h); } else { glColor3f (0.7, 0.7, 0.7); - DrawRect2D (x, y, w, h); + DrawBlock (x, y, w, h); } } else { glColor3f (0.4, 0.4, 0.4); - DrawRect2D (x, y, w, h); + DrawBlock (x, y, w, h); } // Rendering of the current value