forked from qt-creator/qt-creator
QmlProfiler: Make sure that very narrow events can be hovered over
By giving the area the mouse "covers" a non-zero width events that last only a very short time can be selected even if no pixel in the timeline falls "into" them. Task-number: QTCREATORBUG-11692 Change-Id: I53b74e2a770719872e0afc57740f7762636dc641 Reviewed-by: Kai Koehne <kai.koehne@digia.com>
This commit is contained in:
@@ -317,21 +317,23 @@ void TimelineRenderer::manageHovered(int mouseX, int mouseY)
|
|||||||
if (m_endTime - m_startTime <=0 || m_lastEndTime - m_lastStartTime <= 0)
|
if (m_endTime - m_startTime <=0 || m_lastEndTime - m_lastStartTime <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
qint64 time = mouseX * (m_endTime - m_startTime) / width() + m_startTime;
|
// Make the "selected" area 3 pixels wide by adding/subtracting 1 to catch very narrow events.
|
||||||
|
qint64 startTime = (mouseX - 1) * (m_endTime - m_startTime) / width() + m_startTime;
|
||||||
|
qint64 endTime = (mouseX + 1) * (m_endTime - m_startTime) / width() + m_startTime;
|
||||||
int row = (mouseY + y()) / DefaultRowHeight;
|
int row = (mouseY + y()) / DefaultRowHeight;
|
||||||
int modelIndex = modelFromPosition(mouseY + y());
|
int modelIndex = modelFromPosition(mouseY + y());
|
||||||
|
|
||||||
// already covered? nothing to do
|
// already covered? nothing to do
|
||||||
if (m_currentSelection.eventIndex != -1 &&
|
if (m_currentSelection.eventIndex != -1 &&
|
||||||
time >= m_currentSelection.startTime &&
|
endTime >= m_currentSelection.startTime &&
|
||||||
time <= m_currentSelection.endTime &&
|
startTime <= m_currentSelection.endTime &&
|
||||||
row == m_currentSelection.row) {
|
row == m_currentSelection.row) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// find if there's items in the time range
|
// find if there's items in the time range
|
||||||
int eventFrom = m_profilerModelProxy->findFirstIndex(modelIndex, time);
|
int eventFrom = m_profilerModelProxy->findFirstIndex(modelIndex, startTime);
|
||||||
int eventTo = m_profilerModelProxy->findLastIndex(modelIndex, time);
|
int eventTo = m_profilerModelProxy->findLastIndex(modelIndex, endTime);
|
||||||
if (eventFrom == -1 ||
|
if (eventFrom == -1 ||
|
||||||
eventTo < eventFrom || eventTo >= m_profilerModelProxy->count()) {
|
eventTo < eventFrom || eventTo >= m_profilerModelProxy->count()) {
|
||||||
m_currentSelection.eventIndex = -1;
|
m_currentSelection.eventIndex = -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user