fixed compiling

This commit is contained in:
fourtf 2018-01-15 04:08:48 +01:00
parent d045f6963a
commit 6701c3d0b2
5 changed files with 70 additions and 80 deletions

View file

@ -275,80 +275,7 @@ int MessageLayout::getLastCharacterIndex() const
int MessageLayout::getSelectionIndex(QPoint position) int MessageLayout::getSelectionIndex(QPoint position)
{ {
// if (this->wordParts.size() == 0) { return this->container.getSelectionIndex(position);
// return 0;
// }
// // find out in which line the cursor is
// int lineNumber = 0, lineStart = 0, lineEnd = 0;
// for (size_t i = 0; i < this->wordParts.size(); i++) {
// LayoutItem &part = this->wordParts[i];
// if (part.getLineNumber() != 0 && position.y() < part.getY()) {
// break;
// }
// if (part.getLineNumber() != lineNumber) {
// lineStart = i;
// lineNumber = part.getLineNumber();
// }
// lineEnd = i + 1;
// }
// // count up to the cursor
// int index = 0;
// for (int i = 0; i < lineStart; i++) {
// LayoutItem &part = this->wordParts[i];
// index += part.getWord().isImage() ? 2 : part.getText().length() + 1;
// }
// for (int i = lineStart; i < lineEnd; i++) {
// LayoutItem &part = this->wordParts[i];
// // curser is left of the word part
// if (position.x() < part.getX()) {
// break;
// }
// // cursor is right of the word part
// if (position.x() > part.getX() + part.getWidth()) {
// index += part.getCharacterLength();
// continue;
// }
// // cursor is over the word part
// if (part.getWord().isImage()) {
// if (position.x() - part.getX() > part.getWidth() / 2) {
// index++;
// }
// } else {
// // TODO: use word.getCharacterWidthCache();
// auto text = part.getText();
// int x = part.getX();
// for (int j = 0; j < text.length(); j++) {
// if (x > position.x()) {
// break;
// }
// index++;
// x = part.getX() + part.getWord().getFontMetrics(this->scale).width(text, j +
// 1);
// }
// }
// break;
// }
// return index;
return 0;
} }
} // namespace layouts } // namespace layouts
} // namespace messages } // namespace messages

View file

@ -4,6 +4,7 @@
#include "messages/selection.hpp" #include "messages/selection.hpp"
#include "singletons/settingsmanager.hpp" #include "singletons/settingsmanager.hpp"
#include <QDebug>
#include <QPainter> #include <QPainter>
#define COMPACT_EMOTES_OFFSET 6 #define COMPACT_EMOTES_OFFSET 6
@ -105,6 +106,8 @@ void MessageLayoutContainer::breakLine()
element->getRect().y() + this->lineHeight + yExtra)); element->getRect().y() + this->lineHeight + yExtra));
} }
this->lines.push_back({(int)lineStart, QRect(0, this->currentY, this->width, lineHeight)});
this->lineStart = this->elements.size(); this->lineStart = this->elements.size();
this->currentX = 0; this->currentX = 0;
this->currentY += this->lineHeight; this->currentY += this->lineHeight;
@ -127,6 +130,11 @@ void MessageLayoutContainer::finish()
if (!this->atStartOfLine()) { if (!this->atStartOfLine()) {
this->breakLine(); this->breakLine();
} }
if (this->lines.size() != 0) {
this->lines[0].rect.setTop(0);
this->lines.back().rect.setBottom(this->height);
}
} }
MessageLayoutElement *MessageLayoutContainer::getElementAt(QPoint point) MessageLayoutElement *MessageLayoutContainer::getElementAt(QPoint point)
@ -159,6 +167,53 @@ void MessageLayoutContainer::paintSelection(QPainter &painter, int messageIndex,
Selection &selection) Selection &selection)
{ {
} }
// selection
int MessageLayoutContainer::getSelectionIndex(QPoint point)
{
if (this->elements.size() == 0) {
return 0;
}
auto line = this->lines.begin();
for (; line != this->lines.end(); line++) {
if (line->rect.contains(point)) {
break;
}
}
assert(line != this->lines.end());
int lineStart = line->startIndex;
line++;
int lineEnd = line == this->lines.end() ? this->elements.size() : line->startIndex;
int index = 0;
for (int i = 0; i < lineEnd; i++) {
// end of line
if (i == lineEnd) {
break;
}
// before line
if (i < lineStart) {
index += this->elements[i]->getSelectionIndexCount();
continue;
}
// this is the word
if (point.x() > this->elements[i]->getRect().left()) {
index += this->elements[i]->getMouseOverIndex(point);
break;
}
}
qDebug() << index;
return index;
}
} // namespace layouts } // namespace layouts
} // namespace messages } // namespace messages
} // namespace chatterino } // namespace chatterino

View file

@ -4,6 +4,7 @@
#include <vector> #include <vector>
#include <QPoint> #include <QPoint>
#include <QRect>
class QPainter; class QPainter;
@ -67,6 +68,9 @@ public:
void paintAnimatedElements(QPainter &painter, int yOffset); void paintAnimatedElements(QPainter &painter, int yOffset);
void paintSelection(QPainter &painter, int messageIndex, Selection &selection); void paintSelection(QPainter &painter, int messageIndex, Selection &selection);
// selection
int getSelectionIndex(QPoint point);
private: private:
// helpers // helpers
void _addElement(MessageLayoutElement *element); void _addElement(MessageLayoutElement *element);
@ -79,6 +83,13 @@ private:
int lineHeight = 0; int lineHeight = 0;
int spaceWidth = 4; int spaceWidth = 4;
std::vector<std::unique_ptr<MessageLayoutElement>> elements; std::vector<std::unique_ptr<MessageLayoutElement>> elements;
struct Line {
int startIndex;
QRect rect;
};
std::vector<Line> lines;
}; };
} // namespace layouts } // namespace layouts
} // namespace messages } // namespace messages

View file

@ -18,11 +18,12 @@
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QVBoxLayout> #include <QVBoxLayout>
#include "widgets/helper/rippleeffectlabel.hpp"
#define WM_DPICHANGED 0x02E0 #define WM_DPICHANGED 0x02E0
#endif #endif
#include "widgets/helper/rippleeffectlabel.hpp"
namespace chatterino { namespace chatterino {
namespace widgets { namespace widgets {
@ -114,7 +115,7 @@ void BaseWindow::init()
QWidget *BaseWindow::getLayoutContainer() QWidget *BaseWindow::getLayoutContainer()
{ {
if (this->enableCustomFrame) { if (this->hasCustomWindowFrame()) {
return this->layoutBase; return this->layoutBase;
} else { } else {
return this; return this;

View file

@ -50,11 +50,7 @@ Window::Window(const QString &windowName, singletons::ThemeManager &_themeManage
this->getLayoutContainer()->setLayout(layout); this->getLayoutContainer()->setLayout(layout);
// set margin // set margin
// if (SettingsManager::getInstance().useCustomWindowFrame.get()) {
// layout->setMargin(1);
// } else {
layout->setMargin(0); layout->setMargin(0);
// }
this->refreshTheme(); this->refreshTheme();