Fix TerminalDisplay::getCharacterPosition for proportional fonts

I.e. for mouse selections
This commit is contained in:
Arnout Engelen
2014-12-03 01:18:36 +01:00
parent 34ae10b5f1
commit 5efc095d10
2 changed files with 14 additions and 3 deletions
+13 -2
View File
@@ -1399,7 +1399,8 @@ void TerminalDisplay::paintFilters(QPainter& painter)
}
}
int TerminalDisplay::textWidth(int startColumn, int length, int line) {
int TerminalDisplay::textWidth(const int startColumn, const int length, const int line) const
{
QFontMetrics fm(font());
int result = 0;
for (int column = 0; column < length; column++) {
@@ -2204,9 +2205,19 @@ void TerminalDisplay::mouseReleaseEvent(QMouseEvent* ev)
void TerminalDisplay::getCharacterPosition(const QPoint& widgetPoint,int& line,int& column) const
{
column = (widgetPoint.x() + _fontWidth/2 -contentsRect().left()-_leftMargin) / _fontWidth;
line = (widgetPoint.y()-contentsRect().top()-_topMargin) / _fontHeight;
if ( _fixedFont )
column = (widgetPoint.x() + _fontWidth/2 -contentsRect().left()-_leftMargin) / _fontWidth;
else
{
int x = contentsRect().left() + widgetPoint.x() - _fontWidth/2;
column = 0;
while(x > textWidth(0, column, line))
column++;
}
if ( line < 0 )
line = 0;
if ( column < 0 )
+1 -1
View File
@@ -643,7 +643,7 @@ private:
// -- Drawing helpers --
// determine the width of this text
int textWidth(int startColumn, int length, int line);
int textWidth(int startColumn, int length, int line) const;
// determine the area that encloses this series of characters
QRect calculateTextArea(int topLeftX, int topLeftY, int startColumn, int line, int length);