From d3190656451fbac5bb971c360deb637f51b9dd2a Mon Sep 17 00:00:00 2001
From: Christiaan Janssen <christiaan.janssen@nokia.com>
Date: Thu, 21 Jul 2011 13:25:34 +0200
Subject: [PATCH] QmlProfiler: rendering event information popup next to cursor

Task-number: QTCREATORBUG-5538
Change-Id: I6cb4ac6924eda2588657dbea0d51166ad0c01340
Reviewed-on: http://codereview.qt.nokia.com/1948
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
---
 src/plugins/qmlprofiler/qml/MainView.qml | 34 +++++++++++++++++-------
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml
index 7654c8feb93..ff4bc99f3d3 100644
--- a/src/plugins/qmlprofiler/qml/MainView.qml
+++ b/src/plugins/qmlprofiler/qml/MainView.qml
@@ -304,18 +304,34 @@ Rectangle {
                     rangeDetails.line = line
                     rangeDetails.type = Plotter.names[type]
 
-                    var pos = mapToItem(rangeDetails.parent, x, y+height)
-                    var preferredX = Math.max(10, pos.x - rangeDetails.width/2)
-                    if (preferredX + rangeDetails.width > rangeDetails.parent.width)
-                        preferredX = rangeDetails.parent.width - rangeDetails.width
+                    var margin = 10;
+
+                    var pos = mapToItem(rangeDetails.parent , x, y)
+                    var preferredX = pos.x + margin;
+
+                    // if over the right side of the window, render it left to the given pos
+                    if (preferredX + rangeDetails.width + margin > rangeDetails.parent.width)
+                        preferredX = pos.x - rangeDetails.width - margin;
+
+                    // if window too narrow, put it at least in "margin" pixels
+                    if (preferredX < margin)
+                        preferredX = margin;
+
                     rangeDetails.x = preferredX
 
-                    var preferredY = pos.y - rangeDetails.height/2;
-                    if (preferredY + rangeDetails.height > root.height - 10)
-                        preferredY = root.height - 10 - rangeDetails.height;
-                    if (preferredY < 10)
-                        preferredY=10;
+                    // center on current item
+                    var preferredY = pos.y + height/2 - rangeDetails.height/2;
+
+                    // if too low, put it over the bottom of the window
+                    if (preferredY + rangeDetails.height - margin > root.height)
+                        preferredY = root.height - rangeDetails.height - margin;
+
+                    // but never above the top of the window
+                    if (preferredY < margin)
+                        preferredY = margin;
+
                     rangeDetails.y = preferredY;
+
                     rangeDetails.visible = true
                 }
 
-- 
GitLab