[gnome-maps/wip/mlundblad/more-bubble-position-fixes] mapMarker: Imrove marker reposion when not fitting below




commit 9a6223fd1c144948fd1049f21ae014b302015878
Author: Marcus Lundblad <ml update uu se>
Date:   Tue Mar 9 22:23:52 2021 +0100

    mapMarker: Imrove marker reposion when not fitting below
    
    Improve the bubble repositioning code to only
    use below the marker position when there's enough
    room, otherwise revert to left or right depeding
    on the closest edge horizontally.

 src/mapMarker.js | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)
---
diff --git a/src/mapMarker.js b/src/mapMarker.js
index 7fb45201..eb2747ab 100644
--- a/src/mapMarker.js
+++ b/src/mapMarker.js
@@ -240,13 +240,23 @@ var MapMarker = GObject.registerClass({
         let bubbleSize = bubble.get_preferred_size()[1];
 
         // Set bubble position left/right if it's close to a vertical map edge
-        if (pos.x + pos.width / 2 + bubbleSize.width / 2 >= mapSize.width)
+        if (pos.x + pos.width / 2 + bubbleSize.width / 2 >= mapSize.width) {
             bubble.position = Gtk.PositionType.LEFT;
-        else if (pos.x + pos.width / 2 - bubbleSize.width / 2 <= 0)
+        } else if (pos.x + pos.width / 2 - bubbleSize.width / 2 <= 0) {
             bubble.position = Gtk.PositionType.RIGHT;
         // Avoid bubble to cover header bar if the marker is close to the top map edge
-        else if (pos.y - bubbleSize.height <= 0)
-            bubble.position = Gtk.PositionType.BOTTOM;
+        } else if (pos.y - bubbleSize.height <= 0) {
+            /* position bubble below marker if there's enough room,
+             * otherwise choose left or right pointing away from the edge
+             * closest to the marker
+             */
+            if (mapSize.height - pos.y >= bubbleSize.height)
+                bubble.position = Gtk.PositionType.BOTTOM;
+            else if (x >= mapSize.width / 2)
+                bubble.position = Gtk.PositionType.LEFT;
+            else
+                bubble.position = Gtk.PositionType.RIGHT;
+        }
     }
 
     _hideBubbleOn(signal, duration) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]