Entry::Entry(const string &t):
text(),
multiline(false),
+ edit_width(10),
+ edit_height(1),
edit_pos(0),
first_row(0),
visible_rows(1),
const Sides &margin = text_part->get_margin();
const GL::Font &font = style->get_font();
unsigned en_width = static_cast<unsigned>(font.get_string_width("n")*style->get_font_size());
- geom.w = max(geom.w, 10*en_width+margin.left+margin.right);
+ geom.w = max(geom.w, edit_width*en_width+margin.left+margin.right);
unsigned line_height = static_cast<unsigned>((font.get_ascent()-font.get_descent())*style->get_font_size());
if(multiline)
{
unsigned line_spacing = style->get_font_size()*6/5;
- geom.h = max(geom.h, line_height+line_spacing*2+margin.top+margin.bottom);
+ geom.h = max(geom.h, line_height+line_spacing*(edit_height-1)+margin.top+margin.bottom);
}
else
geom.h = max(geom.h, line_height+margin.top+margin.bottom);
rebuild();
}
+void Entry::set_edit_size(unsigned w, unsigned h)
+{
+ edit_width = w;
+ edit_height = h;
+ signal_autosize_changed.emit();
+}
+
void Entry::set_multiline(bool m)
{
multiline = 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
first_row = text.get_n_lines()-visible_rows-static_cast<unsigned>(value);
}
-
-Entry::Loader::Loader(Entry &ent):
- Widget::Loader(ent)
-{ }
-
} // namespace GLtk
} // namespace Msp