1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-10-01 13:58:20 +00:00

Got explicit about threading guarantees.

This commit is contained in:
Thomas Harte 2016-03-13 13:38:03 -04:00
parent 67dffc89e0
commit bb0cd89574
2 changed files with 38 additions and 3 deletions

View File

@ -12,14 +12,46 @@
@class CSOpenGLView;
@protocol CSOpenGLViewDelegate
/*!
Tells the delegate that time has advanced. This method will always be called on the same queue
as the @c CSOpenGLViewResponderDelegate methods.
@param view The view sending the message.
@param time The time to which time has advanced.
*/
- (void)openGLView:(nonnull CSOpenGLView *)view didUpdateToTime:(CVTimeStamp)time;
/*!
Requests that the delegate produce an image of its current output state. May be called on
any queue or thread.
@param view The view makin the request.
@param onlyIfDirty If @c YES then the delegate may decline to redraw if its output would be
identical to the previous frame. If @c NO then the delegate must draw.
*/
- (void)openGLView:(nonnull CSOpenGLView *)view drawViewOnlyIfDirty:(BOOL)onlyIfDirty;
@end
@protocol CSOpenGLViewResponderDelegate <NSObject>
/*!
Supplies a keyDown event to the delegate. Will always be called on the same queue as the other
@c CSOpenGLViewResponderDelegate methods and as -[CSOpenGLViewDelegate openGLView:didUpdateToTime:].
@param event The @c NSEvent describing the keyDown.
*/
- (void)keyDown:(nonnull NSEvent *)event;
/*!
Supplies a keyUp event to the delegate. Will always be called on the same queue as the other
@c CSOpenGLViewResponderDelegate methods and as -[CSOpenGLViewDelegate openGLView:didUpdateToTime:].
@param event The @c NSEvent describing the keyUp.
*/
- (void)keyUp:(nonnull NSEvent *)event;
/*!
Supplies a flagsChanged event to the delegate. Will always be called on the same queue as the other
@c CSOpenGLViewResponderDelegate methods and as -[CSOpenGLViewDelegate openGLView:didUpdateToTime:].
@param event The @c NSEvent describing the flagsChanged.
*/
- (void)flagsChanged:(nonnull NSEvent *)newModifiers;
@end
/*!
@ -31,8 +63,13 @@
@property (nonatomic, weak) id <CSOpenGLViewDelegate> delegate;
@property (nonatomic, weak) id <CSOpenGLViewResponderDelegate> responderDelegate;
/*!
Ends the timer tracking time; should be called prior to giving up the last owning reference
to ensure that any retain cycles implied by the timer are resolved.
*/
- (void)invalidate;
/// The size in pixels of the OpenGL canvas, factoring in screen pixel density and view size in points.
@property (nonatomic, readonly) CGSize backingSize;
@end

View File

@ -137,9 +137,7 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt
- (void)drawRect:(NSRect)dirtyRect
{
dispatch_sync(_dispatchQueue, ^{
[self drawViewOnlyIfDirty:NO];
});
[self drawViewOnlyIfDirty:NO];
}
- (void)drawViewOnlyIfDirty:(BOOL)onlyIfDirty