32const auto nsViewFrameChangedSelector = @selector (frameChanged:);
35struct NSViewCallbackInterface
37 virtual ~NSViewCallbackInterface() =
default;
38 virtual void frameChanged() = 0;
42struct NSViewFrameChangeCallbackClass :
public ObjCClass<NSObject>
44 NSViewFrameChangeCallbackClass()
45 : ObjCClass (
"JUCE_NSViewCallback_")
47 addIvar<NSViewCallbackInterface*> (
"target");
49 addMethod (nsViewFrameChangedSelector, frameChanged);
54 static void setTarget (
id self, NSViewCallbackInterface*
c)
56 object_setInstanceVariable (self,
"target",
c);
60 static void frameChanged (
id self,
SEL, NSNotification*)
62 if (
auto* target = getIvar<NSViewCallbackInterface*> (self,
"target"))
63 target->frameChanged();
70class NSViewFrameWatcher :
private NSViewCallbackInterface
73 NSViewFrameWatcher (NSView* viewToWatch, std::function<
void()> viewResizedIn)
74 : viewResized (std::
move (viewResizedIn)),
callback (makeCallbackForView (viewToWatch))
78 ~NSViewFrameWatcher()
override
80 [[NSNotificationCenter defaultCenter] removeObserver:
callback];
89 id makeCallbackForView (NSView* view)
91 static NSViewFrameChangeCallbackClass cls;
93 NSViewFrameChangeCallbackClass::setTarget (
result,
this);
95 [[NSNotificationCenter defaultCenter] addObserver:
result
96 selector: nsViewFrameChangedSelector
97 name: NSViewFrameDidChangeNotification
103 void frameChanged()
override { viewResized(); }
105 std::function<
void()> viewResized;
static const char * name
Definition pugl.h:1582
void * object
Definition jmemsys.h:50
#define JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE(...)
Definition juce_CompilerWarnings.h:181
#define JUCE_END_IGNORE_WARNINGS_GCC_LIKE
Definition juce_CompilerWarnings.h:182
void move(void *from, void *to)
Definition juce_FixedSizeFunction.h:53
Definition carla_juce.cpp:31
RECT const char void(* callback)(const char *droppath))) SWELL_API_DEFINE(BOOL
Definition swell-functions.h:1004
return c
Definition crypt.c:175
int result
Definition process.c:1455
#define void
Definition unzip.h:396
#define const
Definition zconf.h:137