MCPcopy Create free account
hub / github.com/KDE/kdiff3 / mouseMoveEvent

Method mouseMoveEvent

src/difftextwindow.cpp:789–847  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

787}
788
789void 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 }

Callers

nothing calls this directly

Calls 6

isValidFirstLineMethod · 0.80
endMethod · 0.80
leftInfoWidthMethod · 0.80
isFromBufferMethod · 0.80
isEmptyMethod · 0.45
myUpdateMethod · 0.45

Tested by

no test coverage detected