Customize DividerBar/DividerLabel styles.

This commit is contained in:
John Preston
2025-11-07 12:51:34 +04:00
parent 7331160e22
commit ad300f5eae
26 changed files with 145 additions and 56 deletions
@@ -466,8 +466,7 @@ void CreateModerateMessagesBox(
inner->add(object_ptr<Ui::DividerLabel>(
inner,
std::move(label),
st::defaultBoxDividerLabelPadding,
RectPart::Top | RectPart::Bottom));
st::defaultBoxDividerLabelPadding));
using Flag = ChatRestriction;
using Flags = ChatRestrictions;
@@ -147,8 +147,7 @@ void ShowReportMessageBox(
auto label = object_ptr<Ui::FlatLabel>(
container,
tr::lng_report_details_message_about(),
st::boxDividerLabel);
label->setTextColorOverride(st->dividerFg->c);
st->divider.label);
using namespace Ui;
const auto widget = container->add(
object_ptr<PaddingWrap<>>(
@@ -159,7 +158,7 @@ void ShowReportMessageBox(
= CreateChild<BoxContentDivider>(
widget,
st::boxDividerHeight,
st->dividerBg,
st->divider.bar,
RectPart::Top | RectPart::Bottom);
background->lower();
widget->sizeValue(
+17 -3
View File
@@ -624,11 +624,12 @@ groupCallMenuCover: ShortInfoCover(shortInfoCover) {
namePosition: point(17px, 28px);
statusPosition: point(17px, 8px);
}
groupCallTextPalette: TextPalette(defaultTextPalette) {
linkFg: groupCallActiveFg;
}
groupCallMenuAbout: FlatLabel(defaultFlatLabel) {
textFg: groupCallMemberNotJoinedStatus;
palette: TextPalette(defaultTextPalette) {
linkFg: groupCallActiveFg;
}
palette: groupCallTextPalette;
minWidth: 200px;
maxHeight: 92px;
}
@@ -1082,6 +1083,19 @@ groupCallBox: Box(defaultBox) {
groupCallLayerBox: Box(groupCallBox) {
buttonPadding: margins(8px, 8px, 8px, 8px);
}
groupCallDividerBar: DividerBar {
bg: groupCallBg;
top: icon {{ "box_divider_top", groupCallMemberNotJoinedStatus }};
bottom: icon {{ "box_divider_bottom", groupCallMemberNotJoinedStatus }};
}
groupCallDividerLabel: DividerLabel {
bar: groupCallDividerBar;
label: FlatLabel(boxDividerLabel) {
textFg: groupCallVideoSubTextFg;
palette: groupCallTextPalette;
}
}
groupCallLevelMeter: LevelMeter(defaultLevelMeter) {
height: 18px;
lineWidth: 3px;
@@ -285,7 +285,7 @@ void SettingsBox(
layout->add(object_ptr<Ui::BoxContentDivider>(
layout,
st::boxDividerHeight,
st::groupCallDividerBg));
st::groupCallDividerBar));
};
if (addCheck || addMessages) {
@@ -213,7 +213,10 @@ Switcher::Switcher(
not_null<Ui::RpWidget*> parent,
rpl::producer<bool> &&toggled)
: RpWidget(parent)
, _background(this, st::groupCallRecordingInfoHeight, st::groupCallBg)
, _background(
this,
st::groupCallRecordingInfoHeight,
st::groupCallDividerBar)
, _audio(this)
, _video(this) {
_audio->prepareAudio();
@@ -225,8 +225,7 @@ ReportBox {
noIconButton: SettingsButton;
label: FlatLabel;
field: InputField;
dividerBg: color;
dividerFg: color;
divider: DividerLabel;
spam: icon;
fake: icon;
violence: icon;
@@ -1470,8 +1469,7 @@ defaultReportBox: ReportBox {
}
label: boxLabel;
field: newGroupDescription;
dividerBg: boxDividerBg;
dividerFg: windowSubTextFg;
divider: defaultDividerLabel;
spam: menuIconDelete;
fake: menuIconFake;
violence: menuIconViolence;
@@ -213,7 +213,7 @@ void AddPremiumTopBarWithDefaultTitleBar(
- st::boxTitleHeight
+ st::boxDividerHeight
+ st::defaultVerticalListSkip,
st::boxDividerBg,
st::defaultDividerBar,
RectPart::Bottom),
style::margins());
bar->setPaused(true);
@@ -607,8 +607,7 @@ void InnerWidget::fill() {
container->add(object_ptr<Ui::DividerLabel>(
container,
std::move(label),
st::defaultBoxDividerLabelPadding,
RectPart::Top | RectPart::Bottom));
st::defaultBoxDividerLabelPadding));
};
if (canViewCurrencyEarn) {
addAboutWithLearn(bot
@@ -194,8 +194,7 @@ void PreparedPreviewBox(
container,
tr::lng_bot_share_prepared_about(lt_bot, rpl::single(name)),
st::boxDividerLabel),
st::defaultBoxDividerLabelPadding,
RectPart::Top | RectPart::Bottom)));
st::defaultBoxDividerLabelPadding)));
const auto row = container->add(object_ptr<Ui::VerticalLayout>(
container));
@@ -914,8 +914,7 @@ storiesReportBox: ReportBox(defaultReportBox) {
textMargins: margins(1px, 26px, 1px, 4px);
heightMax: 116px;
}
dividerBg: groupCallBg;
dividerFg: groupCallVideoSubTextFg;
divider: groupCallDividerLabel;
spam: icon {{ "menu/delete", storiesComposeWhiteText }};
fake: icon {{ "menu/fake", storiesComposeWhiteText }};
violence: icon {{ "menu/violence", storiesComposeWhiteText }};
+1 -2
View File
@@ -345,8 +345,7 @@ void ShowReportSponsoredBox(
rpl::single(guideLink),
Ui::Text::WithEntities),
st::boxDividerLabel),
st::defaultBoxDividerLabelPadding,
RectPart::Top | RectPart::Bottom));
st::defaultBoxDividerLabelPadding));
}
box->addButton(
tr::lng_close(),
@@ -808,6 +808,7 @@ void ChatLinks::setupContent(
content,
std::move(label),
st::settingsChatbotsBottomTextMargin,
st::defaultDividerBar,
RectPart::Top));
Ui::ResizeFitChild(this, content);
@@ -468,6 +468,7 @@ void Chatbots::setupContent() {
content,
tr::lng_chatbots_add_about(),
st::peerAppearanceDividerTextMargin,
st::defaultDividerLabel,
RectPart::Top);
_detailsWrap = content->add(object_ptr<Ui::VerticalLayout>(content));
@@ -177,7 +177,7 @@ void Greeting::setupContent(
object_ptr<Ui::BoxContentDivider>(
content,
st::boxDividerHeight,
st::boxDividerBg,
st::defaultDividerBar,
RectPart::Top))
)->setDuration(0)->toggleOn(enabled->toggledValue() | rpl::map(!_1));
content->add(
@@ -256,6 +256,7 @@ void Greeting::setupContent(
inner,
tr::lng_greeting_period_about(),
st::settingsChatbotsBottomTextMargin,
st::defaultDividerLabel,
RectPart::Top);
wrap->toggleOn(enabled->toggledValue());
@@ -404,9 +404,9 @@ void Business::setStepDataReference(std::any &data) {
void Business::setupSwipeBack() {
using namespace Ui::Controls;
auto swipeBackData = lifetime().make_state<SwipeBackResult>();
auto update = [=](SwipeContextData data) {
if (data.translation > 0) {
if (!swipeBackData->callback) {
@@ -425,7 +425,7 @@ void Business::setupSwipeBack() {
(*swipeBackData) = {};
}
};
auto init = [=](int, Qt::LayoutDirection direction) {
return (direction == Qt::RightToLeft)
? DefaultSwipeBackHandlerFinishData([=] {
@@ -433,7 +433,7 @@ void Business::setupSwipeBack() {
})
: SwipeHandlerFinishData();
};
SetupSwipeHandler({
.widget = this,
.scroll = v::null,
@@ -585,8 +585,7 @@ void Business::setupContent() {
}),
Ui::Text::RichLangValue),
st::boxDividerLabel),
st::defaultBoxDividerLabelPadding,
RectPart::Top | RectPart::Bottom));
st::defaultBoxDividerLabelPadding));
}
const auto api = inner->lifetime().make_state<Api::SponsoredToggle>(
@@ -201,7 +201,7 @@ void AddDividerTextWithLottie(
const auto divider = Ui::CreateChild<Ui::BoxContentDivider>(
container.get(),
0,
st::boxDividerBg,
st::defaultDividerBar,
descriptor.parts);
const auto verticalLayout = container->add(
object_ptr<Ui::VerticalLayout>(container.get()));
@@ -454,7 +454,8 @@ void FillCreditOptions(
Fn<void()> paid,
rpl::producer<> showFinishes,
rpl::producer<QString> subtitle,
std::vector<Data::CreditTopupOption> preloadedTopupOptions) {
std::vector<Data::CreditTopupOption> preloadedTopupOptions,
bool dark) {
const auto options = container->add(
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
container,
@@ -491,9 +492,15 @@ void FillCreditOptions(
const auto fillLoading = [=] {
Ui::AddSkip(content, st::settingsPremiumOptionsPadding.top());
if (subtitle) {
Ui::AddSubsectionTitle(content, std::move(subtitle));
Ui::AddSubsectionTitle(
content,
std::move(subtitle),
{},
dark ? &st::groupCallSubsectionTitle : nullptr);
}
const auto &st = st::creditsTopupButton;
const auto &st = dark
? st::videoStreamTopupButton
: st::creditsTopupButton;
const auto loadingList = content;
const auto isRtl = QLocale().textDirection() == Qt::RightToLeft;
using WidgetPtr = object_ptr<Ui::RpWidget>;
@@ -533,7 +540,11 @@ void FillCreditOptions(
}
Ui::AddSkip(content, st::settingsPremiumOptionsPadding.top());
if (subtitle) {
Ui::AddSubsectionTitle(content, std::move(subtitle));
Ui::AddSubsectionTitle(
content,
std::move(subtitle),
{},
dark ? &st::groupCallSubsectionTitle : nullptr);
}
const auto buttons = content->add(
@@ -545,14 +556,18 @@ void FillCreditOptions(
object_ptr<Ui::SettingsButton>(
content,
tr::lng_credits_more_options(),
st::statisticsShowMoreButton)));
(dark
? st::videoStreamShowMoreButton
: st::statisticsShowMoreButton))));
const auto showMore = showMoreWrap->entity();
showMore->setClickedCallback([=] {
showMoreWrap->toggle(false, anim::type::instant);
});
Ui::AddToggleUpDownArrowToMoreButton(showMore);
const auto &st = st::creditsTopupButton;
const auto &st = dark
? st::videoStreamTopupButton
: st::creditsTopupButton;
const auto diffBetweenTextAndStar = st.padding.left()
- st.iconLeft
- int(singleStarWidth * 1.5);
@@ -593,7 +608,7 @@ void FillCreditOptions(
const auto price = Ui::CreateChild<Ui::FlatLabel>(
button,
Ui::FillAmountAndCurrency(option.amount, option.currency),
st::creditsTopupPrice);
dark ? st::videoStreamTopupPrice : st::creditsTopupPrice);
const auto inner = Ui::CreateChild<Ui::RpWidget>(button);
const auto getStars = [=] {
const auto starIndex = i + 1;
@@ -665,7 +680,11 @@ void FillCreditOptions(
}),
Ui::Text::RichLangValue);
Ui::AddSkip(content);
Ui::AddDividerText(content, std::move(text));
Ui::AddDividerText(
content,
std::move(text),
st::defaultBoxDividerLabelPadding,
dark ? st::groupCallDividerLabel : st::defaultDividerLabel);
}
content->resizeToWidth(container->width());
@@ -2864,6 +2883,7 @@ void SmallBalanceBox(
paid();
};
auto dark = false;
const auto owner = &show->session().data();
const auto name = v::match(source, [&](SmallBalanceBot value) {
return value.botId
@@ -2896,7 +2916,9 @@ void SmallBalanceBox(
const auto content = [&]() -> Ui::Premium::TopBarAbstract* {
return box->setPinnedToTopContent(object_ptr<Ui::Premium::TopBar>(
box,
st::creditsLowBalancePremiumCover,
(dark
? st::videoStreamStarsCover
: st::creditsLowBalancePremiumCover),
Ui::Premium::TopBarDescriptor{
.title = tr::lng_credits_small_balance_title(
lt_count,
@@ -2961,7 +2983,8 @@ void SmallBalanceBox(
[=] { show->session().credits().load(true); },
box->showFinishes(),
tr::lng_credits_summary_options_subtitle(),
{});
{},
dark);
content->setMaximumHeight(st::creditsLowBalancePremiumCoverHeight);
content->setMinimumHeight(st::infoLayerTopBarHeight);
@@ -2982,7 +3005,9 @@ void SmallBalanceBox(
content,
&show->session(),
show->session().credits().balanceValue(),
true);
true,
nullptr,
dark);
show->session().credits().load(true);
rpl::combine(
@@ -3358,8 +3383,7 @@ void AddWithdrawalWidget(
container->add(object_ptr<Ui::DividerLabel>(
container,
std::move(about),
st::defaultBoxDividerLabelPadding,
RectPart::Top | RectPart::Bottom));
st::defaultBoxDividerLabelPadding));
Ui::AddSkip(container);
}
@@ -76,7 +76,8 @@ void FillCreditOptions(
Fn<void()> paid,
rpl::producer<> showFinishes,
rpl::producer<QString> subtitle,
std::vector<Data::CreditTopupOption> preloadedTopupOptions);
std::vector<Data::CreditTopupOption> preloadedTopupOptions,
bool dark = false);
[[nodiscard]] not_null<Ui::RpWidget*> AddBalanceWidget(
not_null<Ui::RpWidget*> parent,
@@ -148,8 +148,7 @@ InviteLinkSubscriptionToggle FillCreateInviteLinkSubscriptionToggle(
container->add(object_ptr<Ui::DividerLabel>(
container,
std::move(about),
st::defaultBoxDividerLabelPadding,
RectPart::Top | RectPart::Bottom));
st::defaultBoxDividerLabelPadding));
return { toggle, input };
}
@@ -400,3 +400,40 @@ uniqueGiftValueAvailableLink: FlatLabel(boxLabel) {
}
}
uniqueGiftValueAvailableMargin: margins(0px, 4px, 0px, 4px);
videoStreamTopupRipple: RippleAnimation(defaultRippleAnimation) {
color: groupCallMembersBgRipple;
}
videoStreamTopupButton: SettingsButton(creditsTopupButton) {
textFg: groupCallMemberNotJoinedStatus;
textFgOver: groupCallMemberNotJoinedStatus;
textBg: groupCallMembersBg;
textBgOver: groupCallMembersBgOver;
ripple: videoStreamTopupRipple;
}
videoStreamTopupPrice: FlatLabel(creditsTopupPrice) {
textFg: groupCallMemberNotJoinedStatus;
}
videoStreamShowMoreButton: SettingsButton(defaultSettingsButton) {
textFg: groupCallActiveFg;
textFgOver: groupCallActiveFg;
textBg: groupCallMembersBg;
textBgOver: groupCallMembersBgOver;
padding: margins(70px, 10px, 22px, 8px);
ripple: videoStreamTopupRipple;
}
videoStreamStarsCover: PremiumCover(creditsLowBalancePremiumCover) {
bg: groupCallMembersBg;
titleFg: groupCallMembersFg;
about: FlatLabel(defaultFlatLabel) {
style: premiumAboutTextStyle;
palette: TextPalette(defaultTextPalette) {
linkFg: groupCallMembersFg;
}
align: align(top);
textFg: groupCallMembersFg;
minWidth: 190px;
}
}
@@ -34,6 +34,7 @@ PremiumCover {
starTopSkip: pixels;
titlePadding: margins;
titleFont: font;
titleFg: color;
about: FlatLabel;
aboutMaxWidth: pixels;
additionalShadowForDarkThemes: bool;
@@ -58,6 +59,7 @@ defaultPremiumCover: PremiumCover {
starTopSkip: 37px;
titlePadding: margins(0px, 18px, 0px, 11px);
titleFont: boxTitleFont;
titleFg: windowBoldFg;
about: FlatLabel(defaultFlatLabel) {
style: premiumAboutTextStyle;
palette: TextPalette(defaultTextPalette) {
@@ -290,9 +290,7 @@ void TopBar::paintEvent(QPaintEvent *e) {
_star.render(&p, _starRect);
}
const auto color = _light
? st::settingsPremiumUserTitle.textFg
: st::premiumButtonFg;
const auto color = _light ? st().titleFg : st::premiumButtonFg;
p.setPen(color);
const auto titlePathRect = _titlePath.boundingRect();
+12 -3
View File
@@ -24,19 +24,26 @@ void AddSkip(not_null<Ui::VerticalLayout*> container, int skip) {
container->add(object_ptr<Ui::FixedHeightWidget>(container, skip));
}
void AddDivider(not_null<Ui::VerticalLayout*> container) {
container->add(object_ptr<Ui::BoxContentDivider>(container));
void AddDivider(
not_null<Ui::VerticalLayout*> container,
const style::DividerBar &st) {
container->add(object_ptr<Ui::BoxContentDivider>(
container,
st::boxDividerHeight,
st));
}
not_null<Ui::FlatLabel*> AddDividerText(
not_null<Ui::VerticalLayout*> container,
rpl::producer<QString> text,
const style::margins &margins,
const style::DividerLabel &st,
RectParts parts) {
return AddDividerText(
container,
std::move(text) | Ui::Text::ToWithEntities(),
margins,
st,
parts);
}
@@ -44,16 +51,18 @@ not_null<Ui::FlatLabel*> AddDividerText(
not_null<Ui::VerticalLayout*> container,
rpl::producer<TextWithEntities> text,
const style::margins &margins,
const style::DividerLabel &st,
RectParts parts) {
auto label = object_ptr<Ui::FlatLabel>(
container,
std::move(text),
st::boxDividerLabel);
st.label);
const auto result = label.data();
container->add(object_ptr<Ui::DividerLabel>(
container,
std::move(label),
margins,
st.bar,
parts));
return result;
}
+9 -1
View File
@@ -11,10 +11,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace style {
struct FlatLabel;
struct DividerBar;
struct DividerLabel;
} // namespace style
namespace st {
extern const style::margins &defaultBoxDividerLabelPadding;
extern const style::DividerBar &defaultDividerBar;
extern const style::DividerLabel &defaultDividerLabel;
} // namespace st
namespace Ui {
@@ -24,16 +28,20 @@ class VerticalLayout;
void AddSkip(not_null<Ui::VerticalLayout*> container);
void AddSkip(not_null<Ui::VerticalLayout*> container, int skip);
void AddDivider(not_null<Ui::VerticalLayout*> container);
void AddDivider(
not_null<Ui::VerticalLayout*> container,
const style::DividerBar &st = st::defaultDividerBar);
not_null<Ui::FlatLabel*> AddDividerText(
not_null<Ui::VerticalLayout*> container,
rpl::producer<QString> text,
const style::margins &margins = st::defaultBoxDividerLabelPadding,
const style::DividerLabel &st = st::defaultDividerLabel,
RectParts parts = RectPart::Top | RectPart::Bottom);
not_null<Ui::FlatLabel*> AddDividerText(
not_null<Ui::VerticalLayout*> container,
rpl::producer<TextWithEntities> text,
const style::margins &margins = st::defaultBoxDividerLabelPadding,
const style::DividerLabel &st = st::defaultDividerLabel,
RectParts parts = RectPart::Top | RectPart::Bottom);
not_null<Ui::FlatLabel*> AddSubsectionTitle(
not_null<Ui::VerticalLayout*> container,