1 #import <Cocoa/Cocoa.h>
4 @interface Controller : NSObject
5 - (instancetype)initWithCallback:(void(*)(int, float))callback;
6 - (void)sliderMoved:(id)sender;
10 @implementation Controller {
11 void (*weightChanged)(int, float);
14 - (instancetype)initWithCallback:(void(*)(int, float))callback {
15 if (self = [super init]) {
16 self->weightChanged = callback;
21 - (void)sliderMoved:(id)sender {
22 NSSlider *slider = (NSSlider*)sender;
23 weightChanged([slider tag], [slider floatValue]);
27 void createControlWindow(size_t numBlendshapes, const char **names, void(*weightChanged)(int, float)) {
28 Controller *controller = [[Controller alloc] initWithCallback: weightChanged];
30 NSWindowStyleMask mask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable | NSWindowStyleMaskUtilityWindow;
31 NSWindow *window = [[NSPanel alloc] initWithContentRect: NSMakeRect(20, 20, 340, 420)
32 styleMask:mask backing:NSBackingStoreBuffered defer:NO];
33 [window makeKeyAndOrderFront: nil];
34 [window setTitle: @"Blendshapes"];
36 NSMutableArray<NSView *> *sliders = [NSMutableArray arrayWithCapacity: numBlendshapes];
38 for (int i = 0; i < numBlendshapes; i++) {
39 NSSlider *slider = [NSSlider sliderWithTarget: controller action:@selector(sliderMoved:)];
41 NSTextField *label = [NSTextField labelWithString: [NSString stringWithUTF8String: names[i]]];
42 NSStackView *stackView = [NSStackView stackViewWithViews: @[label, slider]];
43 sliders[i] = stackView;
46 NSStackView *stackView = [NSStackView stackViewWithViews: sliders];
47 [stackView setOrientation: NSUserInterfaceLayoutOrientationVertical];
48 [stackView setEdgeInsets: NSEdgeInsetsMake(16, 16, 16, 16)];
49 [window setContentView: stackView];