]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/list.cpp
Make the List in Dropdown a normal member instead of pointer
[libs/gltk.git] / source / list.cpp
index 924cfb55d37b68f99e2091c844db7e91aafd6b90..5bef36732e601ebd4a30023d04e51a9f14f2db78 100644 (file)
@@ -24,6 +24,7 @@ List::List(const Resources &r):
        sel_index(-1),
        first(0),
        n_visible(1),
+       row_height(1),
        items_part(0),
        slider(new VSlider(res)),
        slider_active(false)
@@ -107,9 +108,6 @@ void List::button_press(int x, int y, unsigned btn)
        }
        else if(btn==1)
        {
-               const GL::Font *const font=style->get_font();
-               const unsigned row_height=static_cast<unsigned>((font->get_ascent()-font->get_descent())*font->get_default_size());
-
                if(items_part)
                        y+=items_part->get_margin().top;
 
@@ -146,10 +144,9 @@ void List::render_special(const Part &part) const
 {
        if(part.get_name()=="items")
        {
-               const GL::Font *const font=style->get_font();
-               const float font_size=font->get_default_size();
+               const GL::Font &font=*style->get_font();
+               const float font_size=font.get_default_size();
                const GL::Color &color=style->get_font_color();
-               const unsigned row_height=static_cast<unsigned>((font->get_ascent()-font->get_descent())*font_size);
                const Sides &margin=part.get_margin();
 
                Geometry pgeom=geom;
@@ -159,10 +156,10 @@ void List::render_special(const Part &part) const
                for(unsigned i=0; (i<n_visible && first+i<items.size()); ++i)
                {
                        Geometry rgeom;
-                       rgeom.w=static_cast<unsigned>(font->get_string_width(items[first+i])*font_size);
-                       rgeom.h=static_cast<unsigned>((font->get_ascent()-font->get_descent())*font_size);
+                       rgeom.w=static_cast<unsigned>(font.get_string_width(items[first+i])*font_size);
+                       rgeom.h=row_height;
                        rgeom.x=margin.left;
-                       rgeom.y=geom.h-margin.top-(i+1)*row_height-static_cast<int>(font->get_descent()*font_size);
+                       rgeom.y=geom.h-margin.top-(i+1)*row_height-static_cast<int>(font.get_descent()*font_size);
                        part.get_alignment().apply(rgeom, pgeom);
 
                        GL::push_matrix();
@@ -170,7 +167,7 @@ void List::render_special(const Part &part) const
                        GL::scale_uniform(font_size);
                        GL::Immediate imm((GL::COLOR4_UBYTE, GL::TEXCOORD2, GL::VERTEX2));
                        imm.color(color.r, color.g, color.b);
-                       font->draw_string(items[first+i], imm);
+                       font.draw_string(items[first+i], imm);
                        GL::pop_matrix();
                }
        }
@@ -178,9 +175,6 @@ void List::render_special(const Part &part) const
        {
                if(sel_index>=static_cast<int>(first) && sel_index<static_cast<int>(first+n_visible))
                {
-                       const GL::Font *const font=style->get_font();
-                       const float font_size=font->get_default_size();
-                       const unsigned row_height=static_cast<unsigned>((font->get_ascent()-font->get_descent())*font_size);
                        const Sides &margin=part.get_margin();
 
                        Geometry pgeom=geom;
@@ -218,6 +212,9 @@ void List::on_style_change()
                if(i->get_name()=="items")
                        items_part=&*i;
 
+       const GL::Font &font=*style->get_font();
+       row_height=static_cast<unsigned>((font.get_ascent()-font.get_descent())*font.get_default_size());
+
        recalculate_parameters();
 }
 
@@ -234,9 +231,6 @@ void List::reposition_slider()
 
 void List::recalculate_parameters()
 {
-       const GL::Font *font=style->get_font();
-       unsigned row_height=static_cast<unsigned>(font->get_default_size());
-
        unsigned h=geom.h;
        if(items_part)
        {