4
{$modeswitch objectivec1}
13
{ NSLCLDebugExtension }
15
NSLCLDebugExtension = objccategory(NSObject)
16
function lclClassName: shortstring; message 'lclClassName';
20
NSNullRect : NSRect = (origin:(x:0; y:0); size:(width:0; height:0));
22
function GetNSPoint(x,y: single): NSPoint; inline;
24
function GetCGRect(x1, y1, x2, y2: Integer): CGRect;
25
function CGRectToRect(const c: CGRect): TRect;
27
function GetNSRect(x, y, width, height: Integer): NSRect; inline;
28
function RectToNSRect(const r: TRect): NSRect;
30
procedure NSToLCLRect(const ns: NSRect; var lcl: TRect); overload;
31
procedure NSToLCLRect(const ns: NSRect; ParentHeight: Single; var lcl: TRect); overload;
33
procedure LCLToNSRect(const lcl: TRect; var ns: NSRect); overload;
34
procedure LCLToNSRect(const lcl: TRect; ParentHeight: Single; var ns: NSRect); overload;
36
function CreateParamsToNSRect(const params: TCreateParams): NSRect;
38
function NSStringUtf8(s: PChar): NSString;
39
function NSStringUtf8(const s: String): NSString;
40
function NSStringToString(ns: NSString): String;
42
function GetNSObjectView(obj: NSObject): NSView;
43
procedure AddViewToNSObject(ctrl: NSView; obj: NSObject);
44
procedure AddViewToNSObject(ctrl: NSView; obj: NSObject; X,Y: integer);
46
procedure SetNSText(text: NSText; const s: String); inline;
47
function GetNSText(text: NSText): string; inline;
49
procedure SetNSControlValue(c: NSControl; const S: String); inline;
50
function GetNSControlValue(c: NSControl): String; inline;
55
DEFAULT_CFSTRING_ENCODING = kCFStringEncodingUTF8;
57
function CFStringToStr(AString: CFStringRef; Encoding: CFStringEncoding = DEFAULT_CFSTRING_ENCODING): String;
69
// Try the quick way first
70
Str := CFStringGetCStringPtr(AString, Encoding);
75
// if that doesn't work this will
76
StrRange.location := 0;
77
StrRange.length := CFStringGetLength(AString);
79
CFStringGetBytes(AString, StrRange, Encoding,
80
Ord('?'), False, nil, 0, StrSize);
81
SetLength(Result, StrSize);
84
CFStringGetBytes(AString, StrRange, Encoding,
85
Ord('?'), False, @Result[1], StrSize, StrSize);
89
function GetNSObjectView(obj: NSObject): NSView;
92
if not Assigned(obj) then Exit;
93
if obj.isKindOfClass_(NSView) then Result:=NSView(obj)
94
else if obj.isKindOfClass_(NSWindow) then Result:=NSWindow(obj).contentView;
97
procedure AddViewToNSObject(ctrl: NSView; obj: NSObject);
101
view:=GetNSObjectView(obj);
102
if not Assigned(view) then Exit;
103
view.addSubView(ctrl);
106
procedure AddViewToNSObject(ctrl: NSView; obj: NSObject; X,Y: integer);
108
AddViewToNSObject(ctrl, obj);
109
//SetViewFramePos(ctrl, x,y);
112
function GetNSPoint(x, y: single): NSPoint;
118
function GetNSRect(x, y, width, height: Integer): NSRect;
122
Result.size.width:=width;
123
Result.size.height:=height;
126
function GetCGRect(x1, y1, x2, y2: Integer): CGRect;
130
Result.size.width:=x2-x1;
131
Result.size.height:=y2-y1;
134
function CGRectToRect(const c:CGRect):TRect;
137
Left:=round(c.origin.x);
138
Top:=round(c.origin.y);
139
Right:=round(c.origin.x+c.size.width);
140
Bottom:=round(c.origin.y+c.size.height);
144
function RectToNSRect(const r: TRect): NSRect;
146
Result:=GetNSRect(r.Left,r.Top,r.Right-r.Left,r.Bottom-r.Top);
149
procedure NSToLCLRect(const ns: NSRect; var lcl: TRect);
151
lcl.Left:=round(ns.origin.x);
152
lcl.Top:=round(ns.origin.y);
153
lcl.Right:=round(ns.origin.x+ns.size.width);
154
lcl.Bottom:=round(ns.origin.y+ns.size.height);
157
procedure NSToLCLRect(const ns: NSRect; ParentHeight: Single; var lcl: TRect);
159
lcl.Left:=Round(ns.origin.x);
160
lcl.Top:=Round(ParentHeight-ns.size.height-ns.origin.y);
161
lcl.Right:=Round(ns.origin.x+ns.size.width);
162
lcl.Bottom:=Round(lcl.Top+ns.size.height);
165
procedure LCLToNSRect(const lcl: TRect; var ns: NSRect); overload;
167
ns.origin.x:=lcl.Left;
168
ns.origin.y:=lcl.Top;
169
ns.size.width:=lcl.Right-lcl.Left;
170
ns.size.height:=lcl.Bottom-lcl.Top;
173
procedure LCLToNSRect(const lcl: TRect; ParentHeight: Single; var ns: NSRect); overload;
175
ns.origin.x:=lcl.left;
176
ns.origin.y:=ParentHeight-(lcl.bottom-lcl.Top)-lcl.Top;
177
ns.size.width:=lcl.Right-lcl.Left;
178
ns.size.height:=lcl.Bottom-lcl.Top;
182
function CreateParamsToNSRect(const params: TCreateParams): NSRect;
184
with params do Result:=GetNSRect(X,Y,Width,Height);
187
function NSStringUtf8(s: PChar): NSString;
191
{NSString and CFStringRef are interchangable}
192
cf:=CFStringCreateWithCString(nil, S, kCFStringEncodingUTF8);
193
Result:=NSString(cf);
196
function NSStringUtf8(const s: String): NSString;
200
{NSString and CFStringRef are interchangable}
201
cf:=CFStringCreateWithCString(nil, Pointer(PChar(S)), kCFStringEncodingUTF8);
202
Result:=NSString(cf);
205
function NSStringToString(ns: NSString): String;
207
Result:=CFStringToStr(CFStringRef(ns));
210
procedure SetNSText(text: NSText; const s: String); inline;
214
if Assigned(text) then
222
function GetNSText(text: NSText): string; inline;
224
if Assigned(text) then
225
Result := NSStringToString(text.string_)
230
procedure SetNSControlValue(c: NSControl; const S: String); inline;
237
c.setStringValue(ns);
242
function GetNSControlValue(c: NSControl): String; inline;
245
Result:=NSStringToString(c.stringValue)
251
{ NSLCLDebugExtension }
253
function NSLCLDebugExtension.lclClassName: shortstring;
255
Result:=NSStringToString(self.className);