~aleteoryx/muditaos

70ad87ae0b3985c71f80a2acceff91aea929d64f — Przemyslaw Brudny 4 years ago b421d60
[EGD-7065] Phonebook edit contact style updates

Updated widgets margins. Updated used fonts. Updated focus
change bold on font, cursor position, underline bold. Added
line spacing support and cleaned underline properties.
M image/assets/lang/English.json => image/assets/lang/English.json +1 -1
@@ 476,7 476,7 @@
  "app_phonebook_duplicate_numbers": "Number $CONTACT_SPEED_DIAL$ is assigned to \n $CONTACT_NAME$. Replace it?",
  "app_phonebook_duplicate_speed_dial_title": "Speed dial key ($CONTACT_SPEED_DIAL$)",
  "app_phonebook_options_title": "Options",
  "app_phonebook_options_edit": "Edit Contact",
  "app_phonebook_options_edit": "Edit contact",
  "app_phonebook_options_block": "Block",
  "app_phonebook_options_block_confirm": "Block this contact?",
  "app_phonebook_options_block_notification": "Contact blocked.",

M module-apps/application-music-player/widgets/SongItem.cpp => module-apps/application-music-player/widgets/SongItem.cpp +3 -3
@@ 38,7 38,7 @@ namespace gui
        durationText->setMinimumSize(songItem::duration_w, songItem::text_h);
        durationText->setMargins(Margins(0, 0, songItem::rightMargin, 0));
        durationText->setEdges(RectangleEdge::None);
        durationText->setUnderline(false);
        durationText->drawUnderline(false);
        durationText->setFont(style::window::font::verysmall);
        durationText->setAlignment(Alignment(gui::Alignment::Horizontal::Right, gui::Alignment::Vertical::Center));
        durationText->setEditMode(EditMode::Browse);


@@ 49,7 49,7 @@ namespace gui
        songText->setMaximumWidth(songItem::w);
        songText->setMargins(Margins(songItem::leftMargin, 0, 0, 0));
        songText->setEdges(RectangleEdge::None);
        songText->setUnderline(false);
        songText->drawUnderline(false);
        songText->setFont(style::window::font::bigbold);
        songText->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        songText->setEditMode(EditMode::Browse);


@@ 64,7 64,7 @@ namespace gui
        authorText->setMaximumWidth(songItem::w);
        authorText->setMargins(Margins(songItem::leftMargin, 0, 0, 0));
        authorText->setEdges(RectangleEdge::None);
        authorText->setUnderline(false);
        authorText->drawUnderline(false);
        authorText->setFont(style::window::font::medium);
        authorText->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        authorText->setEditMode(EditMode::Browse);

M module-apps/application-notes/widgets/NotesItem.cpp => module-apps/application-notes/widgets/NotesItem.cpp +1 -1
@@ 44,7 44,7 @@ namespace gui
        item->setPenWidth(::style::window::default_border_rect_no_focus);
        item->setEditMode(gui::EditMode::Browse);
        item->setCursorStartPosition(CursorStartPosition::DocumentBegin);
        item->setUnderline(false);
        item->drawUnderline(false);
        return item;
    }


M module-apps/application-phonebook/data/PhonebookStyle.hpp => module-apps/application-phonebook/data/PhonebookStyle.hpp +4 -3
@@ 111,10 111,11 @@ namespace phonebookStyle
    {
        inline constexpr uint32_t w                = style::window::default_body_width;
        inline constexpr uint32_t h                = 63;
        inline constexpr uint32_t title_label_h    = 20;
        inline constexpr uint32_t input_text_h     = 37;
        inline constexpr uint32_t title_label_h    = 24;
        inline constexpr uint32_t input_text_h     = 33;
        inline constexpr uint32_t span_size        = 6;
        inline constexpr int32_t underline_padding = 4;
        inline constexpr uint32_t line_spacing     = 15;
        inline constexpr int32_t underline_padding = 2;
    } // namespace inputLinesWithLabelWidget

    namespace outputLinesTextWithLabelWidget

M module-apps/application-phonebook/models/NewContactModel.cpp => module-apps/application-phonebook/models/NewContactModel.cpp +5 -0
@@ 77,6 77,8 @@ void NewContactModel::createData()

    internalData.push_back(new gui::InputBoxWithLabelAndIconWidget(phonebookInternals::ListItemName::SpeedDialKey));

    internalData.back()->setMargins(gui::Margins(style::widgets::leftMargin, style::margins::very_big, 0, 0));

    internalData.push_back(new gui::InputBoxWithLabelAndIconWidget(
        phonebookInternals::ListItemName::AddToFavourites,
        [app](const UTF8 &text) { app->getCurrentWindow()->bottomBarTemporaryMode(text, false); },


@@ 87,6 89,9 @@ void NewContactModel::createData()
        [app](const UTF8 &text) { app->getCurrentWindow()->bottomBarTemporaryMode(text, false); },
        [app]() { app->getCurrentWindow()->bottomBarRestoreFromTemporaryMode(); }));

    internalData.back()->setMargins(
        gui::Margins(style::widgets::leftMargin, style::margins::big, 0, style::margins::very_small));

    internalData.push_back(new gui::InputLinesWithLabelIWidget(
        phonebookInternals::ListItemName::Address,
        [app](const UTF8 &text) { app->getCurrentWindow()->bottomBarTemporaryMode(text, false); },

M module-apps/application-phonebook/widgets/InformationWidget.cpp => module-apps/application-phonebook/widgets/InformationWidget.cpp +1 -1
@@ 15,7 15,7 @@ namespace gui
{
    InformationWidget::InformationWidget(app::Application *app)
    {
        setMargins(gui::Margins(0, style::margins::huge, 0, 0));
        setMargins(gui::Margins(style::widgets::leftMargin, style::margins::huge, 0, 0));

        setMinimumSize(phonebookStyle::informationWidget::w,
                       phonebookStyle::informationWidget::title_label_h + style::margins::huge);

M module-apps/application-phonebook/widgets/InputBoxWithLabelAndIconWidget.cpp => module-apps/application-phonebook/widgets/InputBoxWithLabelAndIconWidget.cpp +9 -3
@@ 22,9 22,9 @@ namespace gui
        setMinimumSize(phonebookStyle::inputBoxWithLabelAndIconIWidget::w,
                       phonebookStyle::inputBoxWithLabelAndIconIWidget::h);

        setMargins(gui::Margins(0, style::margins::big, 0, 0));
        setMargins(gui::Margins(style::widgets::leftMargin, style::margins::big, 0, 0));

        hBox = new gui::HBox(this, 0, 0, phonebookStyle::inputBoxWithLabelAndIconIWidget::w, 0);
        hBox = new gui::HBox(this, 0, 0, 0, 0);
        hBox->setEdges(gui::RectangleEdge::None);
        hBox->setPenFocusWidth(style::window::default_border_focus_w);
        hBox->setPenWidth(style::window::default_border_rect_no_focus);


@@ 50,7 50,7 @@ namespace gui
        tickImage->activeItem = false;

        descriptionLabel = new gui::Label(hBox, 0, 0, 0, 0);
        descriptionLabel->setMinimumSize(phonebookStyle::inputBoxWithLabelAndIconIWidget::description_label_w,
        descriptionLabel->setMaximumSize(phonebookStyle::inputBoxWithLabelAndIconIWidget::description_label_w,
                                         phonebookStyle::inputBoxWithLabelAndIconIWidget::description_label_h);
        descriptionLabel->setMargins(
            gui::Margins(0, 0, phonebookStyle::inputBoxWithLabelAndIconIWidget::description_label_right_margin, 0));


@@ 102,9 102,11 @@ namespace gui
        focusChangedCallback = [&](gui::Item &item) {
            if (focus) {
                setFocusItem(inputBoxLabel);
                descriptionLabel->setFont(style::window::font::mediumbold);
            }
            else {
                setFocusItem(nullptr);
                descriptionLabel->setFont(style::window::font::medium);
            }
            return true;
        };


@@ 137,6 139,7 @@ namespace gui
        focusChangedCallback = [&](gui::Item &item) {
            if (focus) {
                setFocusItem(inputBoxLabel);
                descriptionLabel->setFont(style::window::font::mediumbold);
                if (tickImage->visible) {
                    bottomBarTemporaryMode(utils::translate("app_phonebook_uncheck"));
                }


@@ 146,6 149,7 @@ namespace gui
            }
            else {
                setFocusItem(nullptr);
                descriptionLabel->setFont(style::window::font::medium);
                bottomBarRestoreFromTemporaryMode();
            }
            return true;


@@ 180,6 184,7 @@ namespace gui
        focusChangedCallback = [&](gui::Item &item) {
            if (focus) {
                setFocusItem(inputBoxLabel);
                descriptionLabel->setFont(style::window::font::mediumbold);
                if (tickImage->visible) {
                    bottomBarTemporaryMode(utils::translate("app_phonebook_uncheck"));
                }


@@ 189,6 194,7 @@ namespace gui
            }
            else {
                setFocusItem(nullptr);
                descriptionLabel->setFont(style::window::font::medium);
                bottomBarRestoreFromTemporaryMode();
            }
            return true;

M module-apps/application-phonebook/widgets/InputLinesWithLabelIWidget.cpp => module-apps/application-phonebook/widgets/InputLinesWithLabelIWidget.cpp +19 -11
@@ 23,8 23,9 @@ namespace gui
        setMinimumSize(phonebookStyle::inputLinesWithLabelWidget::w,
                       phonebookStyle::inputLinesWithLabelWidget::title_label_h +
                           phonebookStyle::inputLinesWithLabelWidget::span_size +
                           phonebookStyle::inputLinesWithLabelWidget::input_text_h * lines);
        setMargins(gui::Margins(0, style::margins::huge, 0, 0));
                           phonebookStyle::inputLinesWithLabelWidget::input_text_h * lines +
                           (phonebookStyle::inputLinesWithLabelWidget::line_spacing * (lines - 1)));
        setMargins(gui::Margins(style::widgets::leftMargin, style::margins::huge, 0, 0));

        vBox = new VBox(this, 0, 0, 0, 0);
        vBox->setEdges(RectangleEdge::None);


@@ 34,17 35,20 @@ namespace gui
                                   phonebookStyle::inputLinesWithLabelWidget::title_label_h);
        titleLabel->setEdges(RectangleEdge::None);
        titleLabel->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Top));
        titleLabel->setFont(style::window::font::verysmall);
        titleLabel->setFont(style::window::font::small);
        titleLabel->activeItem = false;

        inputText = new TextFixedSize(vBox, 0, 0, 0, 0);
        inputText->setMinimumSize(phonebookStyle::inputLinesWithLabelWidget::w,
                                  phonebookStyle::inputLinesWithLabelWidget::input_text_h * lines);
                                  (phonebookStyle::inputLinesWithLabelWidget::input_text_h)*lines +
                                      (phonebookStyle::inputLinesWithLabelWidget::line_spacing * (lines - 1)));
        inputText->setMargins(Margins(0, phonebookStyle::inputLinesWithLabelWidget::span_size, 0, 0));
        inputText->setUnderlinePadding(phonebookStyle::inputLinesWithLabelWidget::underline_padding);

        inputText->setLinesSpacing(phonebookStyle::inputLinesWithLabelWidget::line_spacing);
        inputText->setLines(lines);
        inputText->setCursorStartPosition(CursorStartPosition::DocumentBegin);
        inputText->setEdges(RectangleEdge::None);
        inputText->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Top));
        inputText->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Bottom));
        inputText->setFont(style::window::font::medium);
        inputText->setInputMode(new InputMode(
            {InputMode::ABC, InputMode::abc, InputMode::digit},


@@ 61,9 65,13 @@ namespace gui
            setFocusItem(focus ? vBox : nullptr);

            if (focus) {
                inputText->setCursorStartPosition(CursorStartPosition::DocumentEnd);
                inputText->setUnderlineThickness(style::window::default_border_focus_w);
                inputText->setFont(style::window::font::mediumbold);
            }
            else {
                inputText->setCursorStartPosition(CursorStartPosition::DocumentBegin);
                inputText->setUnderlineThickness(style::window::default_border_rect_no_focus);
                inputText->setFont(style::window::font::medium);
            }
            return true;


@@ 126,8 134,8 @@ namespace gui
        titleLabel->setText(utils::translate("app_phonebook_new_contact_first_name"));
        inputText->setTextType(TextType::SingleLine);

        onSaveCallback = [&](std::shared_ptr<ContactRecord> contact) { contact->primaryName = inputText->getText(); };
        onLoadCallback = [&](std::shared_ptr<ContactRecord> contact) { inputText->setText(contact->primaryName); };
        onSaveCallback  = [&](std::shared_ptr<ContactRecord> contact) { contact->primaryName = inputText->getText(); };
        onLoadCallback  = [&](std::shared_ptr<ContactRecord> contact) { inputText->setText(contact->primaryName); };
        onEmptyCallback = [&]() { return inputText->isEmpty(); };
    }
    void InputLinesWithLabelIWidget::secondNameHandler()


@@ 138,7 146,7 @@ namespace gui
        onSaveCallback = [&](std::shared_ptr<ContactRecord> contact) {
            contact->alternativeName = inputText->getText();
        };
        onLoadCallback = [&](std::shared_ptr<ContactRecord> contact) { inputText->setText(contact->alternativeName); };
        onLoadCallback  = [&](std::shared_ptr<ContactRecord> contact) { inputText->setText(contact->alternativeName); };
        onEmptyCallback = [&]() { return inputText->isEmpty(); };
    }
    void InputLinesWithLabelIWidget::numberHandler()


@@ 184,8 192,8 @@ namespace gui
        titleLabel->setText(utils::translate("app_phonebook_new_contact_email"));
        inputText->setTextType(TextType::SingleLine);

        onSaveCallback = [&](std::shared_ptr<ContactRecord> contact) { contact->mail = inputText->getText(); };
        onLoadCallback = [&](std::shared_ptr<ContactRecord> contact) { inputText->setText(contact->mail); };
        onSaveCallback  = [&](std::shared_ptr<ContactRecord> contact) { contact->mail = inputText->getText(); };
        onLoadCallback  = [&](std::shared_ptr<ContactRecord> contact) { inputText->setText(contact->mail); };
        onEmptyCallback = [&]() { return inputText->isEmpty(); };
    }
    void InputLinesWithLabelIWidget::addressHandler()

M module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp => module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp +1 -1
@@ 16,7 16,7 @@ namespace gui
    {
        setMinimumSize(phonebookStyle::outputLinesTextWithLabelWidget::w,
                       phonebookStyle::outputLinesTextWithLabelWidget::title_label_h);
        setMargins(gui::Margins(0, style::margins::huge, 0, 0));
        setMargins(gui::Margins(style::widgets::leftMargin, style::margins::huge, 0, 0));

        vBox = new VBox(this, 0, 0, 0, 0);
        vBox->setEdges(RectangleEdge::None);

M module-apps/application-settings/widgets/apps/SettingsSoundItem.cpp => module-apps/application-settings/widgets/apps/SettingsSoundItem.cpp +1 -1
@@ 22,7 22,7 @@ namespace gui
        soundTitle->setMaximumSize(style::window::default_body_width, style::window::label::big_h);
        soundTitle->setMargins(Margins(10, 0, 0, 0));
        soundTitle->setEdges(RectangleEdge::All);
        soundTitle->setUnderline(false);
        soundTitle->drawUnderline(false);
        soundTitle->setFont(style::window::font::big);
        soundTitle->setText(soundName); // setRichText??


M module-apps/apps-common/notifications/NotificationListItem.cpp => module-apps/apps-common/notifications/NotificationListItem.cpp +1 -1
@@ 40,7 40,7 @@ namespace
        text->setMaximumSize(style::notifications::textMaxWidth, Axis::X);
        text->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        text->setPenWidth(style::window::default_border_no_focus_w);
        text->setUnderline(false);
        text->drawUnderline(false);
        text->setFont(style::window::font::medium);
        text->activeItem = false;
        text->setTextLimitType(TextLimitType::MaxLines, 1);

M module-apps/apps-common/options/type/OptionBellMenu.cpp => module-apps/apps-common/options/type/OptionBellMenu.cpp +1 -1
@@ 26,7 26,7 @@ namespace gui::option
        };

        auto optionText = new TextFixedSize(optionBodyHBox, 0, 0, 0, 0);
        optionText->setUnderline(false);
        optionText->drawUnderline(false);
        optionText->setAlignment(gui::Alignment::Vertical::Center);
        optionText->setAlignment(gui::Alignment::Horizontal::Center);
        optionText->setMaximumSize(bell::window::default_text_width, style::window::label::big_h);

M module-apps/apps-common/options/type/OptionSetting.cpp => module-apps/apps-common/options/type/OptionSetting.cpp +2 -2
@@ 27,7 27,7 @@ namespace gui::option
        };

        auto optionText = new TextFixedSize(optionBodyHBox, 0, 0, 0, 0);
        optionText->setUnderline(false);
        optionText->drawUnderline(false);
        optionText->setAlignment(gui::Alignment::Vertical::Center);
        optionText->setMaximumSize(style::window::default_body_width, style::window::label::big_h);
        optionText->setMargins(Margins(window::option_left_margin, 0, 0, 0));


@@ 64,7 64,7 @@ namespace gui::option
            break;
        case SettingRightItem::Text: {
            auto optionTextRight = new TextFixedSize(optionBodyHBox, 0, 0, 0, 0);
            optionTextRight->setUnderline(false);
            optionTextRight->drawUnderline(false);
            optionTextRight->setFont((textOnRightIsSmall) ? style::window::font::verysmall
                                                          : style::window::font::medium);
            optionTextRight->setMinimumWidthToFitText(textOnRight);

M module-apps/apps-common/options/type/OptionSimple.cpp => module-apps/apps-common/options/type/OptionSimple.cpp +1 -1
@@ 26,7 26,7 @@ namespace gui::option

        auto optionText = new TextFixedSize(optionBodyHBox, 0, 0, 0, 0);
        optionText->setMargins(Margins(window::option_left_margin, 0, 0, 0));
        optionText->setUnderline(false);
        optionText->drawUnderline(false);
        optionText->setAlignment(gui::Alignment::Vertical::Center);
        optionText->setMaximumSize(style::window::default_body_width, style::window::label::big_h);
        optionText->setFont(style::window::font::big);

M module-apps/apps-common/widgets/TextWithIconsWidget.cpp => module-apps/apps-common/widgets/TextWithIconsWidget.cpp +2 -2
@@ 30,13 30,12 @@ namespace
    [[nodiscard]] auto createText(const std::string &text, const UTF8 &font)
    {
        auto textFixedSize = new TextFixedSize(nullptr, 0, 0, 0, 0);
        textFixedSize->setUnderline(false);
        textFixedSize->drawUnderline(false);
        textFixedSize->setMaximumSize(style::window::default_body_width, style::widgets::h);
        textFixedSize->setFont(font);
        textFixedSize->setEdges(gui::RectangleEdge::None);
        textFixedSize->setEditMode(EditMode::Browse);
        textFixedSize->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        textFixedSize->setMargins(Margins(style::widgets::leftMargin, 0, 0, 0));
        textFixedSize->setText(text);
        textFixedSize->activeItem = false;
        return textFixedSize;


@@ 46,6 45,7 @@ namespace
    {
        auto snippet = new gui::Image(snippetName);
        snippet->setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
        snippet->setMargins(Margins(0, 0, style::widgets::rightMargin, 0));
        snippet->activeItem = false;
        return snippet;
    }

M module-gui/gui/widgets/Lines.cpp => module-gui/gui/widgets/Lines.cpp +2 -3
@@ 80,8 80,7 @@ namespace gui
        Length initHeight = text->getTextFormat().getFont()->info.line_height;

        while (true) {
            auto textLine =
                gui::TextLine(drawCursor, w, initHeight, underLine, UnderlineDrawMode::WholeLine, underLinePadding);
            auto textLine = gui::TextLine(drawCursor, w, initHeight, underLineProperties);

            if ((textLine.height() > 0) && initHeight != textLine.height()) {
                initHeight = textLine.height();


@@ 122,7 121,7 @@ namespace gui
            line.setParent(text);
            line.setPosition(lineXPosition, lineYPosition);

            lineYPosition += line.height();
            lineYPosition += line.height() + linesSpacing;
        }
    }


M module-gui/gui/widgets/Lines.hpp => module-gui/gui/widgets/Lines.hpp +14 -18
@@ 1,4 1,4 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 24,9 24,8 @@ namespace gui
    {
        Text *text = nullptr;
        std::list<TextLine> lines;

        bool underLine            = false;
        Position underLinePadding = 0;
        UnderLineProperties underLineProperties;
        unsigned int linesSpacing = 0;

        void addToInvisibleLines(TextLine line);



@@ 108,9 107,11 @@ namespace gui

        [[nodiscard]] auto linesHeight() const noexcept
        {
            return std::accumulate(lines.begin(), lines.end(), 0U, [](const auto sum, const auto &line) {
                return line.isVisible() ? sum + line.height() : sum;
            });
            auto lineSpacingAddition = empty() ? 0 : (size() - 1) * linesSpacing;
            return lineSpacingAddition +
                   std::accumulate(lines.begin(), lines.end(), 0U, [](const auto sum, const auto &line) {
                       return line.isVisible() ? sum + line.height() : sum;
                   });
        }

        [[nodiscard]] auto linesLength() const noexcept


@@ 120,24 121,19 @@ namespace gui
            });
        }

        auto setUnderLine(bool val) -> void
        {
            underLine = val;
        }

        [[nodiscard]] auto getUnderLine() const noexcept
        auto setUnderLineProperties(UnderLineProperties val) -> void
        {
            return underLine;
            underLineProperties = val;
        }

        auto setUnderLinePadding(Position val) -> void
        [[nodiscard]] UnderLineProperties &getUnderLineProperties() noexcept
        {
            underLinePadding = val;
            return underLineProperties;
        }

        [[nodiscard]] auto getUnderLinePadding() const noexcept
        auto setLineSpacing(unsigned int val) -> void
        {
            return underLinePadding;
            linesSpacing = val;
        }

        auto draw(BlockCursor &drawCursor, Length w, Length h, Position lineYPosition, Position lineXPosition) -> void;

M module-gui/gui/widgets/Style.hpp => module-gui/gui/widgets/Style.hpp +5 -4
@@ 280,10 280,11 @@ namespace style

    namespace margins
    {
        inline constexpr auto small    = 6U;
        inline constexpr auto big      = 8U;
        inline constexpr auto very_big = 12U;
        inline constexpr auto huge     = 24U;
        inline constexpr auto very_small = 3U;
        inline constexpr auto small      = 6U;
        inline constexpr auto big        = 8U;
        inline constexpr auto very_big   = 12U;
        inline constexpr auto huge       = 24U;
    } // namespace margins

    namespace padding

M module-gui/gui/widgets/Text.cpp => module-gui/gui/widgets/Text.cpp +3 -3
@@ 113,10 113,10 @@ namespace gui
        limitsList.clear();
    }

    void Text::setUnderline(const bool val)
    void Text::drawUnderline(bool val)
    {
        if (lines->getUnderLine() != val) {
            lines->setUnderLine(val);
        if (lines->getUnderLineProperties().draw != val) {
            lines->getUnderLineProperties().draw = val;
            drawLines();
        }
    }

M module-gui/gui/widgets/Text.hpp => module-gui/gui/widgets/Text.hpp +1 -1
@@ 134,7 134,7 @@ namespace gui
        void setTextType(TextType type);
        void setTextLimitType(TextLimitType limitType, unsigned int val = 0);
        void clearTextLimits();
        void setUnderline(bool val);
        void drawUnderline(bool val);
        virtual void setText(const UTF8 &text);
        void setText(std::unique_ptr<TextDocument> &&document);


M module-gui/gui/widgets/TextFixedSize.cpp => module-gui/gui/widgets/TextFixedSize.cpp +18 -4
@@ 1,5 1,5 @@

// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <module-gui/gui/core/RawFont.hpp>


@@ 10,7 10,7 @@ namespace gui
    TextFixedSize::TextFixedSize(Item *parent, Position x, Position y, Length w, Length h) : Text(parent, x, y, w, h)
    {
        setEditMode(EditMode::Edit);
        lines->setUnderLine(true);
        drawUnderline(true);
    }

    void TextFixedSize::setLines(const unsigned int val)


@@ 21,10 21,24 @@ namespace gui
        }
    }

    void TextFixedSize::setLinesSpacing(unsigned int val)
    {
        lines->setLineSpacing(val);
        drawLines();
    }

    void TextFixedSize::setUnderlinePadding(Position val)
    {
        if (lines->getUnderLinePadding() != val) {
            lines->setUnderLinePadding(val);
        if (lines->getUnderLineProperties().underLinePadding != val) {
            lines->getUnderLineProperties().underLinePadding = val;
            drawLines();
        }
    }

    void TextFixedSize::setUnderlineThickness(unsigned int val)
    {
        if (lines->getUnderLineProperties().thickness != val) {
            lines->getUnderLineProperties().thickness = val;
            drawLines();
        }
    }

M module-gui/gui/widgets/TextFixedSize.hpp => module-gui/gui/widgets/TextFixedSize.hpp +4 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 18,8 18,10 @@ namespace gui
      public:
        TextFixedSize(Item *parent, Position x, Position y, Length w, Length h);

        void setLines(const unsigned int val);
        void setLines(unsigned int val);
        void setLinesSpacing(unsigned int val);
        void setUnderlinePadding(Position val);
        void setUnderlineThickness(unsigned int val);
    };

} // namespace gui

M module-gui/gui/widgets/TextLine.cpp => module-gui/gui/widgets/TextLine.cpp +9 -11
@@ 170,10 170,7 @@ namespace gui
        widthUsed              = from.widthUsed;
        heightUsed             = from.heightUsed;
        underline              = from.underline;
        drawUnderline          = from.drawUnderline;
        drawUnderlineMode      = from.drawUnderlineMode;
        underlinePadding       = from.underlinePadding;
        underlineHeight        = from.underlineHeight;
        underLineProperties    = from.underLineProperties;
        lineEnd                = from.lineEnd;
        end                    = from.end;
        maxWidth               = from.maxWidth;


@@ 227,7 224,7 @@ namespace gui

        for (auto &el : lineContent) {
            auto scopedDisown = ScopedParentDisown(el);
            el->setArea({lineXPosition, y - underlinePadding, el->getWidth(), el->getHeight()});
            el->setArea({lineXPosition, y - underLineProperties.underLinePadding, el->getWidth(), el->getHeight()});
            lineXPosition += el->getWidth();
        }
    }


@@ 246,7 243,7 @@ namespace gui
            return;
        }

        createUnderline(maxWidth, underlineHeight);
        createUnderline(maxWidth, underLineProperties.underlineHeight);
        parent->addWidget(underline);

        for (auto &el : lineContent) {


@@ 337,7 334,7 @@ namespace gui

        if (xOffset >= 0) {

            if (underline != nullptr && drawUnderlineMode == UnderlineDrawMode::Concurrent)
            if (underline != nullptr && underLineProperties.drawUnderlineMode == UnderlineDrawMode::Concurrent)
                underline->setPosition(underline->getPosition(Axis::X) + xOffset, Axis::X);

            for (auto &el : lineContent) {


@@ 368,12 365,13 @@ namespace gui

    void TextLine::createUnderline(unsigned int width, unsigned int initHeight)
    {
        if (drawUnderline) {
        if (underLineProperties.draw) {

            underline = new Rect(nullptr, 0, 0, maxWidth, initHeight);
            underline->setPenWidth(underLineProperties.thickness);
            underline->setEdges(RectangleEdge::Bottom);

            if (drawUnderlineMode == UnderlineDrawMode::WholeLine) {
            if (underLineProperties.drawUnderlineMode == UnderlineDrawMode::WholeLine) {
                heightUsed = std::max(heightUsed, (Length)initHeight);
            }
        }


@@ 381,10 379,10 @@ namespace gui

    void TextLine::updateUnderline(const short &x, const short &y)
    {
        if (underline != nullptr && drawUnderlineMode == UnderlineDrawMode::WholeLine) {
        if (underline != nullptr && underLineProperties.drawUnderlineMode == UnderlineDrawMode::WholeLine) {
            underline->setArea({x, y, underline->widgetArea.w, height()});
        }
        else if (underline != nullptr && drawUnderlineMode == UnderlineDrawMode::Concurrent) {
        else if (underline != nullptr && underLineProperties.drawUnderlineMode == UnderlineDrawMode::Concurrent) {
            underline->setArea({x, y, getWidth(), height()});
        }
    }

M module-gui/gui/widgets/TextLine.hpp => module-gui/gui/widgets/TextLine.hpp +14 -12
@@ 19,6 19,15 @@ namespace gui
        Concurrent
    };

    struct UnderLineProperties
    {
        bool draw                           = false;
        Position underLinePadding           = 0;
        unsigned int thickness              = 1;
        Length underlineHeight              = 0;
        UnderlineDrawMode drawUnderlineMode = UnderlineDrawMode::WholeLine;
    };

    /// interface element for TextDocument->getLine() <-- Text
    class TextLine
    {


@@ 27,11 36,8 @@ namespace gui
        Length heightUsed             = 0;
        Length maxWidth               = 0;
        std::list<Label *> lineContent;
        Rect *underline                     = nullptr;
        bool drawUnderline                  = false;
        UnderlineDrawMode drawUnderlineMode = UnderlineDrawMode::Concurrent;
        Position underlinePadding           = 0;
        Position underlineHeight            = 0;
        Rect *underline = nullptr;
        UnderLineProperties underLineProperties;
        TextBlock::End end                  = TextBlock::End::None;
        Position storedYOffset              = 0;
        bool lineEnd                        = false;


@@ 56,15 62,11 @@ namespace gui
        TextLine(BlockCursor &cursor,
                 unsigned int max_width,
                 unsigned int init_height,
                 bool drawUnderline,
                 UnderlineDrawMode drawUnderlineMode,
                 Position underlinePadding)
                 UnderLineProperties underLineProperties)
            : TextLine(cursor, max_width)
        {
            this->drawUnderline     = drawUnderline;
            this->drawUnderlineMode = drawUnderlineMode;
            this->underlinePadding  = underlinePadding;
            this->underlineHeight   = init_height;
            this->underLineProperties                 = underLineProperties;
            this->underLineProperties.underlineHeight = init_height;
        }

        ~TextLine();