// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "Color.hpp" #include "TextConstants.hpp" #include "utf8/UTF8.hpp" #include #include namespace gui { class RawFont; /// single text block. It might end with formatting, or with newline. /// it is responsible for: /// * storing part of text /// * storing properties of stored text class TextBlock { std::unique_ptr format = nullptr; UTF8 text; public: enum class End { Newline, None }; private: End end = End::None; public: TextBlock(const UTF8 text, const RawFont *font, End eol = End::None); TextBlock(const UTF8 text, std::unique_ptr format); TextBlock(const TextBlock &); const UTF8 &getText() const; UTF8 getText(uint32_t start_position) const; auto getFormat() const -> const TextFormat *; void setText(const UTF8 text); void insertChar(const uint32_t value, const uint32_t pos); void removeChar(const uint32_t pos); uint32_t getWidth() const; unsigned int length() const; auto getEnd() const -> End; void setEnd(End end); void addChar(uint32_t utf_val, unsigned int pos); bool isEmpty() const; TextBlock &operator=(const TextBlock &); }; } // namespace gui