nuclear@3: #include nuclear@3: #include "theme.h" nuclear@3: #include "widget.h" nuclear@3: nuclear@3: #ifdef WIN32 nuclear@3: #include nuclear@3: #endif nuclear@3: #ifdef __APPLE__ nuclear@3: #include nuclear@3: #else nuclear@3: #include nuclear@3: #endif nuclear@3: nuclear@3: nuclear@4: namespace goatkit { nuclear@3: nuclear@3: Theme *theme; nuclear@3: nuclear@3: Theme::Theme() nuclear@3: { nuclear@3: so = 0; nuclear@3: } nuclear@3: nuclear@3: bool Theme::load(const char *name) nuclear@3: { nuclear@3: fprintf(stderr, "theme loading not implemented yet!\n"); nuclear@3: return false; nuclear@3: } nuclear@3: nuclear@3: widget_draw_func Theme::get_draw_func(const char *type) const nuclear@3: { nuclear@3: std::map::const_iterator it = draw_func.find(type); nuclear@3: if(it == draw_func.end()) { nuclear@3: return default_draw_func; nuclear@3: } nuclear@3: return it->second; nuclear@3: } nuclear@3: nuclear@3: #define LERP(a, b, t) ((a) + ((b) - (a)) * t) nuclear@3: #define DEF_TEX_SZ 32 nuclear@3: void default_draw_func(const Widget *w) nuclear@3: { nuclear@3: static unsigned int tex; nuclear@3: nuclear@3: if(!tex) { nuclear@3: unsigned char *pixels = new unsigned char[DEF_TEX_SZ * DEF_TEX_SZ * 3]; nuclear@3: unsigned char *ptr = pixels; nuclear@3: for(int i=0; iget_position(); nuclear@3: Vec2 sz = w->get_size(); nuclear@3: float aspect = sz.x / sz.y; nuclear@3: nuclear@3: glPushAttrib(GL_ENABLE_BIT); nuclear@3: glEnable(GL_TEXTURE_2D); nuclear@3: glBindTexture(GL_TEXTURE_2D, tex); nuclear@3: nuclear@3: float offs = w->get_pressed() * 0.1 * sz.y; nuclear@3: glMatrixMode(GL_MODELVIEW); nuclear@3: glPushMatrix(); nuclear@3: glTranslatef(offs, -offs, 0); nuclear@3: nuclear@3: float active = w->get_active(); nuclear@3: float hover = w->get_under_mouse(); nuclear@3: nuclear@3: float rg = LERP(0.4, 1.0, hover); nuclear@3: float b = LERP(rg, 0, active); nuclear@3: glColor3f(rg, rg, b); nuclear@3: nuclear@3: glBegin(GL_QUADS); nuclear@3: glTexCoord2f(0, 1); nuclear@3: glVertex2f(pos.x, pos.y); nuclear@3: glTexCoord2f(aspect, 1); nuclear@3: glVertex2f(pos.x + sz.x, pos.y); nuclear@3: glTexCoord2f(aspect, 0); nuclear@3: glVertex2f(pos.x + sz.x, pos.y + sz.y); nuclear@3: glTexCoord2f(0, 0); nuclear@3: glVertex2f(pos.x, pos.y + sz.y); nuclear@3: glEnd(); nuclear@3: nuclear@3: glPopMatrix(); nuclear@3: nuclear@3: glPopAttrib(); nuclear@3: } nuclear@3: nuclear@4: } // namespace goatkit