From 739c17c0c88caf04b8ba3d6b6897bd6cf0e2740e Mon Sep 17 00:00:00 2001 From: fourtf Date: Tue, 10 Apr 2018 03:29:00 +0200 Subject: [PATCH] selections now render over all images --- src/messages/layouts/messagelayout.cpp | 10 ++++----- .../layouts/messagelayoutcontainer.cpp | 22 +++++++++---------- .../layouts/messagelayoutcontainer.hpp | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/messages/layouts/messagelayout.cpp b/src/messages/layouts/messagelayout.cpp index 3e6cc521e..658f6ad7c 100644 --- a/src/messages/layouts/messagelayout.cpp +++ b/src/messages/layouts/messagelayout.cpp @@ -166,6 +166,11 @@ void MessageLayout::paint(QPainter &painter, int y, int messageIndex, Selection painter.fillRect(0, y, pixmap->width(), pixmap->height(), themeManager.messages.disabled); } + // draw selection + if (!selection.isEmpty()) { + this->container.paintSelection(painter, messageIndex, selection, y); + } + // draw last read message line if (isLastReadMessage) { QColor color = isWindowFocused ? themeManager.tabs.selected.backgrounds.regular.color() @@ -193,11 +198,6 @@ void MessageLayout::updateBuffer(QPixmap *buffer, int messageIndex, Selection &s ? themeManager.messages.backgrounds.highlighted : themeManager.messages.backgrounds.regular); - // draw selection - if (!selection.isEmpty()) { - this->container.paintSelection(painter, messageIndex, selection); - } - // draw message this->container.paintElements(painter); diff --git a/src/messages/layouts/messagelayoutcontainer.cpp b/src/messages/layouts/messagelayoutcontainer.cpp index 1ced1263e..e6459a02a 100644 --- a/src/messages/layouts/messagelayoutcontainer.cpp +++ b/src/messages/layouts/messagelayoutcontainer.cpp @@ -196,7 +196,7 @@ void MessageLayoutContainer::paintAnimatedElements(QPainter &painter, int yOffse } void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex, - Selection &selection) + Selection &selection, int yOffset) { singletons::ThemeManager &themeManager = singletons::ThemeManager::getInstance(); QColor selectionColor = themeManager.messages.selection; @@ -211,8 +211,8 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex, for (Line &line : this->lines) { QRect rect = line.rect; - rect.setTop(std::max(0, rect.top())); - rect.setBottom(std::min(this->height, rect.bottom())); + 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()); @@ -270,8 +270,8 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex, Line &line = this->lines[lineIndex2]; QRect rect = line.rect; - rect.setTop(std::max(0, rect.top())); - rect.setBottom(std::min(this->height, rect.bottom())); + 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()); @@ -290,8 +290,8 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex, QRect rect = line.rect; - rect.setTop(std::max(0, rect.top())); - rect.setBottom(std::min(this->height, rect.bottom())); + rect.setTop(std::max(0, rect.top()) + yOffset); + rect.setBottom(std::min(this->height, rect.bottom()) + yOffset); rect.setLeft(x); rect.setRight(r); @@ -316,8 +316,8 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex, if (line.endCharIndex < /*=*/selection.max.charIndex) { QRect rect = line.rect; - rect.setTop(std::max(0, rect.top())); - rect.setBottom(std::min(this->height, rect.bottom())); + 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()); @@ -340,8 +340,8 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex, QRect rect = line.rect; - rect.setTop(std::max(0, rect.top())); - rect.setBottom(std::min(this->height, rect.bottom())); + 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(r); diff --git a/src/messages/layouts/messagelayoutcontainer.hpp b/src/messages/layouts/messagelayoutcontainer.hpp index 855378115..69cf16607 100644 --- a/src/messages/layouts/messagelayoutcontainer.hpp +++ b/src/messages/layouts/messagelayoutcontainer.hpp @@ -68,7 +68,7 @@ struct MessageLayoutContainer { // painting void paintElements(QPainter &painter); void paintAnimatedElements(QPainter &painter, int yOffset); - void paintSelection(QPainter &painter, int messageIndex, Selection &selection); + void paintSelection(QPainter &painter, int messageIndex, Selection &selection, int yOffset); // selection int getSelectionIndex(QPoint point);