diff --git a/SDK/include/NDK/Widgets/TextAreaWidget.hpp b/SDK/include/NDK/Widgets/TextAreaWidget.hpp index d5cf264ee..9792acc68 100644 --- a/SDK/include/NDK/Widgets/TextAreaWidget.hpp +++ b/SDK/include/NDK/Widgets/TextAreaWidget.hpp @@ -36,11 +36,14 @@ namespace Ndk std::size_t GetHoveredGlyph(float x, float y) const; + inline bool IsReadOnly() const; + inline void MoveCursor(int offset); void ResizeToContent() override; inline void SetCursorPosition(std::size_t cursorPosition); + inline void SetReadOnly(bool readOnly = true); void SetText(const Nz::String& text); void Write(const Nz::String& text); @@ -65,6 +68,7 @@ namespace Ndk Nz::SpriteRef m_cursorSprite; Nz::TextSpriteRef m_textSprite; std::size_t m_cursorPosition; + bool m_readOnly; }; } diff --git a/SDK/include/NDK/Widgets/TextAreaWidget.inl b/SDK/include/NDK/Widgets/TextAreaWidget.inl index efe960994..4927a8d1c 100644 --- a/SDK/include/NDK/Widgets/TextAreaWidget.inl +++ b/SDK/include/NDK/Widgets/TextAreaWidget.inl @@ -30,6 +30,11 @@ namespace Ndk return m_drawer.GetText(); } + inline bool TextAreaWidget::IsReadOnly() const + { + return m_readOnly; + } + inline void TextAreaWidget::MoveCursor(int offset) { if (offset >= 0) @@ -50,4 +55,11 @@ namespace Ndk RefreshCursor(); } + + inline void TextAreaWidget::SetReadOnly(bool readOnly) + { + m_readOnly = readOnly; + + m_cursorEntity->Enable(!m_readOnly); + } } diff --git a/SDK/src/NDK/Widgets/TextAreaWidget.cpp b/SDK/src/NDK/Widgets/TextAreaWidget.cpp index 8d5e51535..0faac07c0 100644 --- a/SDK/src/NDK/Widgets/TextAreaWidget.cpp +++ b/SDK/src/NDK/Widgets/TextAreaWidget.cpp @@ -13,11 +13,12 @@ namespace Ndk { TextAreaWidget::TextAreaWidget(BaseWidget* parent) : BaseWidget(parent), - m_cursorPosition(0U) + m_cursorPosition(0U), + m_readOnly(false) { m_cursorSprite = Nz::Sprite::New(); m_cursorSprite->SetColor(Nz::Color(192, 192, 192)); - m_cursorSprite->SetSize(1.f, m_drawer.GetFont()->GetSizeInfo(m_drawer.GetCharacterSize()).lineHeight); + m_cursorSprite->SetSize(1.f, float(m_drawer.GetFont()->GetSizeInfo(m_drawer.GetCharacterSize()).lineHeight)); m_cursorEntity = CreateEntity(); m_cursorEntity->AddComponent().Attach(m_cursorSprite, 10); @@ -188,6 +189,9 @@ namespace Ndk void TextAreaWidget::OnTextEntered(char32_t character, bool /*repeated*/) { + if (m_readOnly) + return; + switch (character) { case '\b':