tdesktop/Telegram/SourceFiles/media/stories/media_stories_sibling.h
2023-07-20 07:20:08 +04:00

75 lines
1.6 KiB
C++

/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include "data/data_stories.h"
#include "ui/effects/animations.h"
#include "ui/userpic_view.h"
namespace style {
struct TextStyle;
} // namespace style
namespace Media::Stories {
class Controller;
struct SiblingView;
struct SiblingLayout;
class Sibling final {
public:
Sibling(
not_null<Controller*> controller,
const Data::StoriesList &list);
~Sibling();
[[nodiscard]] Data::FullStoryId shownId() const;
[[nodiscard]] bool shows(const Data::StoriesList &list) const;
[[nodiscard]] SiblingView view(
const SiblingLayout &layout,
float64 over);
private:
class Loader;
class LoaderPhoto;
class LoaderVideo;
void check();
[[nodiscard]] QImage userpicImage(const SiblingLayout &layout);
[[nodiscard]] QImage nameImage(const SiblingLayout &layout);
[[nodiscard]] QPoint namePosition(
const SiblingLayout &layout,
const QImage &image) const;
const not_null<Controller*> _controller;
Data::FullStoryId _id;
QImage _blurred;
QImage _good;
Ui::Animations::Simple _goodShown;
QImage _userpicImage;
InMemoryKey _userpicKey = {};
Ui::PeerUserpicView _userpicView;
QImage _nameImage;
std::unique_ptr<style::TextStyle> _nameStyle;
std::optional<Ui::Text::String> _name;
QString _nameText;
int _nameAvailableWidth = 0;
int _nameFontSize = 0;
std::unique_ptr<Loader> _loader;
};
} // namespace Media::Stories