diff --git a/apps/i18n.cpp b/apps/i18n.cpp index a5d571288..3b98fe128 100644 --- a/apps/i18n.cpp +++ b/apps/i18n.cpp @@ -356,4 +356,8 @@ const char * translate(Message m, Language l) { return messages[(int)m][languageIndex-1]; } +int numberOfLanguages() { + return 3; +} + } diff --git a/escher/include/escher/i18n.h b/escher/include/escher/i18n.h index 5002a72a6..cf3d7bb31 100644 --- a/escher/include/escher/i18n.h +++ b/escher/include/escher/i18n.h @@ -7,6 +7,7 @@ namespace I18n { enum class Message : uint16_t; enum class Language : uint16_t; const char * translate(Message m, Language l = (Language)0); + int numberOfLanguages(); } #endif diff --git a/escher/include/escher/pointer_text_view.h b/escher/include/escher/pointer_text_view.h index 4b3af6f6f..c51ce9d4f 100644 --- a/escher/include/escher/pointer_text_view.h +++ b/escher/include/escher/pointer_text_view.h @@ -11,6 +11,7 @@ public: void setText(const char * text) override; void setMessage(I18n::Message message); const char * text() const override; + KDSize minimalSizeForOptimalDisplay() const override; private: I18n::Message m_message; }; diff --git a/escher/include/escher/text_view.h b/escher/include/escher/text_view.h index 918dc1481..91510cf30 100644 --- a/escher/include/escher/text_view.h +++ b/escher/include/escher/text_view.h @@ -22,12 +22,12 @@ protected: #if ESCHER_VIEW_LOGGING const char * className() const override; #endif + KDText::FontSize m_fontSize; private: float m_horizontalAlignment; float m_verticalAlignment; KDColor m_textColor; KDColor m_backgroundColor; - KDText::FontSize m_fontSize; }; #endif diff --git a/escher/src/pointer_text_view.cpp b/escher/src/pointer_text_view.cpp index 528596270..b7796113a 100644 --- a/escher/src/pointer_text_view.cpp +++ b/escher/src/pointer_text_view.cpp @@ -20,3 +20,13 @@ void PointerTextView::setMessage(I18n::Message message) { m_message = message; markRectAsDirty(bounds()); } + +KDSize PointerTextView::minimalSizeForOptimalDisplay() const { + KDCoordinate width = 0; + for (int l = 0; l < I18n::numberOfLanguages(); l++) { + KDCoordinate newWidth = KDText::stringSize(I18n::translate(m_message, (I18n::Language)l), m_fontSize).width(); + width = width > newWidth ? width : newWidth; + l++; + } + return KDSize(width, KDText::stringSize(text(), m_fontSize).height()); +} diff --git a/escher/src/text_view.cpp b/escher/src/text_view.cpp index 895413738..6d324f6d6 100644 --- a/escher/src/text_view.cpp +++ b/escher/src/text_view.cpp @@ -3,11 +3,11 @@ TextView::TextView(KDText::FontSize size, float horizontalAlignment, float verticalAlignment, KDColor textColor, KDColor backgroundColor) : View(), + m_fontSize(size), m_horizontalAlignment(horizontalAlignment), m_verticalAlignment(verticalAlignment), m_textColor(textColor), - m_backgroundColor(backgroundColor), - m_fontSize(size) + m_backgroundColor(backgroundColor) { } diff --git a/quiz/src/i18n.cpp b/quiz/src/i18n.cpp index 5da271f0c..c9c871c3f 100644 --- a/quiz/src/i18n.cpp +++ b/quiz/src/i18n.cpp @@ -6,5 +6,9 @@ const char * translate(Message m, Language l) { return nullptr; } +int numberOfLanguages() { + return 0; +} + }