Better top bar customization

This commit is contained in:
Eric Kotato 2020-07-31 06:00:07 +03:00
parent 93ab8bd607
commit 0fab1489d4
4 changed files with 100 additions and 27 deletions

View file

@ -56,15 +56,15 @@ TopBarWidget::TopBarWidget(
not_null<Window::SessionController*> controller) not_null<Window::SessionController*> controller)
: RpWidget(parent) : RpWidget(parent)
, _controller(controller) , _controller(controller)
, _clear(this, tr::lng_selected_clear(), st::topBarClearButton) , _clear(this, tr::lng_selected_clear(), st::ktgTopBarClearButton)
, _forward(this, tr::lng_selected_forward(), st::defaultActiveButton) , _forward(this, tr::lng_selected_forward(), st::ktgTopBarActiveButton)
, _sendNow(this, tr::lng_selected_send_now(), st::defaultActiveButton) , _sendNow(this, tr::lng_selected_send_now(), st::ktgTopBarActiveButton)
, _delete(this, tr::lng_selected_delete(), st::defaultActiveButton) , _delete(this, tr::lng_selected_delete(), st::ktgTopBarActiveButton)
, _back(this, st::historyTopBarBack) , _back(this, st::ktgHistoryTopBarBack)
, _call(this, st::topBarCall) , _call(this, st::ktgTopBarCall)
, _search(this, st::topBarSearch) , _search(this, st::ktgTopBarSearch)
, _infoToggle(this, st::topBarInfo) , _infoToggle(this, st::ktgTopBarInfo)
, _menuToggle(this, st::topBarMenuToggle) , _menuToggle(this, st::ktgTopBarMenuToggle)
, _titlePeerText(st::windowMinWidth / 3) , _titlePeerText(st::windowMinWidth / 3)
, _onlineUpdater([=] { updateOnlineDisplay(); }) { , _onlineUpdater([=] { updateOnlineDisplay(); }) {
subscribe(Lang::Current().updated(), [=] { refreshLang(); }); subscribe(Lang::Current().updated(), [=] { refreshLang(); });
@ -318,7 +318,7 @@ void TopBarWidget::paintEvent(QPaintEvent *e) {
auto hasSelected = (_selectedCount > 0); auto hasSelected = (_selectedCount > 0);
auto selectedButtonsTop = countSelectedButtonsTop(_selectedShown.value(hasSelected ? 1. : 0.)); auto selectedButtonsTop = countSelectedButtonsTop(_selectedShown.value(hasSelected ? 1. : 0.));
p.fillRect(QRect(0, 0, width(), st::topBarHeight), st::topBarBg); p.fillRect(QRect(0, 0, width(), st::topBarHeight), st::ktgTopBarBg);
if (selectedButtonsTop < 0) { if (selectedButtonsTop < 0) {
p.translate(0, selectedButtonsTop + st::topBarHeight); p.translate(0, selectedButtonsTop + st::topBarHeight);
paintTopBar(p); paintTopBar(p);
@ -349,7 +349,7 @@ void TopBarWidget::paintTopBar(Painter &p) {
if (availableWidth < textWidth) { if (availableWidth < textWidth) {
text = st::historySavedFont->elided(text, availableWidth); text = st::historySavedFont->elided(text, availableWidth);
} }
p.setPen(st::dialogsNameFg); p.setPen(st::ktgTopBarNameFg);
p.setFont(st::historySavedFont); p.setFont(st::historySavedFont);
p.drawTextLeft( p.drawTextLeft(
nameleft, nameleft,
@ -359,7 +359,7 @@ void TopBarWidget::paintTopBar(Painter &p) {
} else if (_section == Section::Scheduled) { } else if (_section == Section::Scheduled) {
auto text = tr::lng_scheduled_messages(tr::now); auto text = tr::lng_scheduled_messages(tr::now);
p.setPen(st::dialogsNameFg); p.setPen(st::ktgTopBarNameFg);
if (history) { if (history) {
const auto textWidth = st::msgNameFont->width(text); const auto textWidth = st::msgNameFont->width(text);
@ -374,7 +374,7 @@ void TopBarWidget::paintTopBar(Painter &p) {
text); text);
auto nameText = history->peer->topBarNameText().toString(); auto nameText = history->peer->topBarNameText().toString();
p.setPen(st::historyStatusFg); p.setPen(st::ktgTopBarStatusFg);
Ui::Text::String nameTextStr; Ui::Text::String nameTextStr;
nameTextStr.setText(st::dialogsTextStyle, nameText, Ui::NameTextOptions()); nameTextStr.setText(st::dialogsTextStyle, nameText, Ui::NameTextOptions());
@ -410,7 +410,7 @@ void TopBarWidget::paintTopBar(Painter &p) {
badgeStyle); badgeStyle);
const auto namewidth = availableWidth - badgeWidth; const auto namewidth = availableWidth - badgeWidth;
p.setPen(st::dialogsNameFg); p.setPen(st::ktgTopBarNameFg);
peer->topBarNameText().drawElided( peer->topBarNameText().drawElided(
p, p,
nameleft, nameleft,
@ -426,7 +426,7 @@ void TopBarWidget::paintTopBar(Painter &p) {
statustop, statustop,
availableWidth, availableWidth,
width(), width(),
st::historyStatusFgTyping, st::ktgTopBarStatusFgActive,
crl::now())) { crl::now())) {
return; return;
} else { } else {
@ -453,7 +453,7 @@ bool TopBarWidget::paintConnectingState(
left += st::topBarConnectingPosition.x() left += st::topBarConnectingPosition.x()
+ st::topBarConnectingAnimation.size.width() + st::topBarConnectingAnimation.size.width()
+ st::topBarConnectingSkip; + st::topBarConnectingSkip;
p.setPen(st::historyStatusFg); p.setPen(st::ktgTopBarStatusFg);
p.drawTextLeft(left, top, outerWidth, tr::lng_status_connecting(tr::now)); p.drawTextLeft(left, top, outerWidth, tr::lng_status_connecting(tr::now));
return true; return true;
} }
@ -465,8 +465,8 @@ void TopBarWidget::paintStatus(
int availableWidth, int availableWidth,
int outerWidth) { int outerWidth) {
p.setPen(_titlePeerTextOnline p.setPen(_titlePeerTextOnline
? st::historyStatusFgActive ? st::ktgTopBarStatusFgActive
: st::historyStatusFg); : st::ktgTopBarStatusFg);
_titlePeerText.drawLeftElided(p, left, top, availableWidth, outerWidth); _titlePeerText.drawLeftElided(p, left, top, availableWidth, outerWidth);
} }
@ -852,10 +852,10 @@ void TopBarWidget::updateInfoToggleActive() {
&& (Core::App().settings().thirdSectionInfoEnabled() && (Core::App().settings().thirdSectionInfoEnabled()
|| Core::App().settings().tabbedReplacedWithInfo()); || Core::App().settings().tabbedReplacedWithInfo());
auto iconOverride = infoThirdActive auto iconOverride = infoThirdActive
? &st::topBarInfoActive ? &st::ktgTopBarInfoActive
: nullptr; : nullptr;
auto rippleOverride = infoThirdActive auto rippleOverride = infoThirdActive
? &st::lightButtonBgOver ? &st::ktgTopBarIconBgActiveRipple
: nullptr; : nullptr;
_infoToggle->setIconOverride(iconOverride, iconOverride); _infoToggle->setIconOverride(iconOverride, iconOverride);
_infoToggle->setRippleColorOverride(rippleOverride); _infoToggle->setRippleColorOverride(rippleOverride);

View file

@ -833,3 +833,76 @@ separatePanelBack: IconButton(separatePanelClose) {
icon: infoTopBarBackIcon; icon: infoTopBarBackIcon;
iconOver: infoTopBarBackIconOver; iconOver: infoTopBarBackIconOver;
} }
ktgHistoryTopBarBack: IconButton(historyTopBarBack) {
icon: icon {{ "info_back", ktgTopBarBackIconFg }};
iconOver: icon {{ "info_back", ktgTopBarBackIconFgOver }};
ripple: RippleAnimation(defaultRippleAnimation) {
color: ktgTopBarBackIconBgRipple;
}
}
ktgTopBarCall: IconButton(topBarCall) {
icon: icon {{ "top_bar_call", ktgTopBarIconFg }};
iconOver: icon {{ "top_bar_call", ktgTopBarIconFgOver }};
ripple: RippleAnimation(defaultRippleAnimation) {
color: ktgTopBarIconBgRipple;
}
}
ktgTopBarSearch: IconButton(topBarSearch) {
icon: icon {{ "top_bar_search", ktgTopBarIconFg }};
iconOver: icon {{ "top_bar_search", ktgTopBarIconFgOver }};
ripple: RippleAnimation(defaultRippleAnimation) {
color: ktgTopBarIconBgRipple;
}
}
ktgTopBarInfo: IconButton(topBarInfo) {
icon: icon {{ "top_bar_profile", ktgTopBarIconFg }};
iconOver: icon {{ "top_bar_profile", ktgTopBarIconFgOver }};
ripple: RippleAnimation(defaultRippleAnimation) {
color: ktgTopBarIconBgRipple;
}
}
ktgTopBarInfoActive: icon {{ "top_bar_profile", ktgTopBarIconFgActive }};
ktgTopBarMenuToggle: IconButton(topBarMenuToggle) {
icon: icon {{ "title_menu_dots", ktgTopBarIconFg }};
iconOver: icon {{ "title_menu_dots", ktgTopBarIconFgOver }};
ripple: RippleAnimation(defaultRippleAnimation) {
color: ktgTopBarIconBgRipple;
}
}
ktgTopBarActiveButton: RoundButton(defaultActiveButton) {
textFg: ktgTopBarActiveButtonFg;
textFgOver: ktgTopBarActiveButtonFgOver;
numbersTextFg: ktgTopBarActiveButtonSecondaryFg;
numbersTextFgOver: ktgTopBarActiveButtonSecondaryFgOver;
textBg: ktgTopBarActiveButtonBg;
textBgOver: ktgTopBarActiveButtonBgOver;
ripple: RippleAnimation(defaultRippleAnimation) {
color: ktgTopBarActiveButtonBgRipple;
}
}
ktgTopBarClearButton: RoundButton(topBarClearButton) {
textFg: ktgTopBarClearButtonFg;
textFgOver: ktgTopBarClearButtonFgOver;
numbersTextFg: ktgTopBarClearButtonFg;
numbersTextFgOver: ktgTopBarClearButtonFgOver;
textBg: ktgTopBarClearButtonBg;
textBgOver: ktgTopBarClearButtonBgOver;
ripple: RippleAnimation(defaultRippleAnimation) {
color: ktgTopBarClearButtonBgRipple;
}
}

View file

@ -479,14 +479,14 @@ void Generator::paintHistoryBackground() {
} }
void Generator::paintTopBar() { void Generator::paintTopBar() {
_p->fillRect(_topBar, st::topBarBg[_palette]); _p->fillRect(_topBar, st::ktgTopBarBg[_palette]);
auto right = st::topBarMenuToggle.width; auto right = st::topBarMenuToggle.width;
st::topBarMenuToggle.icon[_palette].paint(*_p, _topBar.x() + _topBar.width() - right + st::topBarMenuToggle.iconPosition.x(), _topBar.y() + st::topBarMenuToggle.iconPosition.y(), _rect.width()); st::ktgTopBarMenuToggle.icon[_palette].paint(*_p, _topBar.x() + _topBar.width() - right + st::topBarMenuToggle.iconPosition.x(), _topBar.y() + st::topBarMenuToggle.iconPosition.y(), _rect.width());
right += st::topBarSearch.width; right += st::topBarSearch.width;
st::topBarSearch.icon[_palette].paint(*_p, _topBar.x() + _topBar.width() - right + st::topBarSearch.iconPosition.x(), _topBar.y() + st::topBarSearch.iconPosition.y(), _rect.width()); st::ktgTopBarSearch.icon[_palette].paint(*_p, _topBar.x() + _topBar.width() - right + st::topBarSearch.iconPosition.x(), _topBar.y() + st::topBarSearch.iconPosition.y(), _rect.width());
right += st::topBarCallSkip + st::topBarCall.width; right += st::topBarCallSkip + st::topBarCall.width;
st::topBarCall.icon[_palette].paint(*_p, _topBar.x() + _topBar.width() - right + st::topBarCall.iconPosition.x(), _topBar.y() + st::topBarCall.iconPosition.y(), _rect.width()); st::ktgTopBarCall.icon[_palette].paint(*_p, _topBar.x() + _topBar.width() - right + st::topBarCall.iconPosition.x(), _topBar.y() + st::topBarCall.iconPosition.y(), _rect.width());
auto decreaseWidth = st::topBarCall.width + st::topBarCallSkip + st::topBarSearch.width + st::topBarMenuToggle.width; auto decreaseWidth = st::topBarCall.width + st::topBarCallSkip + st::topBarSearch.width + st::topBarMenuToggle.width;
auto nameleft = _topBar.x() + st::topBarArrowPadding.right(); auto nameleft = _topBar.x() + st::topBarArrowPadding.right();
@ -494,10 +494,10 @@ void Generator::paintTopBar() {
auto statustop = _topBar.y() + st::topBarHeight - st::topBarArrowPadding.bottom() - st::dialogsTextFont->height; auto statustop = _topBar.y() + st::topBarHeight - st::topBarArrowPadding.bottom() - st::dialogsTextFont->height;
auto namewidth = _topBar.x() + _topBar.width() - decreaseWidth - nameleft - st::topBarArrowPadding.right(); auto namewidth = _topBar.x() + _topBar.width() - decreaseWidth - nameleft - st::topBarArrowPadding.right();
_p->setFont(st::dialogsTextFont); _p->setFont(st::dialogsTextFont);
_p->setPen(_topBarStatusActive ? st::historyStatusFgActive[_palette] : st::historyStatusFg[_palette]); _p->setPen(_topBarStatusActive ? st::ktgTopBarStatusFgActive[_palette] : st::ktgTopBarStatusFg[_palette]);
_p->drawText(nameleft, statustop + st::dialogsTextFont->ascent, _topBarStatus); _p->drawText(nameleft, statustop + st::dialogsTextFont->ascent, _topBarStatus);
_p->setPen(st::dialogsNameFg[_palette]); _p->setPen(st::ktgTopBarNameFg[_palette]);
_topBarName.drawElided(*_p, nameleft, nametop, namewidth); _topBarName.drawElided(*_p, nameleft, nametop, namewidth);
} }

@ -1 +1 @@
Subproject commit 58c35e9dcc24198332958d5f874d318f5cea77ec Subproject commit c279e4b0be5964838ce9d52dc53ac6960e628dfe