From 9d7284e2e20940e33e9aad30d1ee409cd8b5b036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 16 Mar 2017 10:47:12 +0100 Subject: [PATCH] [escher] Improve rendering of input view controller Change-Id: I3d92fdc5bba7ec21dfb4d2c15e5827f29b2e57a8 --- escher/include/escher/input_view_controller.h | 19 ++++++- escher/src/input_view_controller.cpp | 54 +++++++++++++++---- 2 files changed, 62 insertions(+), 11 deletions(-) diff --git a/escher/include/escher/input_view_controller.h b/escher/include/escher/input_view_controller.h index 4f69ab74d..5df7f8769 100644 --- a/escher/include/escher/input_view_controller.h +++ b/escher/include/escher/input_view_controller.h @@ -24,8 +24,23 @@ private: View * view() override; TextField * textField(); private: - TextField m_textField; - char m_textBody[255]; + class ContentView : public Responder, public View { + public: + ContentView(Responder * parentResponder, TextFieldDelegate * textFieldDelegate); + void didBecomeFirstResponder() override; + TextField * textField(); + void drawRect(KDContext * ctx, KDRect rect) const override; + KDSize minimalSizeForOptimalDisplay() const override; + private: + View * subviewAtIndex(int index) override; + int numberOfSubviews() const override; + void layoutSubviews() override; + constexpr static int k_inputHeight = 37; + constexpr static int k_separatorThickness = 1; + TextField m_textField; + char m_textBody[255]; + }; + ContentView m_view; }; TextFieldController m_textFieldController; Invocation m_successAction; diff --git a/escher/src/input_view_controller.cpp b/escher/src/input_view_controller.cpp index 620656278..0bdf6abaa 100644 --- a/escher/src/input_view_controller.cpp +++ b/escher/src/input_view_controller.cpp @@ -1,26 +1,62 @@ #include #include +#include #include -InputViewController::TextFieldController::TextFieldController(Responder * parentResponder, TextFieldDelegate * textFieldDelegate) : - ViewController(parentResponder), - m_textField(parentResponder, m_textBody, m_textBody, 255, textFieldDelegate) +InputViewController::TextFieldController::ContentView::ContentView(Responder * parentResponder, TextFieldDelegate * textFieldDelegate) : + Responder(parentResponder), + View(), + m_textField(this, m_textBody, m_textBody, 255, textFieldDelegate) { m_textBody[0] = 0; } -View * InputViewController::TextFieldController::view() { - return &m_textField; -} - -void InputViewController::TextFieldController::didBecomeFirstResponder() { +void InputViewController::TextFieldController::ContentView::didBecomeFirstResponder() { app()->setFirstResponder(&m_textField); } -TextField * InputViewController::TextFieldController::textField() { +TextField * InputViewController::TextFieldController::ContentView::textField() { return &m_textField; } +void InputViewController::TextFieldController::ContentView::drawRect(KDContext * ctx, KDRect rect) const { + ctx->fillRect(KDRect(0, 0, bounds().width(), k_separatorThickness), Palette::GreyMiddle); +} + +KDSize InputViewController::TextFieldController::ContentView::minimalSizeForOptimalDisplay() const { + return KDSize(0, k_inputHeight); +} + +int InputViewController::TextFieldController::ContentView::numberOfSubviews() const { + return 1; +} + +View * InputViewController::TextFieldController::ContentView::subviewAtIndex(int index) { + return &m_textField; +} + +void InputViewController::TextFieldController::ContentView::layoutSubviews() { + m_textField.setFrame(KDRect(0, k_separatorThickness, bounds().width(), bounds().height())); +} + +InputViewController::TextFieldController::TextFieldController(Responder * parentResponder, TextFieldDelegate * textFieldDelegate) : + ViewController(parentResponder), + m_view(this, textFieldDelegate) +{ +} + +View * InputViewController::TextFieldController::view() { + return &m_view; +} + +void InputViewController::TextFieldController::didBecomeFirstResponder() { + app()->setFirstResponder(&m_view); +} + +TextField * InputViewController::TextFieldController::textField() { + return m_view.textField(); +} + InputViewController::InputViewController(Responder * parentResponder, ViewController * child, TextFieldDelegate * textFieldDelegate) : ModalViewController(parentResponder, child), m_textFieldController(TextFieldController(this, this)),