nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include "opengl.h" nuclear@0: #include "widgets.h" nuclear@0: nuclear@0: static dtx_font *font; nuclear@0: nuclear@0: static void init_font() nuclear@0: { nuclear@0: if(font) return; nuclear@0: nuclear@0: if(!(font = dtx_open_font("data/droid_sans.ttf", 16))) { nuclear@0: fprintf(stderr, "failed to load font\n"); nuclear@0: abort(); nuclear@0: } nuclear@0: dtx_use_font(font, 16); nuclear@0: } nuclear@0: nuclear@0: Widget::Widget() nuclear@0: { nuclear@0: text = 0; nuclear@0: } nuclear@0: nuclear@0: Widget::~Widget() nuclear@0: { nuclear@0: delete [] text; nuclear@0: } nuclear@0: nuclear@0: void Widget::set_position(const Vector2 &p) nuclear@0: { nuclear@0: pos = p; nuclear@0: } nuclear@0: nuclear@0: const Vector2 &Widget::get_position() const nuclear@0: { nuclear@0: return pos; nuclear@0: } nuclear@0: nuclear@0: void Widget::set_text(const char *str) nuclear@0: { nuclear@0: text = new char[strlen(str) + 1]; nuclear@0: strcpy(text, str); nuclear@0: } nuclear@0: nuclear@0: void Widget::set_textf(const char *str, ...) nuclear@0: { nuclear@0: va_list ap; nuclear@0: int sz = strlen(str) * 4; nuclear@0: char *buf = (char*)alloca(sz); nuclear@0: nuclear@0: va_start(ap, str); nuclear@0: vsnprintf(buf, sz - 1, text, ap); nuclear@0: va_end(ap); nuclear@0: nuclear@0: set_text(buf); nuclear@0: } nuclear@0: nuclear@0: const char *Widget::get_text() const nuclear@0: { nuclear@0: return text; nuclear@0: } nuclear@0: nuclear@0: // ---- label ---- nuclear@0: nuclear@0: void Label::draw() const nuclear@0: { nuclear@0: init_font(); nuclear@0: nuclear@0: glMatrixMode(GL_MODELVIEW); nuclear@0: glPushMatrix(); nuclear@0: glTranslatef(pos.x, pos.y, 0); nuclear@0: glScalef(0.1, 0.1, 1); nuclear@0: nuclear@0: dtx_string(text); nuclear@0: dtx_flush(); nuclear@0: nuclear@0: glPopMatrix(); nuclear@0: }