+ void insert(std::size_t, const std::string &);
+ void erase(std::size_t, std::size_t);
+ const std::string &get_text() const { return text.get(); }
+
+ void set_edit_position(std::size_t p) { set_edit_position(p, false); }
+ std::size_t get_edit_position() const { return edit_pos; }
+ unsigned get_scroll_position() const { return first_row; }
+ unsigned get_visible_rows() const { return visible_rows; }
+ bool get_selection(std::size_t &, std::size_t &) const;
+ void translate_position(std::size_t, std::size_t &, std::size_t &) const;
+ std::size_t translate_position(std::size_t, std::size_t) const;
+
+ /** 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; }
+
+private:
+ void rebuild_special(const Part &) override;
+ void render_special(const Part &, GL::Renderer &) const override;
+
+public:
+ void touch_press(int, int, unsigned) override;
+ bool key_press(unsigned, unsigned) override;
+ bool character(wchar_t) override;
+ void focus_in() override;
+ void focus_out() override;
+ bool navigate(Navigation) override;
+ void animate(const Time::TimeDelta &) override;