changed to 80 max column

This commit is contained in:
fourtf
2018-08-06 21:17:03 +02:00
parent defa7e41fa
commit f71ff08e68
203 changed files with 3792 additions and 2405 deletions
+24 -14
View File
@@ -98,12 +98,14 @@ void MessageLayout::actuallyLayout(int width, MessageElement::Flags _flags)
if (this->flags & MessageLayout::Expanded ||
(_flags & MessageElement::ModeratorTools &&
!(this->message_->flags & Message::MessageFlags::Disabled))) {
messageFlags = Message::MessageFlags(messageFlags & ~Message::MessageFlags::Collapsed);
messageFlags = Message::MessageFlags(messageFlags &
~Message::MessageFlags::Collapsed);
}
this->container_.begin(width, this->scale_, messageFlags);
for (const std::unique_ptr<MessageElement> &element : this->message_->getElements()) {
for (const std::unique_ptr<MessageElement> &element :
this->message_->getElements()) {
element->addToContainer(this->container_, _flags);
}
@@ -123,7 +125,8 @@ void MessageLayout::actuallyLayout(int width, MessageElement::Flags _flags)
// Painting
void MessageLayout::paint(QPainter &painter, int width, int y, int messageIndex,
Selection &selection, bool isLastReadMessage, bool isWindowFocused)
Selection &selection, bool isLastReadMessage,
bool isWindowFocused)
{
auto app = getApp();
QPixmap *pixmap = this->buffer_.get();
@@ -132,7 +135,8 @@ 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() * painter.device()->devicePixelRatioF()));
int(container_.getHeight() *
painter.device()->devicePixelRatioF()));
pixmap->setDevicePixelRatio(painter.device()->devicePixelRatioF());
#else
pixmap = new QPixmap(width, std::max(16, this->container_.getHeight()));
@@ -149,14 +153,16 @@ void MessageLayout::paint(QPainter &painter, int width, int y, int messageIndex,
// draw on buffer
painter.drawPixmap(0, y, *pixmap);
// painter.drawPixmap(0, y, this->container.width, this->container.getHeight(), *pixmap);
// painter.drawPixmap(0, y, this->container.width,
// this->container.getHeight(), *pixmap);
// draw gif emotes
this->container_.paintAnimatedElements(painter, y);
// draw disabled
if (this->message_->flags.HasFlag(Message::Disabled)) {
painter.fillRect(0, y, pixmap->width(), pixmap->height(), app->themes->messages.disabled);
painter.fillRect(0, y, pixmap->width(), pixmap->height(),
app->themes->messages.disabled);
}
// draw selection
@@ -172,19 +178,23 @@ void MessageLayout::paint(QPainter &painter, int width, int y, int messageIndex,
// draw last read message line
if (isLastReadMessage) {
QColor color = isWindowFocused ? app->themes->tabs.selected.backgrounds.regular.color()
: app->themes->tabs.selected.backgrounds.unfocused.color();
QColor color =
isWindowFocused
? app->themes->tabs.selected.backgrounds.regular.color()
: app->themes->tabs.selected.backgrounds.unfocused.color();
QBrush brush(color,
static_cast<Qt::BrushStyle>(app->settings->lastMessagePattern.getValue()));
QBrush brush(color, static_cast<Qt::BrushStyle>(
app->settings->lastMessagePattern.getValue()));
painter.fillRect(0, y + this->container_.getHeight() - 1, pixmap->width(), 1, brush);
painter.fillRect(0, y + this->container_.getHeight() - 1,
pixmap->width(), 1, brush);
}
this->bufferValid_ = true;
}
void MessageLayout::updateBuffer(QPixmap *buffer, int /*messageIndex*/, Selection & /*selection*/)
void MessageLayout::updateBuffer(QPixmap *buffer, int /*messageIndex*/,
Selection & /*selection*/)
{
auto app = getApp();
@@ -212,8 +222,8 @@ void MessageLayout::updateBuffer(QPixmap *buffer, int /*messageIndex*/, Selectio
#ifdef FOURTF
// debug
painter.setPen(QColor(255, 0, 0));
painter.drawRect(buffer->rect().x(), buffer->rect().y(), buffer->rect().width() - 1,
buffer->rect().height() - 1);
painter.drawRect(buffer->rect().x(), buffer->rect().y(),
buffer->rect().width() - 1, buffer->rect().height() - 1);
QTextOption option;
option.setAlignment(Qt::AlignRight | Qt::AlignTop);
+3 -2
View File
@@ -40,8 +40,9 @@ public:
bool layout(int width, float scale_, MessageElement::Flags flags);
// Painting
void paint(QPainter &painter, int width, int y, int messageIndex, Selection &selection,
bool isLastReadMessage, bool isWindowFocused);
void paint(QPainter &painter, int width, int y, int messageIndex,
Selection &selection, bool isLastReadMessage,
bool isWindowFocused);
void invalidateBuffer();
void deleteBuffer();
void deleteCache();
+67 -33
View File
@@ -9,7 +9,8 @@
#include <QPainter>
#define COMPACT_EMOTES_OFFSET 6
#define MAX_UNCOLLAPSED_LINES (getApp()->settings->collpseMessagesMinLines.getValue())
#define MAX_UNCOLLAPSED_LINES \
(getApp()->settings->collpseMessagesMinLines.getValue())
namespace chatterino {
@@ -29,13 +30,15 @@ float MessageLayoutContainer::getScale() const
}
// methods
void MessageLayoutContainer::begin(int width, float scale, Message::MessageFlags flags)
void MessageLayoutContainer::begin(int width, float scale,
Message::MessageFlags flags)
{
this->clear();
this->width_ = width;
this->scale_ = scale;
this->flags_ = flags;
auto mediumFontMetrics = getApp()->fonts->getFontMetrics(FontStyle::ChatMedium, scale);
auto mediumFontMetrics =
getApp()->fonts->getFontMetrics(FontStyle::ChatMedium, scale);
this->textLineHeight_ = mediumFontMetrics.height();
this->spaceWidth_ = mediumFontMetrics.width(' ');
this->dotdotdotWidth_ = mediumFontMetrics.width("...");
@@ -66,7 +69,8 @@ void MessageLayoutContainer::addElement(MessageLayoutElement *element)
this->_addElement(element);
}
void MessageLayoutContainer::addElementNoLineBreak(MessageLayoutElement *element)
void MessageLayoutContainer::addElementNoLineBreak(
MessageLayoutElement *element)
{
this->_addElement(element);
}
@@ -76,7 +80,8 @@ bool MessageLayoutContainer::canAddElements()
return this->canAddMessages_;
}
void MessageLayoutContainer::_addElement(MessageLayoutElement *element, bool forceAdd)
void MessageLayoutContainer::_addElement(MessageLayoutElement *element,
bool forceAdd)
{
if (!this->canAddElements() && !forceAdd) {
delete element;
@@ -91,8 +96,9 @@ void MessageLayoutContainer::_addElement(MessageLayoutElement *element, bool for
int newLineHeight = element->getRect().height();
// compact emote offset
bool isCompactEmote = !(this->flags_ & Message::DisableCompactEmotes) &&
element->getCreator().getFlags() & MessageElement::EmoteImages;
bool isCompactEmote =
!(this->flags_ & Message::DisableCompactEmotes) &&
element->getCreator().getFlags() & MessageElement::EmoteImages;
if (isCompactEmote) {
newLineHeight -= COMPACT_EMOTES_OFFSET * this->scale_;
@@ -102,7 +108,8 @@ void MessageLayoutContainer::_addElement(MessageLayoutElement *element, bool for
this->lineHeight_ = std::max(this->lineHeight_, newLineHeight);
// set move element
element->setPosition(QPoint(this->currentX_, this->currentY_ - element->getRect().height()));
element->setPosition(
QPoint(this->currentX_, this->currentY_ - element->getRect().height()));
// add element
this->elements_.push_back(std::unique_ptr<MessageLayoutElement>(element));
@@ -120,35 +127,42 @@ void MessageLayoutContainer::breakLine()
int xOffset = 0;
if (this->flags_ & Message::Centered && this->elements_.size() > 0) {
xOffset = (width_ - this->elements_.at(this->elements_.size() - 1)->getRect().right()) / 2;
xOffset = (width_ - this->elements_.at(this->elements_.size() - 1)
->getRect()
.right()) /
2;
}
for (size_t i = lineStart_; i < this->elements_.size(); i++) {
MessageLayoutElement *element = this->elements_.at(i).get();
bool isCompactEmote = !(this->flags_ & Message::DisableCompactEmotes) &&
element->getCreator().getFlags() & MessageElement::EmoteImages;
bool isCompactEmote =
!(this->flags_ & Message::DisableCompactEmotes) &&
element->getCreator().getFlags() & MessageElement::EmoteImages;
int yExtra = 0;
if (isCompactEmote) {
yExtra = (COMPACT_EMOTES_OFFSET / 2) * this->scale_;
}
// if (element->getCreator().getFlags() & MessageElement::Badges) {
// if (element->getCreator().getFlags() & MessageElement::Badges)
// {
if (element->getRect().height() < this->textLineHeight_) {
yExtra -= (this->textLineHeight_ - element->getRect().height()) / 2;
}
element->setPosition(QPoint(element->getRect().x() + xOffset + this->margin.left,
element->getRect().y() + this->lineHeight_ + yExtra));
element->setPosition(
QPoint(element->getRect().x() + xOffset + this->margin.left,
element->getRect().y() + this->lineHeight_ + yExtra));
}
if (this->lines_.size() != 0) {
this->lines_.back().endIndex = this->lineStart_;
this->lines_.back().endCharIndex = this->charIndex_;
}
this->lines_.push_back({(int)lineStart_, 0, this->charIndex_, 0,
QRect(-100000, this->currentY_, 200000, lineHeight_)});
this->lines_.push_back(
{(int)lineStart_, 0, this->charIndex_, 0,
QRect(-100000, this->currentY_, 200000, lineHeight_)});
for (int i = this->lineStart_; i < this->elements_.size(); i++) {
this->charIndex_ += this->elements_[i]->getSelectionIndexCount();
@@ -178,17 +192,20 @@ bool MessageLayoutContainer::fitsInLine(int _width)
{
return this->currentX_ + _width <=
(this->width_ - this->margin.left - this->margin.right -
(this->line_ + 1 == MAX_UNCOLLAPSED_LINES ? this->dotdotdotWidth_ : 0));
(this->line_ + 1 == MAX_UNCOLLAPSED_LINES ? this->dotdotdotWidth_
: 0));
}
void MessageLayoutContainer::end()
{
if (!this->canAddElements()) {
static TextElement dotdotdot("...", MessageElement::Collapsed, MessageColor::Link);
static TextElement dotdotdot("...", MessageElement::Collapsed,
MessageColor::Link);
static QString dotdotdotText("...");
auto *element = new TextLayoutElement(
dotdotdot, dotdotdotText, QSize(this->dotdotdotWidth_, this->textLineHeight_),
dotdotdot, dotdotdotText,
QSize(this->dotdotdotWidth_, this->textLineHeight_),
QColor("#00D80A"), FontStyle::ChatMediumBold, this->scale_);
// getApp()->themes->messages.textColors.system
@@ -235,7 +252,8 @@ MessageLayoutElement *MessageLayoutContainer::getElementAt(QPoint point)
// painting
void MessageLayoutContainer::paintElements(QPainter &painter)
{
for (const std::unique_ptr<MessageLayoutElement> &element : this->elements_) {
for (const std::unique_ptr<MessageLayoutElement> &element :
this->elements_) {
#ifdef FOURTF
painter.setPen(QColor(0, 255, 0));
painter.drawRect(element->getRect());
@@ -245,9 +263,11 @@ void MessageLayoutContainer::paintElements(QPainter &painter)
}
}
void MessageLayoutContainer::paintAnimatedElements(QPainter &painter, int yOffset)
void MessageLayoutContainer::paintAnimatedElements(QPainter &painter,
int yOffset)
{
for (const std::unique_ptr<MessageLayoutElement> &element : this->elements_) {
for (const std::unique_ptr<MessageLayoutElement> &element :
this->elements_) {
element->paintAnimated(painter, yOffset);
}
}
@@ -273,7 +293,8 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex,
rect.setTop(std::max(0, rect.top()) + yOffset);
rect.setBottom(std::min(this->height_, rect.bottom()) + yOffset);
rect.setLeft(this->elements_[line.startIndex]->getRect().left());
rect.setRight(this->elements_[line.endIndex - 1]->getRect().right());
rect.setRight(
this->elements_[line.endIndex - 1]->getRect().right());
painter.fillRect(rect, selectionColor);
}
@@ -302,16 +323,19 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex,
int c = this->elements_[i]->getSelectionIndexCount();
if (index + c > selection.selectionMin.charIndex) {
x = this->elements_[i]->getXFromIndex(selection.selectionMin.charIndex - index);
x = this->elements_[i]->getXFromIndex(
selection.selectionMin.charIndex - index);
// ends in same line
if (selection.selectionMax.messageIndex == messageIndex &&
line.endCharIndex > /*=*/selection.selectionMax.charIndex) //
line.endCharIndex >
/*=*/selection.selectionMax.charIndex) //
{
returnAfter = true;
index = line.startCharIndex;
for (int i = line.startIndex; i < line.endIndex; i++) {
int c = this->elements_[i]->getSelectionIndexCount();
int c =
this->elements_[i]->getSelectionIndexCount();
if (index + c > selection.selectionMax.charIndex) {
r = this->elements_[i]->getXFromIndex(
@@ -330,9 +354,15 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex,
QRect rect = line.rect;
rect.setTop(std::max(0, rect.top()) + yOffset);
rect.setBottom(std::min(this->height_, rect.bottom()) + yOffset);
rect.setLeft(this->elements_[line.startIndex]->getRect().left());
rect.setRight(this->elements_[line.endIndex - 1]->getRect().right());
rect.setBottom(
std::min(this->height_, rect.bottom()) +
yOffset);
rect.setLeft(this->elements_[line.startIndex]
->getRect()
.left());
rect.setRight(this->elements_[line.endIndex - 1]
->getRect()
.right());
painter.fillRect(rect, selectionColor);
}
@@ -378,7 +408,8 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex,
rect.setTop(std::max(0, rect.top()) + yOffset);
rect.setBottom(std::min(this->height_, rect.bottom()) + yOffset);
rect.setLeft(this->elements_[line.startIndex]->getRect().left());
rect.setRight(this->elements_[line.endIndex - 1]->getRect().right());
rect.setRight(
this->elements_[line.endIndex - 1]->getRect().right());
painter.fillRect(rect, selectionColor);
continue;
@@ -390,7 +421,8 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex,
int c = this->elements_[i]->getSelectionIndexCount();
if (index + c > selection.selectionMax.charIndex) {
r = this->elements_[i]->getXFromIndex(selection.selectionMax.charIndex - index);
r = this->elements_[i]->getXFromIndex(
selection.selectionMax.charIndex - index);
break;
}
@@ -424,11 +456,13 @@ int MessageLayoutContainer::getSelectionIndex(QPoint point)
}
}
int lineStart = line == this->lines_.end() ? this->lines_.back().startIndex : line->startIndex;
int lineStart = line == this->lines_.end() ? this->lines_.back().startIndex
: line->startIndex;
if (line != this->lines_.end()) {
line++;
}
int lineEnd = line == this->lines_.end() ? this->elements_.size() : line->startIndex;
int lineEnd =
line == this->lines_.end() ? this->elements_.size() : line->startIndex;
int index = 0;
@@ -66,7 +66,8 @@ struct MessageLayoutContainer {
// painting
void paintElements(QPainter &painter);
void paintAnimatedElements(QPainter &painter, int yOffset);
void paintSelection(QPainter &painter, int messageIndex, Selection &selection, int yOffset);
void paintSelection(QPainter &painter, int messageIndex,
Selection &selection, int yOffset);
// selection
int getSelectionIndex(QPoint point);
+25 -15
View File
@@ -14,7 +14,8 @@ const QRect &MessageLayoutElement::getRect() const
return this->rect_;
}
MessageLayoutElement::MessageLayoutElement(MessageElement &creator, const QSize &size)
MessageLayoutElement::MessageLayoutElement(MessageElement &creator,
const QSize &size)
: creator_(creator)
{
this->rect_.setSize(size);
@@ -63,14 +64,16 @@ const Link &MessageLayoutElement::getLink() const
// IMAGE
//
ImageLayoutElement::ImageLayoutElement(MessageElement &creator, ImagePtr image, const QSize &size)
ImageLayoutElement::ImageLayoutElement(MessageElement &creator, ImagePtr image,
const QSize &size)
: MessageLayoutElement(creator, size)
, image_(image)
{
this->trailingSpace = creator.hasTrailingSpace();
}
void ImageLayoutElement::addCopyTextToString(QString &str, int from, int to) const
void ImageLayoutElement::addCopyTextToString(QString &str, int from,
int to) const
{
// str += this->image_->getCopyString();
str += "not implemented";
@@ -134,8 +137,9 @@ int ImageLayoutElement::getXFromIndex(int index)
// TEXT
//
TextLayoutElement::TextLayoutElement(MessageElement &_creator, QString &_text, const QSize &_size,
QColor _color, FontStyle _style, float _scale)
TextLayoutElement::TextLayoutElement(MessageElement &_creator, QString &_text,
const QSize &_size, QColor _color,
FontStyle _style, float _scale)
: MessageLayoutElement(_creator, _size)
, text(_text)
, color(_color)
@@ -144,7 +148,8 @@ TextLayoutElement::TextLayoutElement(MessageElement &_creator, QString &_text, c
{
}
void TextLayoutElement::addCopyTextToString(QString &str, int from, int to) const
void TextLayoutElement::addCopyTextToString(QString &str, int from,
int to) const
{
str += this->text.mid(from, to - from);
@@ -166,8 +171,9 @@ void TextLayoutElement::paint(QPainter &painter)
painter.setFont(app->fonts->getFont(this->style, this->scale));
painter.drawText(QRectF(this->getRect().x(), this->getRect().y(), 10000, 10000), this->text,
QTextOption(Qt::AlignLeft | Qt::AlignTop));
painter.drawText(
QRectF(this->getRect().x(), this->getRect().y(), 10000, 10000),
this->text, QTextOption(Qt::AlignLeft | Qt::AlignTop));
}
void TextLayoutElement::paintAnimated(QPainter &, int)
@@ -219,8 +225,10 @@ int TextLayoutElement::getXFromIndex(int index)
}
// TEXT ICON
TextIconLayoutElement::TextIconLayoutElement(MessageElement &creator, const QString &_line1,
const QString &_line2, float _scale, const QSize &size)
TextIconLayoutElement::TextIconLayoutElement(MessageElement &creator,
const QString &_line1,
const QString &_line2,
float _scale, const QSize &size)
: MessageLayoutElement(creator, size)
, scale(_scale)
, line1(_line1)
@@ -228,7 +236,8 @@ TextIconLayoutElement::TextIconLayoutElement(MessageElement &creator, const QStr
{
}
void TextIconLayoutElement::addCopyTextToString(QString &str, int from, int to) const
void TextIconLayoutElement::addCopyTextToString(QString &str, int from,
int to) const
{
}
@@ -254,11 +263,12 @@ void TextIconLayoutElement::paint(QPainter &painter)
painter.drawText(_rect, this->line1, option);
} else {
painter.drawText(
QPoint(this->getRect().x(), this->getRect().y() + this->getRect().height() / 2),
QPoint(this->getRect().x(),
this->getRect().y() + this->getRect().height() / 2),
this->line1);
painter.drawText(
QPoint(this->getRect().x(), this->getRect().y() + this->getRect().height()),
this->line2);
painter.drawText(QPoint(this->getRect().x(),
this->getRect().y() + this->getRect().height()),
this->line2);
}
}
+15 -9
View File
@@ -31,7 +31,8 @@ public:
MessageLayoutElement *setTrailingSpace(bool value);
MessageLayoutElement *setLink(const Link &link_);
virtual void addCopyTextToString(QString &str, int from = 0, int to = INT_MAX) const = 0;
virtual void addCopyTextToString(QString &str, int from = 0,
int to = INT_MAX) const = 0;
virtual int getSelectionIndexCount() = 0;
virtual void paint(QPainter &painter) = 0;
virtual void paintAnimated(QPainter &painter, int yOffset) = 0;
@@ -52,10 +53,12 @@ private:
class ImageLayoutElement : public MessageLayoutElement
{
public:
ImageLayoutElement(MessageElement &creator, ImagePtr image, const QSize &size);
ImageLayoutElement(MessageElement &creator, ImagePtr image,
const QSize &size);
protected:
void addCopyTextToString(QString &str, int from = 0, int to = INT_MAX) const override;
void addCopyTextToString(QString &str, int from = 0,
int to = INT_MAX) const override;
int getSelectionIndexCount() override;
void paint(QPainter &painter) override;
void paintAnimated(QPainter &painter, int yOffset) override;
@@ -70,11 +73,13 @@ private:
class TextLayoutElement : public MessageLayoutElement
{
public:
TextLayoutElement(MessageElement &creator_, QString &text, const QSize &size, QColor color,
FontStyle style, float scale);
TextLayoutElement(MessageElement &creator_, QString &text,
const QSize &size, QColor color, FontStyle style,
float scale);
protected:
void addCopyTextToString(QString &str, int from = 0, int to = INT_MAX) const override;
void addCopyTextToString(QString &str, int from = 0,
int to = INT_MAX) const override;
int getSelectionIndexCount() override;
void paint(QPainter &painter) override;
void paintAnimated(QPainter &painter, int yOffset) override;
@@ -93,11 +98,12 @@ private:
class TextIconLayoutElement : public MessageLayoutElement
{
public:
TextIconLayoutElement(MessageElement &creator_, const QString &line1, const QString &line2,
float scale, const QSize &size);
TextIconLayoutElement(MessageElement &creator_, const QString &line1,
const QString &line2, float scale, const QSize &size);
protected:
void addCopyTextToString(QString &str, int from = 0, int to = INT_MAX) const override;
void addCopyTextToString(QString &str, int from = 0,
int to = INT_MAX) const override;
int getSelectionIndexCount() override;
void paint(QPainter &painter) override;
void paintAnimated(QPainter &painter, int yOffset) override;