data_wall_paper.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "base/flags.h"
  9. class Image;
  10. namespace Main {
  11. class Session;
  12. } // namespace Main
  13. namespace Ui {
  14. [[nodiscard]] QColor ColorFromSerialized(MTPint serialized);
  15. [[nodiscard]] std::optional<QColor> MaybeColorFromSerialized(
  16. const tl::conditional<MTPint> &mtp);
  17. } // namespace Ui
  18. namespace Data {
  19. struct FileOrigin;
  20. enum class WallPaperFlag {
  21. Pattern = (1 << 0),
  22. Default = (1 << 1),
  23. Creator = (1 << 2),
  24. Dark = (1 << 3),
  25. };
  26. inline constexpr bool is_flag_type(WallPaperFlag) { return true; };
  27. using WallPaperFlags = base::flags<WallPaperFlag>;
  28. class WallPaper {
  29. public:
  30. explicit WallPaper(WallPaperId id);
  31. void setLocalImageAsThumbnail(std::shared_ptr<Image> image);
  32. [[nodiscard]] bool equals(const WallPaper &paper) const;
  33. [[nodiscard]] WallPaperId id() const;
  34. [[nodiscard]] QString emojiId() const;
  35. [[nodiscard]] bool isNull() const;
  36. [[nodiscard]] QString key() const;
  37. [[nodiscard]] const std::vector<QColor> backgroundColors() const;
  38. [[nodiscard]] DocumentData *document() const;
  39. [[nodiscard]] Image *localThumbnail() const;
  40. [[nodiscard]] bool isPattern() const;
  41. [[nodiscard]] bool isDefault() const;
  42. [[nodiscard]] bool isCreator() const;
  43. [[nodiscard]] bool isDark() const;
  44. [[nodiscard]] bool isLocal() const;
  45. [[nodiscard]] bool isBlurred() const;
  46. [[nodiscard]] int patternIntensity() const;
  47. [[nodiscard]] float64 patternOpacity() const;
  48. [[nodiscard]] int gradientRotation() const;
  49. [[nodiscard]] bool hasShareUrl() const;
  50. [[nodiscard]] QString shareUrl(not_null<Main::Session*> session) const;
  51. void loadDocument() const;
  52. void loadDocumentThumbnail() const;
  53. [[nodiscard]] FileOrigin fileOrigin() const;
  54. [[nodiscard]] UserId ownerId() const;
  55. [[nodiscard]] MTPInputWallPaper mtpInput(
  56. not_null<Main::Session*> session) const;
  57. [[nodiscard]] MTPWallPaperSettings mtpSettings() const;
  58. [[nodiscard]] WallPaper withUrlParams(
  59. const QMap<QString, QString> &params) const;
  60. [[nodiscard]] WallPaper withBlurred(bool blurred) const;
  61. [[nodiscard]] WallPaper withPatternIntensity(int intensity) const;
  62. [[nodiscard]] WallPaper withGradientRotation(int rotation) const;
  63. [[nodiscard]] WallPaper withBackgroundColors(
  64. std::vector<QColor> colors) const;
  65. [[nodiscard]] WallPaper withParamsFrom(const WallPaper &other) const;
  66. [[nodiscard]] WallPaper withoutImageData() const;
  67. [[nodiscard]] static std::optional<WallPaper> Create(
  68. not_null<Main::Session*> session,
  69. const MTPWallPaper &data);
  70. [[nodiscard]] static std::optional<WallPaper> Create(
  71. not_null<Main::Session*> session,
  72. const MTPDwallPaper &data);
  73. [[nodiscard]] static std::optional<WallPaper> Create(
  74. const MTPDwallPaperNoFile &data);
  75. [[nodiscard]] QByteArray serialize() const;
  76. [[nodiscard]] static std::optional<WallPaper> FromSerialized(
  77. const QByteArray &serialized);
  78. [[nodiscard]] static std::optional<WallPaper> FromLegacySerialized(
  79. quint64 id,
  80. quint64 accessHash,
  81. quint32 flags,
  82. QString slug);
  83. [[nodiscard]] static std::optional<WallPaper> FromLegacyId(
  84. qint32 legacyId);
  85. [[nodiscard]] static std::optional<WallPaper> FromColorsSlug(
  86. const QString &slug);
  87. [[nodiscard]] static WallPaper FromEmojiId(const QString &emojiId);
  88. [[nodiscard]] static WallPaper ConstructDefault();
  89. private:
  90. static constexpr auto kDefaultIntensity = 50;
  91. [[nodiscard]] QStringList collectShareParams() const;
  92. WallPaperId _id = WallPaperId();
  93. uint64 _accessHash = 0;
  94. UserId _ownerId = 0;
  95. WallPaperFlags _flags;
  96. QString _slug;
  97. QString _emojiId;
  98. std::vector<QColor> _backgroundColors;
  99. int _rotation = 0;
  100. int _intensity = kDefaultIntensity;
  101. bool _blurred = false;
  102. DocumentData *_document = nullptr;
  103. std::shared_ptr<Image> _thumbnail;
  104. };
  105. [[nodiscard]] WallPaper ThemeWallPaper();
  106. [[nodiscard]] bool IsThemeWallPaper(const WallPaper &paper);
  107. [[nodiscard]] WallPaper CustomWallPaper();
  108. [[nodiscard]] bool IsCustomWallPaper(const WallPaper &paper);
  109. [[nodiscard]] WallPaper Legacy1DefaultWallPaper();
  110. [[nodiscard]] bool IsLegacy1DefaultWallPaper(const WallPaper &paper);
  111. [[nodiscard]] bool IsLegacy2DefaultWallPaper(const WallPaper &paper);
  112. [[nodiscard]] bool IsLegacy3DefaultWallPaper(const WallPaper &paper);
  113. [[nodiscard]] bool IsLegacy4DefaultWallPaper(const WallPaper &paper);
  114. [[nodiscard]] WallPaper DefaultWallPaper();
  115. [[nodiscard]] bool IsDefaultWallPaper(const WallPaper &paper);
  116. [[nodiscard]] bool IsCloudWallPaper(const WallPaper &paper);
  117. [[nodiscard]] QImage GenerateDitheredGradient(const WallPaper &paper);
  118. namespace details {
  119. [[nodiscard]] WallPaper UninitializedWallPaper();
  120. [[nodiscard]] bool IsUninitializedWallPaper(const WallPaper &paper);
  121. [[nodiscard]] WallPaper TestingThemeWallPaper();
  122. [[nodiscard]] bool IsTestingThemeWallPaper(const WallPaper &paper);
  123. [[nodiscard]] WallPaper TestingDefaultWallPaper();
  124. [[nodiscard]] bool IsTestingDefaultWallPaper(const WallPaper &paper);
  125. [[nodiscard]] WallPaper TestingEditorWallPaper();
  126. [[nodiscard]] bool IsTestingEditorWallPaper(const WallPaper &paper);
  127. } // namespace details
  128. } // namespace Data