diff options
-rw-r--r-- | ui.cpp | 27 | ||||
-rw-r--r-- | ui.hpp | 7 |
2 files changed, 33 insertions, 1 deletions
@@ -1054,8 +1054,12 @@ void UI::Input::add_text(const char* s) { } } +static int int_filter(char ch) { + return (ch >= '0' && ch <= '9'); +} + static int float_filter(char ch) { - return (ch >= '0' && ch <= '9') || ch == '.' || ch == '-'; + return int_filter(ch) || ch == '.' || ch == '-'; } UI::Float_Input::Float_Input(UI* ui, Element* parent): @@ -1079,6 +1083,27 @@ void UI::Float_Input::set_val(float v) { set_text(b); } +UI::Int_Input::Int_Input(UI* ui, Element* parent): + Input(ui, parent, int_filter), + val(0.0f) { + set_text("0.0"); +} + +void UI::Int_Input::on_message(const Message& m) { + Input::on_message(m); + if (m.type == UI::Message::Type::input_finalised) { + int v = (int)strtol(buf, 0, 10); + set_val(v); + } +} + +void UI::Int_Input::set_val(int v) { + char b[64]; + val = v; + sprintf(b, "%d", v); + set_text(b); +} + UI::Slider::Slider( UI* ui, Element* parent, @@ -234,6 +234,13 @@ struct UI { void set_val(float v); }; + struct Int_Input : Input { + int val; + Int_Input(UI* ui, Element* parent); + void on_message(const Message& m) override; + void set_val(int v); + }; + struct Slider : Element { Float_Input* input; float minval, maxval; |