mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 04:58:11 +02:00
Cocoa: new utils for Multi Display applied
This commit is contained in:
parent
27fd42670e
commit
e3a53a2a42
@ -1144,7 +1144,7 @@ begin
|
||||
params.isFirstCall:= not hasMarkedText();
|
||||
|
||||
rect:= imeHandler.IMEGetTextBound( params );
|
||||
LCLToNSRect( rect, NSGlobalScreenHeight, Result );
|
||||
LCLToNSRect( rect, NSGlobalScreenBottom, Result );
|
||||
end;
|
||||
|
||||
procedure TCocoaFullControlEdit.unmarkText;
|
||||
|
@ -1074,7 +1074,7 @@ begin
|
||||
|
||||
contentView := TCocoaWindowContent(Handle);
|
||||
if (not contentView.isembedded) and Assigned(contentView.window) then
|
||||
NSToLCLRect(contentView.window.frame, NSGlobalScreenHeight, ARect)
|
||||
ARect := ScreenRectFromNSToLCL( contentView.window.frame )
|
||||
else
|
||||
ARect := contentView.lclFrame;
|
||||
Result := 1;
|
||||
@ -1138,19 +1138,13 @@ end;
|
||||
|
||||
function TCocoaWidgetSet.GetCursorPos(var lpPoint: TPoint ): Boolean;
|
||||
begin
|
||||
with NSEvent.mouseLocation do
|
||||
begin
|
||||
lpPoint.x := Round(x);
|
||||
// cocoa returns cursor with inverted y coordinate
|
||||
lpPoint.y := Round(NSGlobalScreenHeight-y);
|
||||
end;
|
||||
lpPoint:= ScreenPointFromNSToLCL( NSEvent.mouseLocation );
|
||||
//debugln('GetCursorPos='+DbgS(lpPoint));
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function TCocoaWidgetSet.GetMonitorInfo(hMonitor: HMONITOR; lpmi: PMonitorInfo): Boolean;
|
||||
var
|
||||
globalScreenHeight: CGFloat;
|
||||
ScreenID: NSScreen;
|
||||
begin
|
||||
Result := (lpmi <> nil) and (lpmi^.cbSize >= SizeOf(TMonitorInfo));
|
||||
@ -1159,9 +1153,8 @@ begin
|
||||
Result := Assigned(ScreenID);
|
||||
if not Result then Exit;
|
||||
|
||||
globalScreenHeight := NSGlobalScreenHeight;
|
||||
NSToLCLRect(ScreenID.frame, globalScreenHeight, lpmi^.rcMonitor);
|
||||
NSToLCLRect(ScreenID.visibleFrame, globalScreenHeight, lpmi^.rcWork);
|
||||
lpmi^.rcMonitor:= ScreenRectFromNSToLCL( ScreenID.frame );
|
||||
lpmi^.rcWork:= ScreenRectFromNSToLCL( ScreenID.visibleFrame );
|
||||
// according to the documentation the primary (0,0 coord screen)
|
||||
// is always and index 0
|
||||
if HMonitorToIndex(hMonitor) = 0 then
|
||||
@ -1477,7 +1470,7 @@ begin
|
||||
Exit;
|
||||
|
||||
p.x:=Point.X;
|
||||
p.y:=NSGlobalScreenHeight-Point.Y;
|
||||
p.y:=NSGlobalScreenBottom-Point.Y;
|
||||
window := GetCocoaWindowAtPos(p);
|
||||
if Assigned(window) then
|
||||
Result:= HWND(window.contentView);
|
||||
@ -1876,7 +1869,7 @@ var
|
||||
i: Integer;
|
||||
begin
|
||||
Result:= 0;
|
||||
point:= LCLToNSPoint( ptScreenCoords, NSGlobalScreenHeight );
|
||||
point:= ScreenPointFromLCLToNS( ptScreenCoords );
|
||||
if point.y>=1 then // NSPointInRect is (upper,left) inside
|
||||
point.y:= point.y-1; // (lower,right) outside
|
||||
|
||||
|
@ -446,7 +446,7 @@ begin
|
||||
if not isembedded then
|
||||
begin
|
||||
//Window bounds should return "client rect" in screen coordinates
|
||||
NSToLCLRect(window.frame, NSGlobalScreenHeight, wfrm);
|
||||
wfrm := ScreenRectFromNSToLCL(window.frame);
|
||||
Types.OffsetRect(Result, -Result.Left+wfrm.Left, -Result.Top+wfrm.Top);
|
||||
end;
|
||||
end;
|
||||
@ -1250,7 +1250,7 @@ var
|
||||
begin
|
||||
f := frame;
|
||||
inc(X, Round(f.origin.x));
|
||||
inc(Y, Round(NSGlobalScreenHeight - NSMaxY(f)));
|
||||
inc(Y, Round(NSGlobalScreenBottom - NSMaxY(f)));
|
||||
end;
|
||||
|
||||
procedure LCLWindowExtension.lclScreenToLocal(var X, Y: Integer);
|
||||
@ -1259,15 +1259,15 @@ var
|
||||
begin
|
||||
f := frame;
|
||||
dec(X, Round(f.origin.x));
|
||||
dec(Y, Round(NSGlobalScreenHeight - NSMaxY(f)));
|
||||
dec(Y, Round(NSGlobalScreenBottom - NSMaxY(f)));
|
||||
end;
|
||||
|
||||
function LCLWindowExtension.lclFrame: TRect;
|
||||
begin
|
||||
if Assigned(contentView) then
|
||||
Result:=contentView.lclFrame
|
||||
Result:= contentView.lclFrame
|
||||
else
|
||||
NSToLCLRect(frame, NSGlobalScreenHeight, Result);
|
||||
Result:= ScreenRectFromNSToLCL( frame );
|
||||
end;
|
||||
|
||||
function LCLWindowExtension.lclGetTopBarHeight:integer;
|
||||
@ -1288,12 +1288,12 @@ var
|
||||
ns : NSRect;
|
||||
h : integer;
|
||||
begin
|
||||
LCLToNSRect(r, NSGlobalScreenHeight, ns);
|
||||
ns:= ScreenRectFromLCLToNS( r );
|
||||
|
||||
// add topbar height
|
||||
h:=lclGetTopBarHeight;
|
||||
ns.size.height:=ns.size.height+h;
|
||||
ns.origin.y:=ns.origin.y-h;
|
||||
h:= lclGetTopBarHeight;
|
||||
ns.size.height:= ns.size.height + h;
|
||||
ns.origin.y:= ns.origin.y - h;
|
||||
{$ifdef BOOLFIX}
|
||||
setFrame_display_(ns, Ord(isVisible));
|
||||
{$else}
|
||||
|
@ -536,8 +536,8 @@ begin
|
||||
if lWindow <> nil then
|
||||
begin
|
||||
f := lWindow.frame;
|
||||
Point.x := Point.x+f.origin.x;
|
||||
Point.y := lWindow.screen.frame.size.height- f.origin.y - Point.y;
|
||||
Point.x := Point.x + f.origin.x;
|
||||
Point.y := NSGlobalScreenBottom - ( Point.y + f.origin.y );
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -963,7 +963,7 @@ begin
|
||||
point:= TPoint.Create( x, y );
|
||||
screen:= getScreenFromHMonitor( CocoaWidgetSet.MonitorFromPoint(point, MONITOR_DEFAULTTONULL) );
|
||||
|
||||
mouseY:= NSGlobalScreenHeight - y;
|
||||
mouseY:= NSGlobalScreenBottom - y;
|
||||
if Assigned(screen) then begin
|
||||
menuY:= screen.visibleFrame.origin.y + menu.size.height + 1;
|
||||
menuY:= max( mouseY, MenuY );
|
||||
|
Loading…
Reference in New Issue
Block a user