29 #ifndef JUCE_OSX_OBJCHELPERS_H_INCLUDED 30 #define JUCE_OSX_OBJCHELPERS_H_INCLUDED 39 static inline String nsStringToJuce (NSString* s)
44 static inline NSString* juceStringToNS (
const String& s)
46 return [NSString stringWithUTF8String: s.
toUTF8()];
49 static inline NSString* nsStringLiteral (
const char*
const s)
noexcept 51 return [NSString stringWithUTF8String: s];
54 static inline NSString* nsEmptyString()
noexcept 56 return [NSString string];
60 template <
typename RectangleType>
61 static NSRect makeNSRect (
const RectangleType& r)
noexcept 63 return NSMakeRect (static_cast <CGFloat> (r.getX()),
64 static_cast <CGFloat> (r.getY()),
65 static_cast <CGFloat> (r.getWidth()),
66 static_cast <CGFloat> (r.getHeight()));
70 typedef id (*MsgSendSuperFn) (
struct objc_super*, SEL, ...);
71 static inline MsgSendSuperFn getMsgSendSuperFn()
noexcept {
return (MsgSendSuperFn) (
void*) objc_msgSendSuper; }
74 typedef double (*MsgSendFPRetFn) (id,
SEL op, ...);
75 static inline MsgSendFPRetFn getMsgSendFPRetFn()
noexcept {
return (MsgSendFPRetFn) (
void*) objc_msgSend_fpret; }
81 template <
typename ObjectType>
91 template <
typename Super
classType>
95 : cls (objc_allocateClassPair ([SuperclassType class], getRandomisedName (nameRoot).toUTF8(), 0))
101 objc_disposeClassPair (cls);
106 objc_registerClassPair (cls);
111 return class_createInstance (cls, 0);
114 template <
typename Type>
117 BOOL b = class_addIvar (cls, name,
sizeof (Type), (uint8_t) rint (log2 (
sizeof (Type))), @encode (Type));
121 template <
typename FunctionType>
122 void addMethod (
SEL selector, FunctionType callbackFn,
const char* signature)
124 BOOL b = class_addMethod (cls, selector, (IMP) callbackFn, signature);
128 template <
typename FunctionType>
129 void addMethod (
SEL selector, FunctionType callbackFn,
const char* sig1,
const char* sig2)
131 addMethod (selector, callbackFn, (
String (sig1) + sig2).toUTF8());
134 template <
typename FunctionType>
135 void addMethod (
SEL selector, FunctionType callbackFn,
const char* sig1,
const char* sig2,
const char* sig3)
137 addMethod (selector, callbackFn, (
String (sig1) + sig2 + sig3).toUTF8());
140 template <
typename FunctionType>
141 void addMethod (
SEL selector, FunctionType callbackFn,
const char* sig1,
const char* sig2,
const char* sig3,
const char* sig4)
143 addMethod (selector, callbackFn, (
String (sig1) + sig2 + sig3 + sig4).toUTF8());
148 BOOL b = class_addProtocol (cls, protocol);
153 static id sendSuperclassMessage (
id self,
SEL selector)
155 objc_super s = {
self, [SuperclassType
class] };
156 return getMsgSendSuperFn() (&s, selector);
160 template <
typename Type>
161 static Type
getIvar (
id self,
const char* name)
164 object_getInstanceVariable (
self, name, &v);
165 return static_cast <Type> (v);
171 static String getRandomisedName (
const char* root)
180 #endif // JUCE_OSX_OBJCHELPERS_H_INCLUDED static String toHexString(int number)
Definition: juce_String.cpp:1925
NSObjectRetainer(ObjectType *o)
Definition: juce_osx_ObjCHelpers.h:84
#define noexcept
Definition: juce_CompilerSupport.h:141
SuperclassType * createInstance() const
Definition: juce_osx_ObjCHelpers.h:109
void addProtocol(Protocol *protocol)
Definition: juce_osx_ObjCHelpers.h:146
Definition: juce_CharPointer_UTF8.h:38
Definition: juce_String.h:43
long b
Definition: jpegint.h:371
Class cls
Definition: juce_osx_ObjCHelpers.h:168
GESTUREINFO *typedef BOOL(WINAPI *SetProcessDPIAwareFunc)()
Definition: juce_win32_Windowing.cpp:126
ObjCClass(const char *nameRoot)
Definition: juce_osx_ObjCHelpers.h:94
~NSObjectRetainer()
Definition: juce_osx_ObjCHelpers.h:85
static Type getIvar(id self, const char *name)
Definition: juce_osx_ObjCHelpers.h:161
Definition: juce_osx_ObjCHelpers.h:82
Definition: juce_osx_ObjCHelpers.h:92
ObjectType * object
Definition: juce_osx_ObjCHelpers.h:87
void addMethod(SEL selector, FunctionType callbackFn, const char *sig1, const char *sig2)
Definition: juce_osx_ObjCHelpers.h:129
void
Definition: juce_PNGLoader.cpp:1173
void addMethod(SEL selector, FunctionType callbackFn, const char *signature)
Definition: juce_osx_ObjCHelpers.h:122
void registerClass()
Definition: juce_osx_ObjCHelpers.h:104
static Random & getSystemRandom() noexcept
Definition: juce_core.cpp:65
void addMethod(SEL selector, FunctionType callbackFn, const char *sig1, const char *sig2, const char *sig3)
Definition: juce_osx_ObjCHelpers.h:135
void addMethod(SEL selector, FunctionType callbackFn, const char *sig1, const char *sig2, const char *sig3, const char *sig4)
Definition: juce_osx_ObjCHelpers.h:141
~ObjCClass()
Definition: juce_osx_ObjCHelpers.h:99
void addIvar(const char *name)
Definition: juce_osx_ObjCHelpers.h:115
CharPointer_UTF8 toUTF8() const
Definition: juce_String.cpp:2057