Cocoa: #41309 fix the issue in TCocoaWSCustomForm for TCustomForm.PaintTo()

This commit is contained in:
rich2014 2025-02-02 10:47:30 +08:00
parent ca349787a4
commit acc0276552

View File

@ -121,6 +121,7 @@ type
class procedure SetText(const AWinControl: TWinControl; const AText: String); override;
class procedure CloseModal(const ACustomForm: TCustomForm); override;
class procedure PaintTo(const AWinControl: TWinControl; ADC: HDC; X, Y: Integer); override;
class procedure ShowModal(const ACustomForm: TCustomForm); override;
class procedure SetModalResult(const ACustomForm: TCustomForm; ANewValue: TModalResult); override;
@ -1061,6 +1062,39 @@ begin
CocoaWidgetSet.EndModal(NSView(ACustomForm.Handle).window);
end;
function createWindowImageRep(win: NSWindow): NSBitmapImageRep;
var
rect: NSRect;
imageRef: CGImageRef;
begin
rect:= win.contentRectForFrameRect( win.frame );
rect:= RectToNSRect( ScreenRectFromNSToLCL(rect) );
imageRef:= CGWindowListCreateImage(
rect,
kCGWindowListOptionIncludingWindow,
win.windowNumber,
kCGWindowImageDefault );
Result:= NSBitmapImageRep.alloc.initWithCGImage( imageRef );
CGImageRelease( imageRef );
end;
class procedure TCocoaWSCustomForm.PaintTo(const AWinControl: TWinControl; ADC: HDC; X, Y: Integer);
var
bc : TCocoaBitmapContext;
win: NSWindow;
imageRep: NSBitmapImageRep;
begin
if not (TObject(ADC) is TCocoaBitmapContext) then Exit;
bc := TCocoaBitmapContext(ADC);
win:= NSView(AWinControl.Handle).window;
imageRep:= createWindowImageRep(win);
bc.DrawImageRep(
NSMakeRect(0,0, bc.size.Width, bc.size.Height),
NSMakeRect(0,0, imageRep.size.width, imageRep.size.height),
imageRep );
imageRep.release;
end;
class procedure TCocoaWSCustomForm.ShowModal(const ACustomForm: TCustomForm);
var
lWinContent: TCocoaWindowContent;