Fix input. (#188)

Instead of wrapping WideInputBase by composition, wrap it by
inheritance. This resolve the focus that was broken.
This commit is contained in:
Arthur Sonzogni 2021-08-10 22:22:50 +02:00 committed by GitHub
parent 79b8928f6e
commit 70cf088d6a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -181,36 +181,33 @@ class WideInputBase : public ComponentBase {
// WideInputBase.
// TODO(arthursonzogni): Provide an implementation handling std::string natively
// and adds better support for combining characters.
class InputBase : public ComponentBase {
class InputBase : public WideInputBase {
public:
InputBase(StringRef content,
ConstStringRef placeholder,
Ref<InputOption> option)
: content_(std::move(content)),
wrapped_content_(to_wstring(*content_)),
wrapped_input_(&wrapped_content_,
std::move(placeholder),
std::move(option)) {}
: WideInputBase(&wrapped_content_,
std::move(placeholder),
std::move(option)),
content_(std::move(content)),
wrapped_content_(to_wstring(*content_)) {}
Element Render() override {
wrapped_content_ = to_wstring(*content_);
return wrapped_input_.Render();
return WideInputBase::Render();
}
bool OnEvent(Event event) override {
wrapped_content_ = to_wstring(*content_);
if (wrapped_input_.OnEvent(event)) {
if (WideInputBase::OnEvent(event)) {
*content_ = to_string(wrapped_content_);
return true;
}
return false;
}
bool Focusable() const final { return true; }
StringRef content_;
std::wstring wrapped_content_;
WideInputBase wrapped_input_;
};
/// @brief An input box for editing text.