From 54085c70a4171a910c3523c8eb5ef67322a86972 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 19 Sep 2021 17:39:29 +0300 Subject: [PATCH] Select light / dark custom theme based on dialogsBg value. --- Telegram/SourceFiles/window/section_widget.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/window/section_widget.cpp b/Telegram/SourceFiles/window/section_widget.cpp index 1da38491f..02801126d 100644 --- a/Telegram/SourceFiles/window/section_widget.cpp +++ b/Telegram/SourceFiles/window/section_widget.cpp @@ -25,6 +25,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Window { namespace { +constexpr auto kDarkValueThreshold = 0.5; + [[nodiscard]] rpl::producer PeerThemeEmojiValue( not_null peer) { return peer->session().changes().peerFlagsValue( @@ -49,9 +51,17 @@ namespace { [[nodiscard]] auto MaybeCloudThemeValueFromPeer( not_null peer) -> rpl::producer> { + auto isThemeDarkValue = rpl::single( + rpl::empty_value() + ) | rpl::then( + style::PaletteChanged() + ) | rpl::map([] { + return (st::dialogsBg->c.valueF() < kDarkValueThreshold); + }) | rpl::distinct_until_changed(); + return rpl::combine( MaybeChatThemeDataValueFromPeer(peer), - Theme::IsNightModeValue() + std::move(isThemeDarkValue) ) | rpl::map([](std::optional theme, bool night) { return !theme ? std::nullopt