~aleteoryx/muditaos

ref: 7fbaf735ed99f5b0d26adb686cfa6ed2bb4267d5 muditaos/module-gui/gui/widgets/TextBlock.hpp -rw-r--r-- 1.5 KiB
7fbaf735 — Przemyslaw Brudny [EGD-7813] Option Window titles localizations fix 4 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Copyright (c) 2017-2021, 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 <TextFormat.hpp>
#include <memory>

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<TextFormat> 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<TextFormat> 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