]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/entry.cpp
Improve widget part caching
[libs/gltk.git] / source / entry.cpp
index 1f778420e0b44eda8b86b5765320f926048cdd27..a635101404423e9b64524ad7dfee6b9471b53c24 100644 (file)
@@ -114,37 +114,30 @@ void Entry::set_multiline(bool m)
        }
 }
 
-void Entry::rebuild_special(const Part &part, CachedPart &cache)
+void Entry::rebuild_special(const Part &part)
 {
        if(part.get_name()=="text")
-               text.build(part, geom, first_row, cache);
+               text.build(part, geom, first_row, part_cache);
        else if(part.get_name()=="cursor")
        {
                const Graphic *graphic = part.get_graphic(state);
-               if(!text_part || !graphic)
-               {
-                       cache.texture = 0;
+               if(!text_part || !graphic || !graphic->get_texture())
                        return;
-               }
 
                unsigned row, col;
                text.offset_to_coords(edit_pos, row, col);
 
                if(row<first_row || row>=first_row+visible_rows)
-               {
-                       cache.texture = 0;
                        return;
-               }
 
                Geometry rgeom = text.coords_to_geometry(*text_part, geom, first_row, row, col);
 
-               cache.texture = graphic->get_texture();
-               cache.clear_mesh();
-
-               GL::MeshBuilder bld(*cache.mesh);
+               GL::MeshBuilder bld(part_cache.create_mesh(part, *graphic->get_texture()));
                bld.matrix() *= GL::Matrix::translation(rgeom.x, rgeom.y, 0);
                graphic->build(part.get_geometry().w, part.get_geometry().h, bld);
        }
+       else
+               Widget::rebuild_special(part);
 }
 
 void Entry::render_special(const Part &part, GL::Renderer &renderer) const