mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-02-24 17:26:58 +00:00
Update default chat background.
This commit is contained in:
parent
d29a1f5cd2
commit
f59db10267
Binary file not shown.
Before Width: | Height: | Size: 103 KiB |
BIN
Telegram/Resources/art/background.tgv
Normal file
BIN
Telegram/Resources/art/background.tgv
Normal file
Binary file not shown.
BIN
Telegram/Resources/art/bg_thumbnail.png
Normal file
BIN
Telegram/Resources/art/bg_thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
@ -242,6 +242,7 @@ void BackgroundBox::Inner::sortPapers() {
|
||||
night ? data.isDark() : !data.isDark(),
|
||||
Data::IsDefaultWallPaper(data),
|
||||
!data.isDefault() && !Data::IsLegacy1DefaultWallPaper(data),
|
||||
Data::IsLegacy3DefaultWallPaper(data),
|
||||
Data::IsLegacy2DefaultWallPaper(data),
|
||||
Data::IsLegacy1DefaultWallPaper(data));
|
||||
});
|
||||
@ -379,6 +380,7 @@ void BackgroundBox::Inner::paintPaper(
|
||||
} else if (Data::IsCloudWallPaper(paper.data)
|
||||
&& !Data::IsDefaultWallPaper(paper.data)
|
||||
&& !Data::IsLegacy2DefaultWallPaper(paper.data)
|
||||
&& !Data::IsLegacy3DefaultWallPaper(paper.data)
|
||||
&& !v::is_null(over)
|
||||
&& (&paper == &_papers[getSelectionIndex(over)])) {
|
||||
const auto deleteSelected = v::is<DeleteSelected>(over);
|
||||
@ -419,6 +421,7 @@ void BackgroundBox::Inner::mouseMoveEvent(QMouseEvent *e) {
|
||||
&& Data::IsCloudWallPaper(data)
|
||||
&& !Data::IsDefaultWallPaper(data)
|
||||
&& !Data::IsLegacy2DefaultWallPaper(data)
|
||||
&& !Data::IsLegacy3DefaultWallPaper(data)
|
||||
&& (currentId != data.id());
|
||||
return (result >= _papers.size())
|
||||
? Selection()
|
||||
|
@ -4054,10 +4054,18 @@ void Session::setWallpapers(const QVector<MTPWallPaper> &data, int32 hash) {
|
||||
ranges::rotate(begin(_wallpapers), legacy2, legacy2 + 1);
|
||||
}
|
||||
|
||||
// Put the legacy3 (static gradient) wallpaper to the front of the list.
|
||||
const auto legacy3 = ranges::find_if(
|
||||
_wallpapers,
|
||||
Data::IsLegacy3DefaultWallPaper);
|
||||
if (legacy3 != end(_wallpapers)) {
|
||||
ranges::rotate(begin(_wallpapers), legacy3, legacy3 + 1);
|
||||
}
|
||||
|
||||
if (ranges::none_of(_wallpapers, Data::IsDefaultWallPaper)) {
|
||||
_wallpapers.push_back(Data::DefaultWallPaper());
|
||||
_wallpapers.back().setLocalImageAsThumbnail(std::make_shared<Image>(
|
||||
u":/gui/art/background.jpg"_q));
|
||||
u":/gui/art/bg_thumbnail.png"_q));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,9 @@ constexpr auto kThemeBackground = FromLegacyBackgroundId(-2);
|
||||
constexpr auto kCustomBackground = FromLegacyBackgroundId(-1);
|
||||
constexpr auto kLegacy1DefaultBackground = FromLegacyBackgroundId(0);
|
||||
constexpr auto kLegacy2DefaultBackground = 5947530738516623361;
|
||||
constexpr auto kDefaultBackground = 5778236420632084488;
|
||||
constexpr auto kLegacy3DefaultBackground = 5778236420632084488;
|
||||
constexpr auto kLegacy4DefaultBackground = 5945087215657811969;
|
||||
constexpr auto kDefaultBackground = 5933856211186221059;
|
||||
constexpr auto kIncorrectDefaultBackground = FromLegacyBackgroundId(105);
|
||||
|
||||
constexpr auto kVersionTag = qint32(0x7FFFFFFF);
|
||||
@ -388,13 +390,16 @@ WallPaper WallPaper::withBackgroundColors(std::vector<QColor> colors) const {
|
||||
WallPaper WallPaper::withParamsFrom(const WallPaper &other) const {
|
||||
auto result = *this;
|
||||
result._blurred = other._blurred;
|
||||
if (!other._backgroundColors.empty() || ColorsFromString(_slug).empty()) {
|
||||
if (!other._backgroundColors.empty()) {
|
||||
result._backgroundColors = other._backgroundColors;
|
||||
if (!ColorsFromString(_slug).empty()) {
|
||||
result._slug = StringFromColors(result._backgroundColors);
|
||||
}
|
||||
}
|
||||
result._intensity = other._intensity;
|
||||
if (other.isPattern()) {
|
||||
result._flags |= WallPaperFlag::Pattern;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -632,6 +637,19 @@ std::optional<WallPaper> WallPaper::FromColorsSlug(const QString &slug) {
|
||||
return result;
|
||||
}
|
||||
|
||||
WallPaper WallPaper::ConstructDefault() {
|
||||
auto result = WallPaper(
|
||||
kDefaultBackground
|
||||
).withPatternIntensity(50).withBackgroundColors({
|
||||
QColor(219, 221, 187),
|
||||
QColor(107, 165, 135),
|
||||
QColor(213, 216, 141),
|
||||
QColor(136, 184, 132),
|
||||
});
|
||||
result._flags |= WallPaperFlag::Default | WallPaperFlag::Pattern;
|
||||
return result;
|
||||
}
|
||||
|
||||
WallPaper ThemeWallPaper() {
|
||||
return WallPaper(kThemeBackground);
|
||||
}
|
||||
@ -661,8 +679,16 @@ bool IsLegacy2DefaultWallPaper(const WallPaper &paper) {
|
||||
|| (paper.id() == kIncorrectDefaultBackground);
|
||||
}
|
||||
|
||||
bool IsLegacy3DefaultWallPaper(const WallPaper &paper) {
|
||||
return (paper.id() == kLegacy3DefaultBackground);
|
||||
}
|
||||
|
||||
bool IsLegacy4DefaultWallPaper(const WallPaper &paper) {
|
||||
return (paper.id() == kLegacy4DefaultBackground);
|
||||
}
|
||||
|
||||
WallPaper DefaultWallPaper() {
|
||||
return WallPaper(kDefaultBackground);
|
||||
return WallPaper::ConstructDefault();
|
||||
}
|
||||
|
||||
bool IsDefaultWallPaper(const WallPaper &paper) {
|
||||
@ -728,7 +754,9 @@ bool IsTestingThemeWallPaper(const WallPaper &paper) {
|
||||
}
|
||||
|
||||
WallPaper TestingDefaultWallPaper() {
|
||||
return WallPaper(kTestingDefaultBackground);
|
||||
return WallPaper(
|
||||
kTestingDefaultBackground
|
||||
).withParamsFrom(DefaultWallPaper());
|
||||
}
|
||||
|
||||
bool IsTestingDefaultWallPaper(const WallPaper &paper) {
|
||||
|
@ -90,6 +90,7 @@ public:
|
||||
qint32 legacyId);
|
||||
[[nodiscard]] static std::optional<WallPaper> FromColorsSlug(
|
||||
const QString &slug);
|
||||
[[nodiscard]] static WallPaper ConstructDefault();
|
||||
|
||||
private:
|
||||
static constexpr auto kDefaultIntensity = 50;
|
||||
@ -117,6 +118,8 @@ private:
|
||||
[[nodiscard]] WallPaper Legacy1DefaultWallPaper();
|
||||
[[nodiscard]] bool IsLegacy1DefaultWallPaper(const WallPaper &paper);
|
||||
[[nodiscard]] bool IsLegacy2DefaultWallPaper(const WallPaper &paper);
|
||||
[[nodiscard]] bool IsLegacy3DefaultWallPaper(const WallPaper &paper);
|
||||
[[nodiscard]] bool IsLegacy4DefaultWallPaper(const WallPaper &paper);
|
||||
[[nodiscard]] WallPaper DefaultWallPaper();
|
||||
[[nodiscard]] bool IsDefaultWallPaper(const WallPaper &paper);
|
||||
[[nodiscard]] bool IsCloudWallPaper(const WallPaper &paper);
|
||||
|
@ -682,12 +682,13 @@ bool readBackground() {
|
||||
const auto isOldEmptyImage = (bg.stream.status() != QDataStream::Ok);
|
||||
if (isOldEmptyImage
|
||||
|| Data::IsLegacy1DefaultWallPaper(*paper)
|
||||
|| (Data::IsLegacy2DefaultWallPaper(*paper) && bg.version < 2008012)
|
||||
|| (Data::IsLegacy2DefaultWallPaper(*paper) && bg.version < 3000000)
|
||||
|| (Data::IsLegacy3DefaultWallPaper(*paper) && bg.version < 3000000)
|
||||
|| (Data::IsLegacy4DefaultWallPaper(*paper) && bg.version < 3000000)
|
||||
|| Data::IsDefaultWallPaper(*paper)) {
|
||||
_backgroundCanWrite = false;
|
||||
if (isOldEmptyImage || bg.version < 2008012) {
|
||||
if (isOldEmptyImage || bg.version < 3000000) {
|
||||
Window::Theme::Background()->set(Data::DefaultWallPaper());
|
||||
Window::Theme::Background()->setTile(false);
|
||||
} else {
|
||||
Window::Theme::Background()->set(*paper);
|
||||
}
|
||||
|
@ -59,6 +59,13 @@ inline bool AreTestingTheme() {
|
||||
return !GlobalApplying.paletteForRevert.isEmpty();
|
||||
}
|
||||
|
||||
[[nodiscard]] QImage ReadDefaultImage() {
|
||||
return Ui::ReadBackgroundImage(
|
||||
u":/gui/art/background.tgv"_q,
|
||||
QByteArray(),
|
||||
true);
|
||||
}
|
||||
|
||||
[[nodiscard]] bool GoodImageFormatAndSize(const QImage &image) {
|
||||
return !image.size().isEmpty()
|
||||
&& (image.format() == QImage::Format_ARGB32_Premultiplied
|
||||
@ -432,8 +439,7 @@ bool InitializeFromSaved(Saved &&saved) {
|
||||
QImage::Format_ARGB32_Premultiplied);
|
||||
}
|
||||
image.setDevicePixelRatio(cRetinaFactor());
|
||||
if (Data::IsDefaultWallPaper(paper)
|
||||
|| Data::details::IsTestingDefaultWallPaper(paper)) {
|
||||
if (Data::IsLegacy3DefaultWallPaper(paper)) {
|
||||
return Images::DitherImage(std::move(image));
|
||||
}
|
||||
return image;
|
||||
@ -659,13 +665,11 @@ void ChatBackground::set(const Data::WallPaper &paper, QImage image) {
|
||||
|| Data::details::IsTestingEditorWallPaper(_paper)) {
|
||||
if (Data::details::IsTestingDefaultWallPaper(_paper)
|
||||
|| image.isNull()) {
|
||||
image.load(qsl(":/gui/art/background.jpg"));
|
||||
image = ReadDefaultImage();
|
||||
setPaper(Data::details::TestingDefaultWallPaper());
|
||||
}
|
||||
image = postprocessBackgroundImage(std::move(image));
|
||||
setPrepared(image, image, QImage());
|
||||
setPreparedAfterPaper(std::move(image));
|
||||
} else {
|
||||
const auto &bgColors = _paper.backgroundColors();
|
||||
if (Data::IsLegacy1DefaultWallPaper(_paper)) {
|
||||
image.load(qsl(":/gui/art/bg_initial.jpg"));
|
||||
const auto scale = cScale() * cIntRetinaFactor();
|
||||
@ -675,9 +679,9 @@ void ChatBackground::set(const Data::WallPaper &paper, QImage image) {
|
||||
Qt::SmoothTransformation);
|
||||
}
|
||||
} else if (Data::IsDefaultWallPaper(_paper)
|
||||
|| (bgColors.empty() && image.isNull())) {
|
||||
|| (_paper.backgroundColors().empty() && image.isNull())) {
|
||||
setPaper(Data::DefaultWallPaper().withParamsFrom(_paper));
|
||||
image.load(qsl(":/gui/art/background.jpg"));
|
||||
image = ReadDefaultImage();
|
||||
}
|
||||
Local::writeBackground(
|
||||
_paper,
|
||||
@ -685,36 +689,7 @@ void ChatBackground::set(const Data::WallPaper &paper, QImage image) {
|
||||
|| Data::IsLegacy1DefaultWallPaper(_paper))
|
||||
? QImage()
|
||||
: image));
|
||||
if (_paper.isPattern() && !image.isNull()) {
|
||||
if (bgColors.size() < 2) {
|
||||
auto prepared = postprocessBackgroundImage(
|
||||
Ui::PreparePatternImage(
|
||||
image,
|
||||
bgColors,
|
||||
_paper.gradientRotation(),
|
||||
_paper.patternOpacity()));
|
||||
setPrepared(
|
||||
std::move(image),
|
||||
std::move(prepared),
|
||||
QImage());
|
||||
} else {
|
||||
image = postprocessBackgroundImage(std::move(image));
|
||||
setPrepared(
|
||||
image,
|
||||
image,
|
||||
Data::GenerateDitheredGradient(_paper));
|
||||
}
|
||||
} else if (bgColors.size() == 1) {
|
||||
setPrepared(QImage(), QImage(), QImage());
|
||||
} else if (!bgColors.empty()) {
|
||||
setPrepared(
|
||||
QImage(),
|
||||
QImage(),
|
||||
Data::GenerateDitheredGradient(_paper));
|
||||
} else {
|
||||
image = postprocessBackgroundImage(std::move(image));
|
||||
setPrepared(image, image, QImage());
|
||||
}
|
||||
setPreparedAfterPaper(std::move(image));
|
||||
}
|
||||
Assert(colorForFill()
|
||||
|| !_gradient.isNull()
|
||||
@ -730,6 +705,40 @@ void ChatBackground::set(const Data::WallPaper &paper, QImage image) {
|
||||
checkUploadWallPaper();
|
||||
}
|
||||
|
||||
void ChatBackground::setPreparedAfterPaper(QImage image) {
|
||||
const auto &bgColors = _paper.backgroundColors();
|
||||
if (_paper.isPattern() && !image.isNull()) {
|
||||
if (bgColors.size() < 2) {
|
||||
auto prepared = postprocessBackgroundImage(
|
||||
Ui::PreparePatternImage(
|
||||
image,
|
||||
bgColors,
|
||||
_paper.gradientRotation(),
|
||||
_paper.patternOpacity()));
|
||||
setPrepared(
|
||||
std::move(image),
|
||||
std::move(prepared),
|
||||
QImage());
|
||||
} else {
|
||||
image = postprocessBackgroundImage(std::move(image));
|
||||
setPrepared(
|
||||
image,
|
||||
image,
|
||||
Data::GenerateDitheredGradient(_paper));
|
||||
}
|
||||
} else if (bgColors.size() == 1) {
|
||||
setPrepared(QImage(), QImage(), QImage());
|
||||
} else if (!bgColors.empty()) {
|
||||
setPrepared(
|
||||
QImage(),
|
||||
QImage(),
|
||||
Data::GenerateDitheredGradient(_paper));
|
||||
} else {
|
||||
image = postprocessBackgroundImage(std::move(image));
|
||||
setPrepared(image, image, QImage());
|
||||
}
|
||||
}
|
||||
|
||||
void ChatBackground::setPrepared(
|
||||
QImage original,
|
||||
QImage prepared,
|
||||
|
@ -207,6 +207,7 @@ private:
|
||||
[[nodiscard]] bool started() const;
|
||||
void initialRead();
|
||||
void saveForRevert();
|
||||
void setPreparedAfterPaper(QImage image);
|
||||
void setPrepared(QImage original, QImage prepared, QImage gradient);
|
||||
void prepareImageForTiled();
|
||||
void writeNewBackgroundSettings();
|
||||
|
@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
#include "ui/image/image_prepare.h"
|
||||
#include "ui/emoji_config.h"
|
||||
#include "ui/chat/chat_theme.h"
|
||||
#include "ui/image/image_prepare.h"
|
||||
#include "styles/style_widgets.h"
|
||||
#include "styles/style_window.h"
|
||||
#include "styles/style_media_view.h"
|
||||
@ -417,7 +418,16 @@ void Generator::paintHistoryBackground() {
|
||||
if (background.isNull()) {
|
||||
const auto fakePaper = Data::WallPaper(_current.backgroundId);
|
||||
if (Data::IsThemeWallPaper(fakePaper)) {
|
||||
background.load(qsl(":/gui/art/background.jpg"));
|
||||
background = Ui::ReadBackgroundImage(
|
||||
u":/gui/art/background.tgv"_q,
|
||||
QByteArray(),
|
||||
true);
|
||||
const auto paper = Data::DefaultWallPaper();
|
||||
background = Ui::PreparePatternImage(
|
||||
std::move(background),
|
||||
paper.backgroundColors(),
|
||||
paper.gradientRotation(),
|
||||
paper.patternOpacity());
|
||||
tiled = false;
|
||||
} else {
|
||||
background = std::move(_current.backgroundImage);
|
||||
|
Loading…
Reference in New Issue
Block a user