X-Git-Url: https://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=ui.mm;fp=ui.mm;h=c2a0c6f50ace0e0b495d7b0a1c6c8a6c5315089c;hp=0000000000000000000000000000000000000000;hb=d2a4cfcd292f5bc422a025d43855e5f4f21fb161;hpb=b472351f3c80cec8c7e9ec30cb4c113c947c0ff7 diff --git a/ui.mm b/ui.mm new file mode 100644 index 0000000..c2a0c6f --- /dev/null +++ b/ui.mm @@ -0,0 +1,50 @@ +#import +#import "ui.h" + +@interface Controller : NSObject +- (instancetype)initWithCallback:(void(*)(int, float))callback; +- (void)sliderMoved:(id)sender; + +@end + +@implementation Controller { + void (*weightChanged)(int, float); +} + +- (instancetype)initWithCallback:(void(*)(int, float))callback { + if (self = [super init]) { + self->weightChanged = callback; + } + return self; +} + +- (void)sliderMoved:(id)sender { + NSSlider *slider = (NSSlider*)sender; + weightChanged([slider tag], [slider floatValue]); +} +@end + +void createControlWindow(size_t numBlendshapes, const char **names, void(*weightChanged)(int, float)) { + Controller *controller = [[Controller alloc] initWithCallback: weightChanged]; + + NSWindowStyleMask mask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable | NSWindowStyleMaskUtilityWindow; + NSWindow *window = [[NSPanel alloc] initWithContentRect: NSMakeRect(20, 20, 340, 420) + styleMask:mask backing:NSBackingStoreBuffered defer:NO]; + [window makeKeyAndOrderFront: nil]; + [window setTitle: @"Blendshapes"]; + + NSMutableArray *sliders = [NSMutableArray arrayWithCapacity: numBlendshapes]; + + for (int i = 0; i < numBlendshapes; i++) { + NSSlider *slider = [NSSlider sliderWithTarget: controller action:@selector(sliderMoved:)]; + [slider setTag: i]; + NSTextField *label = [NSTextField labelWithString: [NSString stringWithUTF8String: names[i]]]; + NSStackView *stackView = [NSStackView stackViewWithViews: @[label, slider]]; + sliders[i] = stackView; + } + + NSStackView *stackView = [NSStackView stackViewWithViews: sliders]; + [stackView setOrientation: NSUserInterfaceLayoutOrientationVertical]; + [stackView setEdgeInsets: NSEdgeInsetsMake(16, 16, 16, 16)]; + [window setContentView: stackView]; +}