lazarus/lcl/interfaces/customdrawn/customdrawnwsforms_cocoa.inc

181 lines
5.5 KiB
PHP

{$MainUnit customdrawnwsforms.pp}
{ TCDWSCustomForm }
class function TCDWSCustomForm.DoCreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): TLCLIntfHandle;
var
win : TCocoaForm;
winhandle: TCocoaWindow;
cnt : TCocoaCustomControl;
ns : NSString;
lRect: NSRect;
begin
win := TCocoaForm(TCocoaForm.alloc);
if not Assigned(win) then
begin
Result:=0;
Exit;
end;
winhandle := TCocoaWindow.Create;
winhandle.LCLForm := TCustomForm(AWinControl);
if Application.ApplicationType = atMobileEmulator then lRect := GetNSRect(200, 200, 240, 320)
// else ToDo: for atPDA make it fullscreen
else lRect := CreateParamsToNSRect(AParams);
win:=TCocoaForm(win.initWithContentRect_styleMask_backing_defer(
lRect, CalcNSWindowStyle(AWinControl, AParams), NSBackingStoreBuffered, False));
win.WindowHandle := winhandle;
win.setDelegate(win);
ns:=NSStringUtf8(AWinControl.Caption);
win.setTitle(ns);
ns.release;
win.setAcceptsMouseMovedEvents(True);
cnt:=TCocoaCustomControl.alloc.init;
cnt.WindowHandle := winhandle;
win.setContentView(cnt);
winhandle.CocoaForm := win;
winhandle.ClientArea := cnt;
Result := TLCLIntfHandle(winhandle);
end;
class procedure TCDWSCustomForm.DoShowHide(const AWinControl: TWinControl);
var
win: TCocoaWindow;
begin
win := TCocoaWindow(AWinControl.Handle);
if not Assigned(win) then Exit;
if AWinControl.Visible then
win.CocoaForm.orderFrontRegardless
else
win.CocoaForm.orderOut(nil);
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;
begin
if LCLIntf.IsMobilePlatform() then
begin
Result := TLCLIntfhandle(AddNewForm(TCustomForm(AWinControl)));
if AWinControl = Application.MainForm then
CDWidgetset.MobileMainForm := DoCreateHandle(AWinControl, AParams);
end
else
Result := DoCreateHandle(AWinControl, AParams);
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).CocoaForm.lclSetClientFrame(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);
begin
DoShowHide(AWinControl);
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.CocoaForm.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.CocoaForm.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.CocoaForm.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).CocoaForm.lclClientFrame;
//WriteLn(Format('[TCDWSCustomForm.GetClientBounds x=%d y=%d w=%d h=%d',
// [ARect.Left, ARect.Top, ARect.Right-ARect.Left, ARect.Bottom-ARect.Top]));
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).CocoaForm.lclClientFrame;
x:=0;y:=0;
TCocoaWindow(AWinControl.Handle).CocoaForm.lclLocalToScreen(x,y);
MoveRect(ARect, x,y);
//WriteLn(Format('[TCDWSCustomForm.GetClientRect x=%d y=%d w=%d h=%d',
// [ARect.Left, ARect.Top, ARect.Right-ARect.Left, ARect.Bottom-ARect.Top]));
end;