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