diff --git a/lib/TerminalDisplay.cpp b/lib/TerminalDisplay.cpp index 1d8de89..57d0075 100644 --- a/lib/TerminalDisplay.cpp +++ b/lib/TerminalDisplay.cpp @@ -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 ) diff --git a/lib/TerminalDisplay.h b/lib/TerminalDisplay.h index d962c3a..2b7e493 100644 --- a/lib/TerminalDisplay.h +++ b/lib/TerminalDisplay.h @@ -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);