lazarus/lcl/interfaces/customdrawn/customdrawnwsforms_cocoa.inc

170 lines
5.0 KiB
PHP

{$MainUnit customdrawnwsforms.pp}
{ TCDWSCustomForm }
class procedure TCDWSCustomForm.BackendAddCDWinControlToForm(const AForm: TCustomForm; ACDWinControl: TCDWinControl);
var
lwin: TCocoaWindow;
begin
lwin := TCocoaWindow(AForm.Handle);
if lwin.Children = nil then lwin.Children := TFPList.Create;
lwin.Children.Add(ACDWinControl);
end;
class function TCDWSCustomForm.BackendGetCDWinControlList(const AForm: TCustomForm): TFPList;
var
lwin: TCocoaWindow;
begin
lwin := TCocoaWindow(AForm.Handle);
if lwin.Children = nil then lwin.Children := TFPList.Create;
Result := lwin.Children;
end;
{------------------------------------------------------------------------------
Method: TCDWSCustomForm.CreateHandle
Params: AWinControl - LCL control
AParams - Creation parameters
Returns: Handle to the window in Cocoa interface
Creates new window in Cocoa interface with the specified parameters
------------------------------------------------------------------------------}
class function TCDWSCustomForm.CreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): TLCLIntfHandle;
var
win : TCocoaWindow;
cnt : TCocoaCustomControl;
ns : NSString;
const
WinMask = NSTitledWindowMask or NSClosableWindowMask or NSMiniaturizableWindowMask or NSResizableWindowMask;
begin
win := TCocoaWindow(TCocoaWindow.alloc);
if not Assigned(win) then begin
Result:=0;
Exit;
end;
win:=TCocoaWindow(win.initWithContentRect_styleMask_backing_defer(CreateParamsToNSRect(AParams), WinMask, NSBackingStoreBuffered, False));
//TCocoaWindow(win).callback:=TLCLCommonCallback.Create(win, AWinControl);
//TCocoaWindow(win).wincallback:=TLCLWindowCallback.Create(win, AWinControl);
TCocoaWindow(win).LCLForm := TCustomForm(AWinControl);
win.setDelegate(win);
ns:=NSStringUtf8(AWinControl.Caption);
win.setTitle(ns);
ns.release;
win.setAcceptsMouseMovedEvents(True);
cnt:=TCocoaCustomControl.alloc.init;
cnt.LCLForm := TCustomForm(AWinControl);
win.setContentView(cnt);
Result := TLCLIntfHandle(win);
end;
class procedure TCDWSCustomForm.DestroyHandle(const AWinControl: TWinControl);
begin
end;
class procedure TCDWSCustomForm.SetBounds(const AWinControl: TWinControl;
const ALeft, ATop, AWidth, AHeight: Integer);
begin
if AWinControl.Handle=0 then Exit;
{todo: setFrame_display(, true)? }
//sf:=NSScreen.mainScreen.frame;
TCocoaWindow(AWinControl.Handle).lclSetFrame(Bounds(ALeft, ATop, AWidth, AHeight));
//LCLToCocoaRect( GetNSRect(ALeft,ATop,AWidth,AHeight), sf, wf);
//NSWindow(AWinControl.Handle).setFrame_display(wf, false);
//NSWindow(AWinControl.Handle).setFrame_display( GetNSRect(ALeft,ATop, AWidth, AHeight), false);
//NSWindow(AWinControl.Handle).setFrameTopLeftPoint( GetNSPoint(ALeft, ATop));
end;
class procedure TCDWSCustomForm.SetBorderIcons(const AForm: TCustomForm;
const ABorderIcons: TBorderIcons);
begin
end;
class procedure TCDWSCustomForm.SetFormBorderStyle(const AForm: TCustomForm;
const AFormBorderStyle: TFormBorderStyle);
begin
end;
class procedure TCDWSCustomForm.SetIcon(const AForm: TCustomForm; const Small, Big: HICON);
begin
end;
class procedure TCDWSCustomForm.SetShowInTaskbar(const AForm: TCustomForm; const AValue: TShowInTaskbar);
begin
end;
class procedure TCDWSCustomForm.ShowModal(const ACustomForm: TCustomForm);
begin
end;
class procedure TCDWSCustomForm.ShowHide(const AWinControl: TWinControl);
var
win : NSWindow;
begin
win:=NSWindow(AWinControl.Handle);
if not Assigned(win) then Exit;
if AWinControl.Visible then
win.orderFrontRegardless
else
win.orderOut(nil);
end;
class function TCDWSCustomForm.GetText(const AWinControl: TWinControl; var AText: String): Boolean;
var
win : TCocoaWindow;
begin
win:=TCocoaWindow(AWinControl.Handle);
Result:=Assigned(win);
if not Result then Exit;
AText:=NSStringToString(win.title);
Result:=true;
end;
class function TCDWSCustomForm.GetTextLen(const AWinControl: TWinControl; var ALength: Integer): Boolean;
var
win : TCocoaWindow;
begin
win:=TCocoaWindow(AWinControl.Handle);
Result:=Assigned(win);
if not Result then Exit;
ALength:=win.title.length;
end;
class procedure TCDWSCustomForm.SetText(const AWinControl: TWinControl; const AText: String);
var
win : TCocoaWindow;
ns : NSString;
begin
win:=TCocoaWindow(AWinControl.Handle);
if not Assigned(win) then Exit;
ns:=NSStringUtf8(AText);
win.setTitle(ns);
ns.release;
end;
class function TCDWSCustomForm.GetClientBounds(const AWinControl: TWinControl; var ARect: TRect): Boolean;
begin
Result:=AWinControl.Handle<>0;
if not Result then Exit;
ARect:= TCocoaWindow(AWinControl.Handle).lclClientFrame;
end;
class function TCDWSCustomForm.GetClientRect(const AWinControl: TWinControl; var ARect: TRect): Boolean;
var
x,y : Integer;
begin
Result:=AWinControl.Handle<>0;
if not Result then Exit;
ARect:= TCocoaWindow(AWinControl.Handle).lclClientFrame;
x:=0;y:=0;
TCocoaWindow(AWinControl.Handle).lclLocalToScreen(x,y);
MoveRect(ARect, x,y);
end;