diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml index 50231b9d58b..e4efe1932f9 100644 --- a/src/plugins/qmlprofiler/qml/MainView.qml +++ b/src/plugins/qmlprofiler/qml/MainView.qml @@ -141,6 +141,13 @@ Rectangle { recenter((qmlProfilerModelProxy.startTime(modelIndex, itemIndex) + qmlProfilerModelProxy.endTime(modelIndex, itemIndex)) / 2); } + var row = qmlProfilerModelProxy.row(modelIndex, itemIndex); + var totalRowOffset = qmlProfilerModelProxy.modelOffset(modelIndex) + + qmlProfilerModelProxy.rowOffset(modelIndex, row); + if (totalRowOffset > flick.contentY + flick.height || + totalRowOffset + qmlProfilerModelProxy.rowHeight(modelIndex, row) < flick.contentY) + flick.contentY = Math.min(flick.contentHeight - flick.height, + Math.max(0, totalRowOffset - flick.height / 2)); } function hideRangeDetails() { diff --git a/src/plugins/qmlprofiler/timelinemodelaggregator.cpp b/src/plugins/qmlprofiler/timelinemodelaggregator.cpp index ada08f3cc01..4a2cfc4ff21 100644 --- a/src/plugins/qmlprofiler/timelinemodelaggregator.cpp +++ b/src/plugins/qmlprofiler/timelinemodelaggregator.cpp @@ -65,10 +65,7 @@ TimelineModelAggregator::~TimelineModelAggregator() int TimelineModelAggregator::height() const { - int ret = 0; - for (int i = 0; i < d->modelList.length(); ++i) - ret += d->modelList[i]->height(); - return ret; + return modelOffset(d->modelList.length()); } void TimelineModelAggregator::setModelManager(QmlProfilerModelManager *modelManager) @@ -133,6 +130,14 @@ bool TimelineModelAggregator::isEmpty() const return true; } +int TimelineModelAggregator::modelOffset(int modelIndex) const +{ + int ret = 0; + for (int i = 0; i < modelIndex; ++i) + ret += d->modelList[i]->height(); + return ret; +} + int TimelineModelAggregator::rowHeight(int modelIndex, int row) const { return d->modelList[modelIndex]->rowHeight(row); diff --git a/src/plugins/qmlprofiler/timelinemodelaggregator.h b/src/plugins/qmlprofiler/timelinemodelaggregator.h index 8985773fcb1..6f63b755d2d 100644 --- a/src/plugins/qmlprofiler/timelinemodelaggregator.h +++ b/src/plugins/qmlprofiler/timelinemodelaggregator.h @@ -61,6 +61,7 @@ public: Q_INVOKABLE bool isEmpty() const; + Q_INVOKABLE int modelOffset(int modelIndex) const; Q_INVOKABLE int rowHeight(int modelIndex, int row) const; Q_INVOKABLE void setRowHeight(int modelIndex, int row, int height); Q_INVOKABLE int rowOffset(int modelIndex, int row) const;