| 787 | } |
| 788 | |
| 789 | void DiffTextWindow::mouseMoveEvent(QMouseEvent* e) |
| 790 | { //Handles selection highlighting. |
| 791 | LineRef line; |
| 792 | qint32 pos; |
| 793 | |
| 794 | qCInfo(kdiffDiffTextWindow) << "Mouse Moved"; |
| 795 | qCDebug(kdiffDiffTextWindow) << "d->m_lastKnownMousePos = " << d->m_lastKnownMousePos << ", e->pos() = " << e->pos(); |
| 796 | |
| 797 | convertToLinePos(e->pos().x(), e->pos().y(), line, pos); |
| 798 | d->m_lastKnownMousePos = e->pos(); |
| 799 | |
| 800 | qCDebug(kdiffDiffTextWindow) << "line = " << line << ", pos = " << pos; |
| 801 | |
| 802 | if(d->m_selection.isValidFirstLine()) |
| 803 | { |
| 804 | qCDebug(kdiffDiffTextWindow) << "d->m_selection.isValidFirstLine() = " << d->m_selection.isValidFirstLine(); |
| 805 | const bool selectionWasEmpty = d->m_selection.isEmpty(); |
| 806 | d->m_selection.end(line, pos); |
| 807 | if(!d->m_selection.isEmpty() && selectionWasEmpty) |
| 808 | Q_EMIT newSelection(); |
| 809 | |
| 810 | showStatusLine(line); |
| 811 | |
| 812 | // Scroll because mouse moved out of the window |
| 813 | const QFontMetrics& fm = fontMetrics(); |
| 814 | qint32 fontWidth = fm.horizontalAdvance('0'); |
| 815 | qint32 deltaX = 0; |
| 816 | qint32 deltaY = 0; |
| 817 | //TODO: Fix after line number area is converted to a QWidget. |
| 818 | //FIXME: Why are we manually doing Layout adjustments? |
| 819 | if(!gOptions->m_bRightToLeftLanguage) |
| 820 | { |
| 821 | if(e->pos().x() < d->leftInfoWidth() * fontWidth) deltaX = -1 - abs(e->pos().x() - d->leftInfoWidth() * fontWidth) / fontWidth; |
| 822 | if(e->pos().x() > width()) deltaX = +1 + abs(e->pos().x() - width()) / fontWidth; |
| 823 | } |
| 824 | else |
| 825 | { |
| 826 | if(e->pos().x() > width() - 1 - d->leftInfoWidth() * fontWidth) deltaX = +1 + abs(e->pos().x() - (width() - 1 - d->leftInfoWidth() * fontWidth)) / fontWidth; |
| 827 | if(e->pos().x() < fontWidth) deltaX = -1 - abs(e->pos().x() - fontWidth) / fontWidth; |
| 828 | } |
| 829 | if(e->pos().y() < 0) deltaY = -1 - (qint32)std::pow<qint32, qint32>(e->pos().y(), 2) / (qint32)std::pow(fm.lineSpacing(), 2); |
| 830 | if(e->pos().y() > height()) deltaY = 1 + (qint32)std::pow(e->pos().y() - height(), 2) / (qint32)std::pow(fm.lineSpacing(), 2); |
| 831 | if((deltaX != 0 && d->m_scrollDeltaX != deltaX) || (deltaY != 0 && d->m_scrollDeltaY != deltaY)) |
| 832 | { |
| 833 | d->m_scrollDeltaX = deltaX; |
| 834 | d->m_scrollDeltaY = deltaY; |
| 835 | Q_EMIT scrollDiffTextWindow(deltaX, deltaY); |
| 836 | if(d->m_delayedDrawTimer) |
| 837 | killTimer(d->m_delayedDrawTimer); |
| 838 | d->m_delayedDrawTimer = startTimer(50); |
| 839 | } |
| 840 | else |
| 841 | { |
| 842 | d->m_scrollDeltaX = deltaX; |
| 843 | d->m_scrollDeltaY = deltaY; |
| 844 | d->myUpdate(0); |
| 845 | } |
| 846 | } |
nothing calls this directly
no test coverage detected