From 7a31b51c1ab63b62ee8818cbdb9f4f6b4d40a8dd Mon Sep 17 00:00:00 2001
From: jsalmon3 <>
Date: Tue, 9 Apr 2002 21:37:13 +0000
Subject: [PATCH] Added feature #422167 - Mouse cursor is restricted to minimap
 when dragged

---
 src/ui/mouse.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/src/ui/mouse.cpp b/src/ui/mouse.cpp
index d9004c609..723cfad26 100644
--- a/src/ui/mouse.cpp
+++ b/src/ui/mouse.cpp
@@ -582,6 +582,37 @@ global void HandleMouseExit(void)
     GameCursor = TheUI.Point.Cursor;
 }
 
+/**
+**	Restrict mouse cursor to minimap
+*/
+local void RestrictCursorToMinimap(void)
+{
+    if( CursorX<TheUI.MinimapX+24 ) {
+	CursorStartX=TheUI.MinimapX+24;
+    }
+    else if( CursorX>=TheUI.MinimapX+24+MINIMAP_W ) {
+	CursorStartX=TheUI.MinimapX+24+MINIMAP_W-1;
+    }
+    else {
+	CursorStartX=CursorX;
+    }
+
+    if( CursorY<TheUI.MinimapY+2 ) {
+	CursorStartY=TheUI.MinimapY+2;
+    }
+    else if( CursorY>=TheUI.MinimapY+2+MINIMAP_H ) {
+	CursorStartY=TheUI.MinimapY+2+MINIMAP_H-1;
+    }
+    else {
+	CursorStartY=CursorY;
+    }
+
+    CursorX=TheUI.WarpX=CursorStartX;
+    CursorY=TheUI.WarpY=CursorStartY;
+    CursorOn=CursorOnMinimap;
+}
+
+
 /**
 **	Handle movement of the cursor.
 **
@@ -592,7 +623,9 @@ global void UIHandleMouseMove(int x,int y)
 {
     int mx;
     int my;
+    enum _cursor_on_ OldCursorOn;
 
+    OldCursorOn=CursorOn;
     //
     //	Selecting units.
     //
@@ -646,6 +679,15 @@ global void UIHandleMouseMove(int x,int y)
     HandleMouseOn(x,y);
     DebugLevel3("MouseOn %d\n",CursorOn);
 
+    //	Restrict mouse to minimap when dragging
+    if( OldCursorOn==CursorOnMinimap && CursorOn!=CursorOnMinimap &&
+	(MouseButtons&LeftButton) ) {
+	RestrictCursorToMinimap();
+	MapSetViewpoint(ScreenMinimap2MapX(CursorX)-MapWidth/2
+		,ScreenMinimap2MapY(CursorY)-MapHeight/2);
+	return;
+    }
+
     //
     //	User may be draging with button pressed.
     //
@@ -732,6 +774,8 @@ global void UIHandleMouseMove(int x,int y)
 	//
 	MapSetViewpoint(ScreenMinimap2MapX(CursorX)-MapWidth/2
 		,ScreenMinimap2MapY(CursorY)-MapHeight/2);
+	CursorStartX=CursorX;
+	CursorStartY=CursorY;
 	return;
     }
 }