From 70ad87ae0b3985c71f80a2acceff91aea929d64f Mon Sep 17 00:00:00 2001 From: Przemyslaw Brudny Date: Thu, 29 Jul 2021 20:31:04 +0200 Subject: [PATCH] [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. --- image/assets/lang/English.json | 2 +- .../widgets/SongItem.cpp | 6 ++-- .../application-notes/widgets/NotesItem.cpp | 2 +- .../data/PhonebookStyle.hpp | 7 ++-- .../models/NewContactModel.cpp | 5 +++ .../widgets/InformationWidget.cpp | 2 +- .../InputBoxWithLabelAndIconWidget.cpp | 12 +++++-- .../widgets/InputLinesWithLabelIWidget.cpp | 30 ++++++++++------- .../OutputLinesTextWithLabelWidget.cpp | 2 +- .../widgets/apps/SettingsSoundItem.cpp | 2 +- .../notifications/NotificationListItem.cpp | 2 +- .../options/type/OptionBellMenu.cpp | 2 +- .../options/type/OptionSetting.cpp | 4 +-- .../apps-common/options/type/OptionSimple.cpp | 2 +- .../widgets/TextWithIconsWidget.cpp | 4 +-- module-gui/gui/widgets/Lines.cpp | 5 ++- module-gui/gui/widgets/Lines.hpp | 32 ++++++++----------- module-gui/gui/widgets/Style.hpp | 9 +++--- module-gui/gui/widgets/Text.cpp | 6 ++-- module-gui/gui/widgets/Text.hpp | 2 +- module-gui/gui/widgets/TextFixedSize.cpp | 22 ++++++++++--- module-gui/gui/widgets/TextFixedSize.hpp | 6 ++-- module-gui/gui/widgets/TextLine.cpp | 20 ++++++------ module-gui/gui/widgets/TextLine.hpp | 26 ++++++++------- 24 files changed, 122 insertions(+), 90 deletions(-) diff --git a/image/assets/lang/English.json b/image/assets/lang/English.json index eb71f20a1984d1ebd02ff178773011ec28019310..f46d0b0cf2b10bd8f776fe0f22c7b3b19f71d6e7 100644 --- a/image/assets/lang/English.json +++ b/image/assets/lang/English.json @@ -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.", diff --git a/module-apps/application-music-player/widgets/SongItem.cpp b/module-apps/application-music-player/widgets/SongItem.cpp index 49f2313024373a3ddfba56edeae07c6840323616..747e36d828471f013f2e782b5898c0fb39e2b3a3 100644 --- a/module-apps/application-music-player/widgets/SongItem.cpp +++ b/module-apps/application-music-player/widgets/SongItem.cpp @@ -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); diff --git a/module-apps/application-notes/widgets/NotesItem.cpp b/module-apps/application-notes/widgets/NotesItem.cpp index 8f921caca43976d67098aead29b6d1b82fe059e2..8ce631a7df130ebdf20948eb3ff6c63d111e62da 100644 --- a/module-apps/application-notes/widgets/NotesItem.cpp +++ b/module-apps/application-notes/widgets/NotesItem.cpp @@ -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; } diff --git a/module-apps/application-phonebook/data/PhonebookStyle.hpp b/module-apps/application-phonebook/data/PhonebookStyle.hpp index c41b5cae4d7b8133a89e8d2a0674b24a6478e928..c97729257f25b89db17801d242b9c1d25ab76977 100644 --- a/module-apps/application-phonebook/data/PhonebookStyle.hpp +++ b/module-apps/application-phonebook/data/PhonebookStyle.hpp @@ -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 diff --git a/module-apps/application-phonebook/models/NewContactModel.cpp b/module-apps/application-phonebook/models/NewContactModel.cpp index 96be7d77d71a1195cf823dcee749392b3de80602..1ad67056e95da9468039666b18816fc31ce24a20 100644 --- a/module-apps/application-phonebook/models/NewContactModel.cpp +++ b/module-apps/application-phonebook/models/NewContactModel.cpp @@ -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); }, diff --git a/module-apps/application-phonebook/widgets/InformationWidget.cpp b/module-apps/application-phonebook/widgets/InformationWidget.cpp index 003fd8e0c35628ad08e0be0ddcd0ff8da4985239..a276806db0b638ca6f9d113ae67bc3f43fb2a170 100644 --- a/module-apps/application-phonebook/widgets/InformationWidget.cpp +++ b/module-apps/application-phonebook/widgets/InformationWidget.cpp @@ -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); diff --git a/module-apps/application-phonebook/widgets/InputBoxWithLabelAndIconWidget.cpp b/module-apps/application-phonebook/widgets/InputBoxWithLabelAndIconWidget.cpp index 17f8cef68461425d9a29acfb3cad8bae24631ca4..09be0e42a32b7bf67e762fab069829633ba099a9 100644 --- a/module-apps/application-phonebook/widgets/InputBoxWithLabelAndIconWidget.cpp +++ b/module-apps/application-phonebook/widgets/InputBoxWithLabelAndIconWidget.cpp @@ -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; diff --git a/module-apps/application-phonebook/widgets/InputLinesWithLabelIWidget.cpp b/module-apps/application-phonebook/widgets/InputLinesWithLabelIWidget.cpp index cb691933f2364927ec1e7f1538379916d0d79a1c..4bf864347d56185f53c629de6ff5779a3bd2bed5 100644 --- a/module-apps/application-phonebook/widgets/InputLinesWithLabelIWidget.cpp +++ b/module-apps/application-phonebook/widgets/InputLinesWithLabelIWidget.cpp @@ -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 contact) { contact->primaryName = inputText->getText(); }; - onLoadCallback = [&](std::shared_ptr contact) { inputText->setText(contact->primaryName); }; + onSaveCallback = [&](std::shared_ptr contact) { contact->primaryName = inputText->getText(); }; + onLoadCallback = [&](std::shared_ptr contact) { inputText->setText(contact->primaryName); }; onEmptyCallback = [&]() { return inputText->isEmpty(); }; } void InputLinesWithLabelIWidget::secondNameHandler() @@ -138,7 +146,7 @@ namespace gui onSaveCallback = [&](std::shared_ptr contact) { contact->alternativeName = inputText->getText(); }; - onLoadCallback = [&](std::shared_ptr contact) { inputText->setText(contact->alternativeName); }; + onLoadCallback = [&](std::shared_ptr 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 contact) { contact->mail = inputText->getText(); }; - onLoadCallback = [&](std::shared_ptr contact) { inputText->setText(contact->mail); }; + onSaveCallback = [&](std::shared_ptr contact) { contact->mail = inputText->getText(); }; + onLoadCallback = [&](std::shared_ptr contact) { inputText->setText(contact->mail); }; onEmptyCallback = [&]() { return inputText->isEmpty(); }; } void InputLinesWithLabelIWidget::addressHandler() diff --git a/module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp b/module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp index 88279424abdf8c72b2144b2c72e88f401c56a5b0..9a111409561c6a4107e36476d253e0a560b867d4 100644 --- a/module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp +++ b/module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp @@ -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); diff --git a/module-apps/application-settings/widgets/apps/SettingsSoundItem.cpp b/module-apps/application-settings/widgets/apps/SettingsSoundItem.cpp index f0dc4be1aec07d1f4ddf9dc6440f2def945e6ac8..96cd82fd9864a2a52a4b9c8d6865e7d7723655b3 100644 --- a/module-apps/application-settings/widgets/apps/SettingsSoundItem.cpp +++ b/module-apps/application-settings/widgets/apps/SettingsSoundItem.cpp @@ -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?? diff --git a/module-apps/apps-common/notifications/NotificationListItem.cpp b/module-apps/apps-common/notifications/NotificationListItem.cpp index 16126e87c7ef3adf9d29e252796433e41226368d..af3f9a315f857d8ff4aa50eb77f40693f43b81df 100644 --- a/module-apps/apps-common/notifications/NotificationListItem.cpp +++ b/module-apps/apps-common/notifications/NotificationListItem.cpp @@ -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); diff --git a/module-apps/apps-common/options/type/OptionBellMenu.cpp b/module-apps/apps-common/options/type/OptionBellMenu.cpp index 09999c127a3a8958187cdf900f29ff2dc934b49d..75af7882db729fe6d5a5062313ae831f95ae007d 100644 --- a/module-apps/apps-common/options/type/OptionBellMenu.cpp +++ b/module-apps/apps-common/options/type/OptionBellMenu.cpp @@ -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); diff --git a/module-apps/apps-common/options/type/OptionSetting.cpp b/module-apps/apps-common/options/type/OptionSetting.cpp index 5c09bd44b7f6ce9672b0d6c0a57a78772443e4e9..1204e2e72bd2a273985d61ec3a6d613ce3f9870f 100644 --- a/module-apps/apps-common/options/type/OptionSetting.cpp +++ b/module-apps/apps-common/options/type/OptionSetting.cpp @@ -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); diff --git a/module-apps/apps-common/options/type/OptionSimple.cpp b/module-apps/apps-common/options/type/OptionSimple.cpp index 5e17e70b70f33712f6769e30b16a1143d895011f..6dc31513c9e243fb79cd195dc530bc6772777d40 100644 --- a/module-apps/apps-common/options/type/OptionSimple.cpp +++ b/module-apps/apps-common/options/type/OptionSimple.cpp @@ -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); diff --git a/module-apps/apps-common/widgets/TextWithIconsWidget.cpp b/module-apps/apps-common/widgets/TextWithIconsWidget.cpp index 79c5c2d0d450a4e2ed70335daf807b38fc265e90..d5b88d1a5d4a568d35c0a236825f00f9c9aae324 100644 --- a/module-apps/apps-common/widgets/TextWithIconsWidget.cpp +++ b/module-apps/apps-common/widgets/TextWithIconsWidget.cpp @@ -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; } diff --git a/module-gui/gui/widgets/Lines.cpp b/module-gui/gui/widgets/Lines.cpp index bb0af2321d732dbb17e1b12fc3cfa57e86f83047..052a5389269db8458861c8f7dada0cd0022f4a26 100644 --- a/module-gui/gui/widgets/Lines.cpp +++ b/module-gui/gui/widgets/Lines.cpp @@ -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; } } diff --git a/module-gui/gui/widgets/Lines.hpp b/module-gui/gui/widgets/Lines.hpp index 1466b0b4f53cc60e4a4ed35c3f41bd23d2d9c3fa..254708e953125f5080ea8c844bd5bd6e100c191d 100644 --- a/module-gui/gui/widgets/Lines.hpp +++ b/module-gui/gui/widgets/Lines.hpp @@ -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 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; diff --git a/module-gui/gui/widgets/Style.hpp b/module-gui/gui/widgets/Style.hpp index 115f454df21f4483a624329019f91890557d46cc..b4bfced40628943060c3668374733361aae98962 100644 --- a/module-gui/gui/widgets/Style.hpp +++ b/module-gui/gui/widgets/Style.hpp @@ -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 diff --git a/module-gui/gui/widgets/Text.cpp b/module-gui/gui/widgets/Text.cpp index 4e66f36687817125507b84f82c3e5cd979c7f2a4..b1c12b343c733018b489993a86c24ed0f40b4588 100644 --- a/module-gui/gui/widgets/Text.cpp +++ b/module-gui/gui/widgets/Text.cpp @@ -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(); } } diff --git a/module-gui/gui/widgets/Text.hpp b/module-gui/gui/widgets/Text.hpp index d8a96ef9e36c7f3dbfcc693b650d55b866e82a09..a7604a29ab0beb18a00270b0d1763309f7cf9e4d 100644 --- a/module-gui/gui/widgets/Text.hpp +++ b/module-gui/gui/widgets/Text.hpp @@ -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 &&document); diff --git a/module-gui/gui/widgets/TextFixedSize.cpp b/module-gui/gui/widgets/TextFixedSize.cpp index a36f7ecaa685c7c205213e8ecf3065df74e7fb5f..8e78295b6f3795db309939710fd871eb72c4b603 100644 --- a/module-gui/gui/widgets/TextFixedSize.cpp +++ b/module-gui/gui/widgets/TextFixedSize.cpp @@ -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 @@ -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(); } } diff --git a/module-gui/gui/widgets/TextFixedSize.hpp b/module-gui/gui/widgets/TextFixedSize.hpp index 1273130f44f0634de51816eba43d73013550e568..da29ea72b98dfafc6cc0a7bcf3173e2aa69e9657 100644 --- a/module-gui/gui/widgets/TextFixedSize.hpp +++ b/module-gui/gui/widgets/TextFixedSize.hpp @@ -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 diff --git a/module-gui/gui/widgets/TextLine.cpp b/module-gui/gui/widgets/TextLine.cpp index d7cddb2fe7c95a841cd6ef2414b005c54448849d..4ccf81542a99ef03b833ef7da3a94a9f7336c30f 100644 --- a/module-gui/gui/widgets/TextLine.cpp +++ b/module-gui/gui/widgets/TextLine.cpp @@ -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()}); } } diff --git a/module-gui/gui/widgets/TextLine.hpp b/module-gui/gui/widgets/TextLine.hpp index 0302f3d24ef3ea08e4daa0daf84009371bb49a62..4b1fa62bf379fedacae63667fce376ea844674e2 100644 --- a/module-gui/gui/widgets/TextLine.hpp +++ b/module-gui/gui/widgets/TextLine.hpp @@ -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