mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-06 08:58:19 +02:00
159 lines
5.3 KiB
ObjectPascal
159 lines
5.3 KiB
ObjectPascal
{
|
|
/***************************************************************************
|
|
CocoaInt.pas - CocoaInterface Object
|
|
----------------------------------------
|
|
|
|
Initial Revision : Mon August 6th CST 2004
|
|
|
|
|
|
***************************************************************************/
|
|
|
|
*****************************************************************************
|
|
* *
|
|
* This file is part of the Lazarus Component Library (LCL) *
|
|
* *
|
|
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
|
|
* for details about the copyright. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
|
* *
|
|
*****************************************************************************
|
|
}
|
|
|
|
unit CocoaInt;
|
|
|
|
{$mode objfpc}{$H+}
|
|
{$modeswitch objectivec1}
|
|
{$modeswitch objectivec2}
|
|
|
|
interface
|
|
|
|
uses
|
|
// rtl+ftl
|
|
Types, Classes, SysUtils, Math,
|
|
// carbon bindings
|
|
MacOSAll,
|
|
// interfacebase
|
|
InterfaceBase, GraphType,
|
|
// private
|
|
CocoaAll, CocoaPrivate, CocoaUtils, CocoaGDIObjects,
|
|
CocoaProc,
|
|
// LCL
|
|
LCLStrConsts, LMessages, LCLMessageGlue, LCLProc, LCLIntf, LCLType,
|
|
Controls, Forms,
|
|
IntfGraphics, Graphics, CocoaWSFactory;
|
|
|
|
type
|
|
|
|
{ TCocoaTimerObject }
|
|
|
|
TCocoaTimerObject = objcclass(NSObject)
|
|
func: TWSTimerProc;
|
|
procedure timerEvent; message 'timerEvent';
|
|
class function initWithFunc(afunc: TWSTimerProc): TCocoaTimerObject; message 'initWithFunc:';
|
|
end;
|
|
|
|
{ TCocoaAppDelegate }
|
|
|
|
TCocoaAppDelegate = objcclass(NSObject, NSApplicationDelegateProtocol)
|
|
function applicationShouldTerminate(sender: NSApplication): NSApplicationTerminateReply; message 'applicationShouldTerminate:';
|
|
end;
|
|
|
|
{ TCocoaWidgetSet }
|
|
|
|
TCocoaWidgetSet = class(TWidgetSet)
|
|
private
|
|
FTerminating: Boolean;
|
|
|
|
pool: NSAutoreleasePool;
|
|
FNSApp: NSApplication;
|
|
delegate: TCocoaAppDelegate;
|
|
protected
|
|
FStockNullBrush: HBRUSH;
|
|
FStockBlackBrush: HBRUSH;
|
|
FStockLtGrayBrush: HBRUSH;
|
|
FStockGrayBrush: HBRUSH;
|
|
FStockDkGrayBrush: HBRUSH;
|
|
FStockWhiteBrush: HBRUSH;
|
|
|
|
FStockNullPen: HPEN;
|
|
FStockBlackPen: HPEN;
|
|
FStockWhitePen: HPEN;
|
|
FStockSystemFont: HFONT;
|
|
FStockFixedFont: HFONT;
|
|
|
|
FSysColorBrushes: array[0..MAX_SYS_COLORS] of HBrush;
|
|
|
|
function GetAppHandle: THandle; override;
|
|
public
|
|
constructor Create; override;
|
|
destructor Destroy; override;
|
|
|
|
function LCLPlatform: TLCLPlatform; override;
|
|
|
|
procedure AppInit(var ScreenInfo: TScreenInfo); override;
|
|
procedure AppRun(const ALoop: TApplicationMainLoop); override;
|
|
procedure AppWaitMessage; override;
|
|
procedure AppProcessMessages; override;
|
|
procedure AppTerminate; override;
|
|
procedure AppMinimize; override;
|
|
procedure AppRestore; override;
|
|
procedure AppBringToFront; override;
|
|
procedure AppSetIcon(const Small, Big: HICON); override;
|
|
procedure AppSetTitle(const ATitle: string); override;
|
|
|
|
function GetLCLCapability(ACapability: TLCLCapability): PtrUInt; override;
|
|
|
|
function CreateTimer(Interval: integer; TimerFunc: TWSTimerProc): THandle; override;
|
|
function DestroyTimer(TimerHandle: THandle): boolean; override;
|
|
function PrepareUserEventInfo(Handle: HWND; Msg: Cardinal; wParam: WParam; lParam: LParam): NSMutableDictionary;
|
|
function PrepareUserEvent(Handle: HWND; Info: NSDictionary): NSEvent;
|
|
|
|
procedure InitStockItems;
|
|
procedure FreeStockItems;
|
|
procedure FreeSysColorBrushes;
|
|
|
|
{todo:}
|
|
function DCGetPixel(CanvasHandle: HDC; X, Y: integer): TGraphicsColor; override;
|
|
procedure DCSetPixel(CanvasHandle: HDC; X, Y: integer; AColor: TGraphicsColor); override;
|
|
procedure DCRedraw(CanvasHandle: HDC); override;
|
|
procedure DCSetAntialiasing(CanvasHandle: HDC; AEnabled: Boolean); override;
|
|
procedure SetDesigning(AComponent: TComponent); override;
|
|
|
|
function RawImage_DescriptionFromCocoaBitmap(out ADesc: TRawImageDescription; ABitmap: TCocoaBitmap): Boolean;
|
|
function RawImage_FromCocoaBitmap(out ARawImage: TRawImage; ABitmap, AMask: TCocoaBitmap; ARect: PRect = nil): Boolean;
|
|
function RawImage_DescriptionToBitmapType(ADesc: TRawImageDescription; out bmpType: TCocoaBitmapType): Boolean;
|
|
function GetImagePixelData(AImage: CGImageRef; out bitmapByteCount: PtrUInt): Pointer;
|
|
property NSApp: NSApplication read FNSApp;
|
|
// the winapi compatibility methods
|
|
{$I cocoawinapih.inc}
|
|
// the extra LCL interface methods
|
|
{$I cocoalclintfh.inc}
|
|
end;
|
|
|
|
var
|
|
CocoaWidgetSet: TCocoaWidgetSet;
|
|
|
|
implementation
|
|
|
|
uses
|
|
CocoaCaret;
|
|
|
|
// the implementation of the utility methods
|
|
{$I cocoaobject.inc}
|
|
// the implementation of the winapi compatibility methods
|
|
{$I cocoawinapi.inc}
|
|
// the implementation of the extra LCL interface methods
|
|
{$I cocoalclintf.inc}
|
|
|
|
initialization
|
|
// {$I Cocoaimages.lrs}
|
|
InternalInit;
|
|
|
|
finalization
|
|
InternalFinal;
|
|
|
|
end.
|