Browse Source

Tidied up some macOS ObjC conversion methods

tags/2021-05-28
hogliux 7 years ago
parent
commit
7d056e2670
2 changed files with 19 additions and 40 deletions
  1. +17
    -38
      modules/juce_core/native/juce_osx_ObjCHelpers.h
  2. +2
    -2
      modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm

+ 17
- 38
modules/juce_core/native/juce_osx_ObjCHelpers.h View File

@@ -145,29 +145,14 @@ static NSArray* varArrayToNSArray (const var& varToParse)
return array;
}
static var nsArrayToVar (NSArray* array);
static var nsObjectToVar (NSObject* array);
static var nsDictionaryToVar (NSDictionary* dictionary)
{
DynamicObject::Ptr dynamicObject = new DynamicObject();
for (NSString* key in dictionary)
{
const auto keyString = nsStringToJuce (key);
id value = dictionary[key];
if ([value isKindOfClass: [NSString class]])
dynamicObject->setProperty (keyString, nsStringToJuce ((NSString*) value));
else if ([value isKindOfClass: [NSNumber class]])
dynamicObject->setProperty (keyString, nsStringToJuce ([(NSNumber*) value stringValue]));
else if ([value isKindOfClass: [NSDictionary class]])
dynamicObject->setProperty (keyString, nsDictionaryToVar ((NSDictionary*) value));
else if ([value isKindOfClass: [NSArray class]])
dynamicObject->setProperty (keyString, nsArrayToVar ((NSArray*) value));
else
jassertfalse; // Unsupported yet, add here!
}
dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar (dictionary[key]));
return var (dynamicObject.get());
}
@@ -177,20 +162,24 @@ static var nsArrayToVar (NSArray* array)
Array<var> resultArray;
for (id value in array)
resultArray.add (nsObjectToVar (value));
return var (resultArray);
}
static var nsObjectToVar (NSObject* obj)
{
if ([obj isKindOfClass: [NSString class]]) return nsStringToJuce ((NSString*) obj);
else if ([obj isKindOfClass: [NSNumber class]]) return nsStringToJuce ([(NSNumber*) obj stringValue]);
else if ([obj isKindOfClass: [NSDictionary class]]) return nsDictionaryToVar ((NSDictionary*) obj);
else if ([obj isKindOfClass: [NSArray class]]) return nsArrayToVar ((NSArray*) obj);
else
{
if ([value isKindOfClass: [NSString class]])
resultArray.add (var (nsStringToJuce ((NSString*) value)));
else if ([value isKindOfClass: [NSNumber class]])
resultArray.add (var (nsStringToJuce ([(NSNumber*) value stringValue])));
else if ([value isKindOfClass: [NSDictionary class]])
resultArray.add (nsDictionaryToVar ((NSDictionary*) value));
else if ([value isKindOfClass: [NSArray class]])
resultArray.add (nsArrayToVar ((NSArray*) value));
else
jassertfalse; // Unsupported yet, add here!
// Unsupported yet, add here!
jassertfalse;
}
return var (resultArray);
return {};
}
#if JUCE_MAC
@@ -226,16 +215,6 @@ static inline MsgSendFPRetFn getMsgSendFPRetFn() noexcept { return (MsgSendFPR
#endif
#endif
//==============================================================================
template <typename ObjectType>
struct NSObjectRetainer
{
inline NSObjectRetainer (ObjectType* o) : object (o) { [object retain]; }
inline ~NSObjectRetainer() { [object release]; }
ObjectType* object;
};
//==============================================================================
struct NSObjectDeleter
{


+ 2
- 2
modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm View File

@@ -780,7 +780,7 @@ public:
{
// (need to retain this in case a modal loop runs in handleKeyEvent and
// our event object gets lost)
const NSObjectRetainer<NSEvent> r (ev);
const std::unique_ptr<NSEvent, NSObjectDeleter> r ([ev retain]);
updateKeysDown (ev, true);
bool used = handleKeyEvent (ev, true);
@@ -810,7 +810,7 @@ public:
void redirectModKeyChange (NSEvent* ev)
{
// (need to retain this in case a modal loop runs and our event object gets lost)
const NSObjectRetainer<NSEvent> r (ev);
const std::unique_ptr<NSEvent, NSObjectDeleter> r ([ev retain]);
keysCurrentlyDown.clear();
handleKeyUpOrDown (true);


Loading…
Cancel
Save