158 lines
3.4 KiB
C++
158 lines
3.4 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 "history/view/history_view_element.h"
|
|
|
|
class HistoryItem;
|
|
|
|
namespace Ui {
|
|
class ChatStyle;
|
|
struct CornersPixmaps;
|
|
} // namespace Ui
|
|
|
|
namespace Data {
|
|
class ForumTopic;
|
|
} // namespace Data
|
|
|
|
namespace Info::Profile {
|
|
class TopicIconView;
|
|
} // namespace Info::Profile
|
|
|
|
namespace HistoryView {
|
|
|
|
class Service final : public Element {
|
|
public:
|
|
Service(
|
|
not_null<ElementDelegate*> delegate,
|
|
not_null<HistoryItem*> data,
|
|
Element *replacing);
|
|
|
|
int marginTop() const override;
|
|
int marginBottom() const override;
|
|
bool isHidden() const override;
|
|
void draw(Painter &p, const PaintContext &context) const override;
|
|
PointState pointState(QPoint point) const override;
|
|
TextState textState(
|
|
QPoint point,
|
|
StateRequest request) const override;
|
|
void updatePressed(QPoint point) override;
|
|
TextForMimeData selectedText(TextSelection selection) const override;
|
|
SelectedQuote selectedQuote(TextSelection selection) const override;
|
|
TextSelection selectionFromQuote(
|
|
const SelectedQuote "e) const override;
|
|
TextSelection adjustSelection(
|
|
TextSelection selection,
|
|
TextSelectType type) const override;
|
|
|
|
QRect innerGeometry() const override;
|
|
|
|
bool consumeHorizontalScroll(QPoint position, int delta) override;
|
|
|
|
private:
|
|
[[nodiscard]] QRect countGeometry() const;
|
|
|
|
QSize performCountOptimalSize() override;
|
|
QSize performCountCurrentSize(int newWidth) override;
|
|
|
|
};
|
|
|
|
int WideChatWidth();
|
|
|
|
class ServiceMessagePainter {
|
|
public:
|
|
static void PaintDate(
|
|
Painter &p,
|
|
not_null<const Ui::ChatStyle*> st,
|
|
const QDateTime &date,
|
|
int y,
|
|
int w,
|
|
bool chatWide);
|
|
static void PaintDate(
|
|
Painter &p,
|
|
not_null<const Ui::ChatStyle*> st,
|
|
const QString &dateText,
|
|
int y,
|
|
int w,
|
|
bool chatWide);
|
|
static void PaintDate(
|
|
Painter &p,
|
|
not_null<const Ui::ChatStyle*> st,
|
|
const QString &dateText,
|
|
int dateTextWidth,
|
|
int y,
|
|
int w,
|
|
bool chatWide);
|
|
static void PaintDate(
|
|
Painter &p,
|
|
const style::color &bg,
|
|
const Ui::CornersPixmaps &corners,
|
|
const style::color &fg,
|
|
const QString &dateText,
|
|
int dateTextWidth,
|
|
int y,
|
|
int w,
|
|
bool chatWide);
|
|
|
|
static void PaintBubble(
|
|
Painter &p,
|
|
not_null<const Ui::ChatStyle*> st,
|
|
QRect rect);
|
|
static void PaintBubble(
|
|
Painter &p,
|
|
const style::color &bg,
|
|
const Ui::CornersPixmaps &corners,
|
|
QRect rect);
|
|
|
|
static void PaintComplexBubble(
|
|
Painter &p,
|
|
not_null<const Ui::ChatStyle*> st,
|
|
int left,
|
|
int width,
|
|
const Ui::Text::String &text,
|
|
const QRect &textRect);
|
|
|
|
private:
|
|
static std::vector<int> CountLineWidths(
|
|
const Ui::Text::String &text,
|
|
const QRect &textRect);
|
|
|
|
};
|
|
|
|
class EmptyPainter {
|
|
public:
|
|
explicit EmptyPainter(not_null<History*> history);
|
|
EmptyPainter(
|
|
not_null<Data::ForumTopic*> topic,
|
|
Fn<bool()> paused,
|
|
Fn<void()> update);
|
|
~EmptyPainter();
|
|
|
|
void paint(
|
|
Painter &p,
|
|
not_null<const Ui::ChatStyle*> st,
|
|
int width,
|
|
int height);
|
|
|
|
private:
|
|
void fillAboutGroup();
|
|
void fillAboutTopic();
|
|
|
|
not_null<History*> _history;
|
|
Data::ForumTopic *_topic = nullptr;
|
|
std::unique_ptr<Info::Profile::TopicIconView> _icon;
|
|
Ui::Text::String _header;
|
|
Ui::Text::String _text;
|
|
std::vector<Ui::Text::String> _phrases;
|
|
|
|
rpl::lifetime _lifetime;
|
|
|
|
};
|
|
|
|
} // namespace HistoryView
|