00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include "framework/textbox.hpp"
00035 #include "platform/font.hpp"
00036
00037 #include "platform/lowlevel.hpp"
00038
00039
00040 namespace gsgl
00041 {
00042
00043 using namespace data;
00044 using namespace platform;
00045
00046 namespace framework
00047 {
00048
00049
00050 textbox::textbox(widget *parent,
00051 int x, int y, int w, int h,
00052 const color & fg, const color & bg,
00053 const string & font_face, const int font_size,
00054 text_align align, gsgl::flags_t text_flags)
00055 : widget(parent, x, y, w, h, fg, bg), text_font(new font(font_face, font_size, fg)), align(align), text_flags(text_flags)
00056 {
00057
00058 }
00059
00060
00061 textbox::~textbox()
00062 {
00063
00064 delete text_font;
00065 }
00066
00067
00068 static void get_lines(const int width, const string & text, font *text_font, list<string> & lines, int & max_w)
00069 {
00070
00071 }
00072
00073
00074 void textbox::draw()
00075 {
00076 if ((get_flags() & WIDGET_INACTIVE) == 0)
00077 widget::draw();
00078
00079
00080 int text_width = static_cast<int>(text_font->calc_width(text));
00081 int y = 1;
00082 int x;
00083
00084 switch (align)
00085 {
00086 case ALIGN_LEFT:
00087 x = 1;
00088 break;
00089 case ALIGN_RIGHT:
00090 x = (get_w() - text_width) - 1;
00091 break;
00092 case ALIGN_CENTER:
00093 x = get_w()/2 - text_width/2;
00094 break;
00095 case ALIGN_JUSTIFY:
00096 throw internal_exception(__FILE__, __LINE__, L"ALIGN_JUSTIFY not implemented.");
00097 break;
00098 }
00099
00100 glMatrixMode(GL_MODELVIEW);
00101 glPushMatrix();
00102
00103 glTranslatef(static_cast<GLfloat>(x), static_cast<GLfloat>(y), 0);
00104 text_font->draw(text);
00105
00106 glMatrixMode(GL_MODELVIEW);
00107 glPopMatrix();
00108 }
00109
00110
00111 }
00112
00113 }