diff --git a/src/libs/timeline/timelineselectionrenderpass.cpp b/src/libs/timeline/timelineselectionrenderpass.cpp
index 7c723eb5cfbdc408c0c9d02a1e87e255cc8b377b..c5e63a5243fea6c07f5577cf2702da520cbfc373 100644
--- a/src/libs/timeline/timelineselectionrenderpass.cpp
+++ b/src/libs/timeline/timelineselectionrenderpass.cpp
@@ -102,9 +102,12 @@ TimelineRenderPass::State *TimelineSelectionRenderPass::update(
             top = TimelineModel::defaultRowHeight() * (row + 1) - height;
         }
 
-        qint64 startTime = model->startTime(selectedItem);
-        qint64 left = qMax(startTime - parentState->start(), (qint64)0);
-        qint64 width = qMin(parentState->end() - startTime, model->duration(selectedItem));
+        qint64 startTime = qBound(parentState->start(), model->startTime(selectedItem),
+                                  parentState->end());
+        qint64 endTime = qBound(parentState->start(), model->endTime(selectedItem),
+                                parentState->end());
+        qint64 left = startTime - parentState->start();
+        qint64 width = endTime - startTime;
 
         // Construct from upper left and lower right for better precision. When constructing from
         // left and width the error on the left border is inherited by the right border. Like this