]> git.tdb.fi Git - libs/gltk.git/commitdiff
Add properties to Entry for specifying autosize dimensions
authorMikko Rasa <tdb@tdb.fi>
Sun, 9 Jun 2013 18:42:44 +0000 (21:42 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 9 Jun 2013 18:47:52 +0000 (21:47 +0300)
source/entry.cpp
source/entry.h

index 8aee0cf4962ee3ed6a4994a045c622a4631d153a..da127022a84b93b3e26ebd22a2dbc04c689b100a 100644 (file)
@@ -16,6 +16,8 @@ namespace GLtk {
 Entry::Entry(const string &t):
        text(),
        multiline(false),
+       edit_width(10),
+       edit_height(1),
        edit_pos(0),
        first_row(0),
        visible_rows(1),
@@ -38,13 +40,13 @@ void Entry::autosize()
                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);
@@ -88,6 +90,13 @@ void Entry::set_text(const string &t)
        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;
index 65a201a66730bde448d7341c918c690c10bb3ccb..cd7d9bc4690636b8d9164c0c63d452ee037cfb91 100644 (file)
@@ -33,6 +33,8 @@ public:
 private:
        Text text;
        bool multiline;
+       unsigned edit_width;
+       unsigned edit_height;
        unsigned edit_pos;
        unsigned first_row;
        unsigned visible_rows;
@@ -49,6 +51,11 @@ public:
 
        void set_text(const std::string &);
        const std::string &get_text() const { return text.get(); }
+
+       /** Sets the minimum size of the editing area, in characters and rows.  This
+       only affects autosizing. */
+       void set_edit_size(unsigned w, unsigned h);
+
        void set_multiline(bool);
        bool is_multiline() const { return multiline; }