turning a lot of includes into forward declares
This commit is contained in:
@@ -7,9 +7,6 @@
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
|
||||
QStringAlias(EmoteId);
|
||||
QStringAlias(EmoteName);
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
struct Emote {
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <QString>
|
||||
#include <boost/optional.hpp>
|
||||
#include <unordered_map>
|
||||
#include <util/QStringHash.hpp>
|
||||
|
||||
#include "common/UniqueAccess.hpp"
|
||||
#include "messages/Emote.hpp"
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
template <typename TKey>
|
||||
class MapReplacement
|
||||
{
|
||||
public:
|
||||
MapReplacement(std::unordered_map<TKey, EmotePtr> &items)
|
||||
: oldItems_(items)
|
||||
{
|
||||
}
|
||||
|
||||
void add(const TKey &key, const Emote &data)
|
||||
{
|
||||
this->add(key, Emote(data));
|
||||
}
|
||||
|
||||
void add(const TKey &key, Emote &&data)
|
||||
{
|
||||
auto it = this->oldItems_.find(key);
|
||||
if (it != this->oldItems_.end() && *it->second == data) {
|
||||
this->newItems_[key] = it->second;
|
||||
} else {
|
||||
this->newItems_[key] = std::make_shared<Emote>(std::move(data));
|
||||
}
|
||||
}
|
||||
|
||||
void apply()
|
||||
{
|
||||
this->oldItems_ = std::move(this->newItems_);
|
||||
}
|
||||
|
||||
private:
|
||||
std::unordered_map<TKey, EmotePtr> &oldItems_;
|
||||
std::unordered_map<TKey, EmotePtr> newItems_;
|
||||
};
|
||||
|
||||
template <typename TKey>
|
||||
class EmoteCache
|
||||
{
|
||||
public:
|
||||
using Iterator = typename std::unordered_map<TKey, EmotePtr>::iterator;
|
||||
using ConstIterator = typename std::unordered_map<TKey, EmotePtr>::iterator;
|
||||
|
||||
Iterator begin()
|
||||
{
|
||||
return this->items_.begin();
|
||||
}
|
||||
|
||||
ConstIterator begin() const
|
||||
{
|
||||
return this->items_.begin();
|
||||
}
|
||||
|
||||
Iterator end()
|
||||
{
|
||||
return this->items_.end();
|
||||
}
|
||||
|
||||
ConstIterator end() const
|
||||
{
|
||||
return this->items_.end();
|
||||
}
|
||||
|
||||
boost::optional<EmotePtr> get(const TKey &key) const
|
||||
{
|
||||
auto it = this->items_.find(key);
|
||||
|
||||
if (it == this->items_.end())
|
||||
return boost::none;
|
||||
else
|
||||
return it->second;
|
||||
}
|
||||
|
||||
MapReplacement<TKey> makeReplacment()
|
||||
{
|
||||
return MapReplacement<TKey>(this->items_);
|
||||
}
|
||||
|
||||
private:
|
||||
std::unordered_map<TKey, EmotePtr> items_;
|
||||
};
|
||||
|
||||
} // namespace chatterino
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "messages/Image.hpp"
|
||||
|
||||
#include "Application.hpp"
|
||||
#include "common/Common.hpp"
|
||||
#include "common/NetworkRequest.hpp"
|
||||
#include "debug/AssertInGuiThread.hpp"
|
||||
#include "debug/Benchmark.hpp"
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/Common.hpp"
|
||||
|
||||
#include <QPixmap>
|
||||
#include <QString>
|
||||
#include <QThread>
|
||||
#include <QVector>
|
||||
#include <atomic>
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <boost/optional.hpp>
|
||||
#include <boost/variant.hpp>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <pajlada/signals/signal.hpp>
|
||||
|
||||
#include "common/Aliases.hpp"
|
||||
#include "common/NullablePtr.hpp"
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <QString>
|
||||
#include <common/Common.hpp>
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/FlagsEnum.hpp"
|
||||
#include "messages/MessageElement.hpp"
|
||||
#include "providers/twitch/PubsubActions.hpp"
|
||||
#include "widgets/helper/ScrollbarHighlight.hpp"
|
||||
|
||||
#include <QTime>
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <cinttypes>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace chatterino {
|
||||
class MessageElement;
|
||||
|
||||
enum class MessageFlag : uint16_t {
|
||||
None = 0,
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#include "MessageBuilder.hpp"
|
||||
|
||||
#include "common/LinkParser.hpp"
|
||||
#include "messages/Message.hpp"
|
||||
#include "messages/MessageElement.hpp"
|
||||
#include "providers/twitch/PubsubActions.hpp"
|
||||
#include "singletons/Emotes.hpp"
|
||||
#include "singletons/Resources.hpp"
|
||||
#include "singletons/Theme.hpp"
|
||||
@@ -17,7 +20,7 @@ MessagePtr makeSystemMessage(const QString &text)
|
||||
}
|
||||
|
||||
MessageBuilder::MessageBuilder()
|
||||
: message_(std::make_unique<Message>())
|
||||
: message_(std::make_shared<Message>())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -165,7 +168,9 @@ Message &MessageBuilder::message()
|
||||
|
||||
MessagePtr MessageBuilder::release()
|
||||
{
|
||||
return MessagePtr(this->message_.release());
|
||||
std::shared_ptr<Message> ptr;
|
||||
this->message_.swap(ptr);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void MessageBuilder::append(std::unique_ptr<MessageElement> element)
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include "messages/Message.hpp"
|
||||
#include "messages/MessageElement.hpp"
|
||||
|
||||
#include <QRegularExpression>
|
||||
#include <ctime>
|
||||
|
||||
namespace chatterino {
|
||||
struct BanAction;
|
||||
struct UnbanAction;
|
||||
struct Message;
|
||||
using MessagePtr = std::shared_ptr<const Message>;
|
||||
|
||||
struct SystemMessageTag {
|
||||
};
|
||||
@@ -56,7 +60,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<Message> message_;
|
||||
std::shared_ptr<Message> message_;
|
||||
};
|
||||
|
||||
} // namespace chatterino
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "MessageColor.hpp"
|
||||
|
||||
#include "singletons/Theme.hpp"
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
MessageColor::MessageColor(const QColor &color)
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "singletons/Theme.hpp"
|
||||
|
||||
#include <QColor>
|
||||
|
||||
namespace chatterino {
|
||||
class Theme;
|
||||
|
||||
struct MessageColor {
|
||||
enum Type { Custom, Text, Link, System };
|
||||
|
||||
@@ -3,9 +3,11 @@
|
||||
#include "Application.hpp"
|
||||
#include "controllers/moderationactions/ModerationActions.hpp"
|
||||
#include "debug/Benchmark.hpp"
|
||||
#include "messages/Emote.hpp"
|
||||
#include "messages/layouts/MessageLayoutContainer.hpp"
|
||||
#include "messages/layouts/MessageLayoutElement.hpp"
|
||||
#include "singletons/Settings.hpp"
|
||||
#include "singletons/Theme.hpp"
|
||||
#include "util/DebugCount.hpp"
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/FlagsEnum.hpp"
|
||||
#include "messages/Emote.hpp"
|
||||
#include "messages/Image.hpp"
|
||||
#include "messages/Link.hpp"
|
||||
#include "messages/MessageColor.hpp"
|
||||
#include "singletons/Fonts.hpp"
|
||||
@@ -11,14 +9,20 @@
|
||||
#include <QString>
|
||||
#include <QTime>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace chatterino {
|
||||
class Channel;
|
||||
struct MessageLayoutContainer;
|
||||
|
||||
class Image;
|
||||
using ImagePtr = std::shared_ptr<Image>;
|
||||
|
||||
struct Emote;
|
||||
using EmotePtr = std::shared_ptr<const Emote>;
|
||||
|
||||
enum class MessageElementFlag {
|
||||
None = 0,
|
||||
Misc = (1 << 0),
|
||||
|
||||
@@ -2,8 +2,12 @@
|
||||
|
||||
#include "Application.hpp"
|
||||
#include "debug/Benchmark.hpp"
|
||||
#include "messages/Message.hpp"
|
||||
#include "messages/MessageElement.hpp"
|
||||
#include "messages/layouts/MessageLayoutContainer.hpp"
|
||||
#include "singletons/Emotes.hpp"
|
||||
#include "singletons/Settings.hpp"
|
||||
#include "singletons/Theme.hpp"
|
||||
#include "singletons/WindowManager.hpp"
|
||||
#include "util/DebugCount.hpp"
|
||||
|
||||
@@ -24,6 +28,7 @@ namespace chatterino {
|
||||
MessageLayout::MessageLayout(MessagePtr message)
|
||||
: message_(message)
|
||||
, buffer_(nullptr)
|
||||
, container_(std::make_shared<MessageLayoutContainer>())
|
||||
{
|
||||
DebugCount::increase("message layout");
|
||||
}
|
||||
@@ -41,7 +46,7 @@ const Message *MessageLayout::getMessage()
|
||||
// Height
|
||||
int MessageLayout::getHeight() const
|
||||
{
|
||||
return container_.getHeight();
|
||||
return container_->getHeight();
|
||||
}
|
||||
|
||||
// Layout
|
||||
@@ -82,9 +87,9 @@ bool MessageLayout::layout(int width, float scale, MessageElementFlags flags)
|
||||
return false;
|
||||
}
|
||||
|
||||
int oldHeight = this->container_.getHeight();
|
||||
int oldHeight = this->container_->getHeight();
|
||||
this->actuallyLayout(width, flags);
|
||||
if (widthChanged || this->container_.getHeight() != oldHeight) {
|
||||
if (widthChanged || this->container_->getHeight() != oldHeight) {
|
||||
this->deleteBuffer();
|
||||
}
|
||||
this->invalidateBuffer();
|
||||
@@ -103,22 +108,22 @@ void MessageLayout::actuallyLayout(int width, MessageElementFlags _flags)
|
||||
messageFlags.unset(MessageFlag::Collapsed);
|
||||
}
|
||||
|
||||
this->container_.begin(width, this->scale_, messageFlags);
|
||||
this->container_->begin(width, this->scale_, messageFlags);
|
||||
|
||||
for (const auto &element : this->message_->elements) {
|
||||
element->addToContainer(this->container_, _flags);
|
||||
element->addToContainer(*this->container_, _flags);
|
||||
}
|
||||
|
||||
if (this->height_ != this->container_.getHeight()) {
|
||||
if (this->height_ != this->container_->getHeight()) {
|
||||
this->deleteBuffer();
|
||||
}
|
||||
|
||||
this->container_.end();
|
||||
this->height_ = this->container_.getHeight();
|
||||
this->container_->end();
|
||||
this->height_ = this->container_->getHeight();
|
||||
|
||||
// collapsed state
|
||||
this->flags.unset(MessageLayoutFlag::Collapsed);
|
||||
if (this->container_.isCollapsed()) {
|
||||
if (this->container_->isCollapsed()) {
|
||||
this->flags.set(MessageLayoutFlag::Collapsed);
|
||||
}
|
||||
}
|
||||
@@ -135,11 +140,12 @@ void MessageLayout::paint(QPainter &painter, int width, int y, int messageIndex,
|
||||
if (!pixmap) {
|
||||
#ifdef Q_OS_MACOS
|
||||
pixmap = new QPixmap(int(width * painter.device()->devicePixelRatioF()),
|
||||
int(container_.getHeight() *
|
||||
int(container_->getHeight() *
|
||||
painter.device()->devicePixelRatioF()));
|
||||
pixmap->setDevicePixelRatio(painter.device()->devicePixelRatioF());
|
||||
#else
|
||||
pixmap = new QPixmap(width, std::max(16, this->container_.getHeight()));
|
||||
pixmap =
|
||||
new QPixmap(width, std::max(16, this->container_->getHeight()));
|
||||
#endif
|
||||
|
||||
this->buffer_ = std::shared_ptr<QPixmap>(pixmap);
|
||||
@@ -157,7 +163,7 @@ void MessageLayout::paint(QPainter &painter, int width, int y, int messageIndex,
|
||||
// this->container.getHeight(), *pixmap);
|
||||
|
||||
// draw gif emotes
|
||||
this->container_.paintAnimatedElements(painter, y);
|
||||
this->container_->paintAnimatedElements(painter, y);
|
||||
|
||||
// draw disabled
|
||||
if (this->message_->flags.has(MessageFlag::Disabled)) {
|
||||
@@ -167,12 +173,12 @@ void MessageLayout::paint(QPainter &painter, int width, int y, int messageIndex,
|
||||
|
||||
// draw selection
|
||||
if (!selection.isEmpty()) {
|
||||
this->container_.paintSelection(painter, messageIndex, selection, y);
|
||||
this->container_->paintSelection(painter, messageIndex, selection, y);
|
||||
}
|
||||
|
||||
// draw message seperation line
|
||||
if (app->settings->separateMessages.getValue()) {
|
||||
painter.fillRect(0, y, this->container_.getWidth(), 1,
|
||||
painter.fillRect(0, y, this->container_->getWidth(), 1,
|
||||
app->themes->splits.messageSeperator);
|
||||
}
|
||||
|
||||
@@ -186,7 +192,7 @@ void MessageLayout::paint(QPainter &painter, int width, int y, int messageIndex,
|
||||
QBrush brush(color, static_cast<Qt::BrushStyle>(
|
||||
app->settings->lastMessagePattern.getValue()));
|
||||
|
||||
painter.fillRect(0, y + this->container_.getHeight() - 1,
|
||||
painter.fillRect(0, y + this->container_->getHeight() - 1,
|
||||
pixmap->width(), 1, brush);
|
||||
}
|
||||
|
||||
@@ -217,7 +223,7 @@ void MessageLayout::updateBuffer(QPixmap *buffer, int /*messageIndex*/,
|
||||
painter.fillRect(buffer->rect(), backgroundColor);
|
||||
|
||||
// draw message
|
||||
this->container_.paintElements(painter);
|
||||
this->container_->paintElements(painter);
|
||||
|
||||
#ifdef FOURTF
|
||||
// debug
|
||||
@@ -252,7 +258,7 @@ void MessageLayout::deleteCache()
|
||||
this->deleteBuffer();
|
||||
|
||||
#ifdef XD
|
||||
this->container_.clear();
|
||||
this->container_->clear();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -265,22 +271,22 @@ void MessageLayout::deleteCache()
|
||||
const MessageLayoutElement *MessageLayout::getElementAt(QPoint point)
|
||||
{
|
||||
// go through all words and return the first one that contains the point.
|
||||
return this->container_.getElementAt(point);
|
||||
return this->container_->getElementAt(point);
|
||||
}
|
||||
|
||||
int MessageLayout::getLastCharacterIndex() const
|
||||
{
|
||||
return this->container_.getLastCharacterIndex();
|
||||
return this->container_->getLastCharacterIndex();
|
||||
}
|
||||
|
||||
int MessageLayout::getSelectionIndex(QPoint position)
|
||||
{
|
||||
return this->container_.getSelectionIndex(position);
|
||||
return this->container_->getSelectionIndex(position);
|
||||
}
|
||||
|
||||
void MessageLayout::addSelectionText(QString &str, int from, int to)
|
||||
{
|
||||
this->container_.addSelectionText(str, from, to);
|
||||
this->container_->addSelectionText(str, from, to);
|
||||
}
|
||||
|
||||
} // namespace chatterino
|
||||
|
||||
@@ -1,19 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/FlagsEnum.hpp"
|
||||
#include "messages/Message.hpp"
|
||||
#include "messages/Selection.hpp"
|
||||
#include "messages/layouts/MessageLayoutContainer.hpp"
|
||||
#include "messages/layouts/MessageLayoutElement.hpp"
|
||||
|
||||
#include <QPixmap>
|
||||
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <cinttypes>
|
||||
#include <memory>
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
struct Message;
|
||||
using MessagePtr = std::shared_ptr<const Message>;
|
||||
|
||||
struct Selection;
|
||||
struct MessageLayoutContainer;
|
||||
class MessageLayoutElement;
|
||||
|
||||
enum class MessageElementFlag;
|
||||
using MessageElementFlags = FlagsEnum<MessageElementFlag>;
|
||||
|
||||
enum class MessageLayoutFlag : uint8_t {
|
||||
RequiresBufferUpdate = 1 << 1,
|
||||
RequiresLayout = 1 << 2,
|
||||
@@ -57,7 +62,7 @@ public:
|
||||
private:
|
||||
// variables
|
||||
MessagePtr message_;
|
||||
MessageLayoutContainer container_;
|
||||
std::shared_ptr<MessageLayoutContainer> container_;
|
||||
std::shared_ptr<QPixmap> buffer_ = nullptr;
|
||||
bool bufferValid_ = false;
|
||||
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
#include "MessageLayoutContainer.hpp"
|
||||
|
||||
#include "Application.hpp"
|
||||
#include "MessageLayoutElement.hpp"
|
||||
#include "messages/Message.hpp"
|
||||
#include "messages/MessageElement.hpp"
|
||||
#include "messages/Selection.hpp"
|
||||
#include "messages/layouts/MessageLayoutElement.hpp"
|
||||
#include "singletons/Fonts.hpp"
|
||||
#include "singletons/Settings.hpp"
|
||||
#include "singletons/Theme.hpp"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QPainter>
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include <QPoint>
|
||||
#include <QRect>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "messages/Message.hpp"
|
||||
#include "common/FlagsEnum.hpp"
|
||||
#include "messages/Selection.hpp"
|
||||
#include "messages/layouts/MessageLayoutElement.hpp"
|
||||
|
||||
class QPainter;
|
||||
|
||||
namespace chatterino {
|
||||
class MessageLayoutElement;
|
||||
|
||||
enum class MessageFlag : uint16_t;
|
||||
using MessageFlags = FlagsEnum<MessageFlag>;
|
||||
|
||||
struct Margin {
|
||||
int top;
|
||||
@@ -92,7 +94,7 @@ private:
|
||||
// variables
|
||||
float scale_ = 1.f;
|
||||
int width_ = 0;
|
||||
MessageFlags flags_ = MessageFlag::None;
|
||||
MessageFlags flags_{};
|
||||
int line_ = 0;
|
||||
int height_ = 0;
|
||||
int currentX_ = 0;
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#include "messages/layouts/MessageLayoutElement.hpp"
|
||||
|
||||
#include "Application.hpp"
|
||||
#include "messages/Image.hpp"
|
||||
#include "messages/MessageElement.hpp"
|
||||
#include "singletons/Theme.hpp"
|
||||
#include "util/DebugCount.hpp"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
@@ -3,19 +3,19 @@
|
||||
#include <QPoint>
|
||||
#include <QRect>
|
||||
#include <QString>
|
||||
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <climits>
|
||||
|
||||
#include "messages/Image.hpp"
|
||||
#include "messages/Link.hpp"
|
||||
#include "messages/MessageColor.hpp"
|
||||
#include "singletons/Fonts.hpp"
|
||||
|
||||
class QPainter;
|
||||
|
||||
namespace chatterino {
|
||||
class MessageElement;
|
||||
class Image;
|
||||
using ImagePtr = std::shared_ptr<Image>;
|
||||
enum class FontStyle : uint8_t;
|
||||
|
||||
class MessageLayoutElement : boost::noncopyable
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user