aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/base/UMain.pas2
-rw-r--r--src/menu/UDisplay.pas22
-rw-r--r--src/menu/UMenu.pas12
3 files changed, 21 insertions, 15 deletions
diff --git a/src/base/UMain.pas b/src/base/UMain.pas
index 777784b7..f05470c1 100644
--- a/src/base/UMain.pas
+++ b/src/base/UMain.pas
@@ -435,7 +435,7 @@ begin
end;
end;
- Display.MoveCursor(Event.button.X * 800 / Screen.w,
+ Display.MoveCursor(Event.button.X * 800 * Screens / Screen.w,
Event.button.Y * 600 / Screen.h);
if not Assigned(Display.NextScreen) then
diff --git a/src/menu/UDisplay.pas b/src/menu/UDisplay.pas
index f8f9c43f..fe29e438 100644
--- a/src/menu/UDisplay.pas
+++ b/src/menu/UDisplay.pas
@@ -377,11 +377,11 @@ begin
// Draw OSD only on first Screen if Debug Mode is enabled
if ((Ini.Debug = 1) or (Params.Debug)) and (S = 1) then
- DrawDebugInformation;
- end; // for
+ DrawDebugInformation;
- if not BlackScreen then
- DrawCursor;
+ if not BlackScreen then
+ DrawCursor;
+ end; // for
end;
{ sets SDL_ShowCursor depending on options set in Ini }
@@ -481,8 +481,9 @@ procedure TDisplay.DrawCursor;
var
Alpha: single;
Ticks: cardinal;
+ DrawX: double;
begin
- if (Ini.Mouse = 2) then
+ if (Ini.Mouse = 2) and ((Screens = 1) or ((ScreenAct - 1) = (Round(Cursor_X+16) div 800))) then
begin // draw software cursor
Ticks := SDL_GetTicks;
@@ -523,6 +524,9 @@ begin
if (Alpha > 0) and (not Cursor_HiddenByScreen) then
begin
+ DrawX := Cursor_X;
+ if (ScreenAct = 2) then
+ DrawX := DrawX - RenderW;
glColor4f(1, 1, 1, Alpha);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
@@ -535,16 +539,16 @@ begin
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
- glVertex2f(Cursor_X, Cursor_Y);
+ glVertex2f(DrawX, Cursor_Y);
glTexCoord2f(0, 1);
- glVertex2f(Cursor_X, Cursor_Y + 32);
+ glVertex2f(DrawX, Cursor_Y + 32);
glTexCoord2f(1, 1);
- glVertex2f(Cursor_X + 32, Cursor_Y + 32);
+ glVertex2f(DrawX + 32, Cursor_Y + 32);
glTexCoord2f(1, 0);
- glVertex2f(Cursor_X + 32, Cursor_Y);
+ glVertex2f(DrawX + 32, Cursor_Y);
glEnd;
glDisable(GL_BLEND);
diff --git a/src/menu/UMenu.pas b/src/menu/UMenu.pas
index 3ac487de..b928a612 100644
--- a/src/menu/UMenu.pas
+++ b/src/menu/UMenu.pas
@@ -1642,6 +1642,12 @@ begin
Result:=ParseInput(SDLK_ESCAPE, 0, true);
end;
+ // transfer mousecords to the 800x600 raster we use to draw
+ X := Round((X / (Screen.w / Screens)) * RenderW);
+ if (X > RenderW) then
+ X := X - RenderW;
+ Y := Round((Y / Screen.h) * RenderH);
+
nBut := InteractAt(X, Y);
if nBut >= 0 then
begin
@@ -1657,7 +1663,7 @@ begin
begin
//click button or SelectS
if (Interactions[nBut].Typ = iSelectS) then
- Action := SelectsS[Interactions[nBut].Num].OnClick((X / Screen.w) * RenderW, (Y / Screen.h) * RenderH)
+ Action := SelectsS[Interactions[nBut].Num].OnClick(X, Y)
else
Action := maReturn;
end
@@ -1696,10 +1702,6 @@ end;
function TMenu.InRegion(X, Y: real; A: TMouseOverRect): boolean;
begin
- // transfer mousecords to the 800x600 raster we use to draw
- X := (X / Screen.w) * RenderW;
- Y := (Y / Screen.h) * RenderH;
-
// check whether A contains X and Y
Result := (X >= A.X) and (X <= A.X + A.W) and (Y >= A.Y) and (Y <= A.Y + A.H);
end;