
This commit temporarily disables tooltip functionality; it will be handled natively in a platform abstraction for windows using much simpler code.
75 lines
1.9 KiB
Plaintext
75 lines
1.9 KiB
Plaintext
//-----------------------------------------------------------------------------
|
|
// The Cocoa-based implementation of platform-dependent GUI functionality.
|
|
//
|
|
// Copyright 2018 whitequark
|
|
//-----------------------------------------------------------------------------
|
|
#import <AppKit/AppKit.h>
|
|
#include "solvespace.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Objective-C bridging
|
|
//-----------------------------------------------------------------------------
|
|
|
|
@interface SSFunction : NSObject
|
|
- (SSFunction *)initWithFunction:(std::function<void ()> *)aFunc;
|
|
- (void)run;
|
|
@end
|
|
|
|
@implementation SSFunction
|
|
{
|
|
std::function<void ()> *func;
|
|
}
|
|
|
|
- (SSFunction *)initWithFunction:(std::function<void ()> *)aFunc {
|
|
if(self = [super init]) {
|
|
func = aFunc;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)run {
|
|
if(*func) (*func)();
|
|
}
|
|
@end
|
|
|
|
namespace SolveSpace {
|
|
namespace Platform {
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Timers
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class TimerImplCocoa : public Timer {
|
|
public:
|
|
NSTimer *timer;
|
|
|
|
TimerImplCocoa() : timer(NULL) {}
|
|
|
|
void WindUp(unsigned milliseconds) override {
|
|
SSFunction *callback = [[SSFunction alloc] init:&this->onTimeout];
|
|
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
|
|
[callback methodSignatureForSelector:@selector(run)]];
|
|
[invocation setTarget:callback];
|
|
[invocation setSelector:@selector(run)];
|
|
|
|
if(timer != NULL) {
|
|
[timer invalidate];
|
|
}
|
|
timer = [NSTimer scheduledTimerWithTimeInterval:(milliseconds / 1000.0)
|
|
invocation:invocation repeats:NO];
|
|
}
|
|
|
|
~TimerImplCocoa() {
|
|
if(timer != NULL) {
|
|
[timer invalidate];
|
|
}
|
|
}
|
|
};
|
|
|
|
TimerRef CreateTimer() {
|
|
return std::unique_ptr<TimerImplCocoa>(new TimerImplCocoa);
|
|
}
|
|
|
|
}
|
|
}
|