diff options
Diffstat (limited to 'pugl/detail')
-rw-r--r-- | pugl/detail/mac.m | 17 | ||||
-rw-r--r-- | pugl/detail/mac_stub.m | 96 |
2 files changed, 96 insertions, 17 deletions
diff --git a/pugl/detail/mac.m b/pugl/detail/mac.m index 5f2f31e..c844d26 100644 --- a/pugl/detail/mac.m +++ b/pugl/detail/mac.m @@ -24,7 +24,6 @@ #include "pugl/detail/implementation.h" #include "pugl/detail/mac.h" #include "pugl/pugl.h" -#include "pugl/pugl_stub.h" #import <Cocoa/Cocoa.h> @@ -1085,19 +1084,3 @@ puglSetClipboard(PuglView* const view, return PUGL_SUCCESS; } - -const PuglBackend* -puglStubBackend(void) -{ - static const PuglBackend backend = { - puglStubConfigure, - puglStubCreate, - puglStubDestroy, - puglStubEnter, - puglStubLeave, - puglStubResize, - puglStubGetContext, - }; - - return &backend; -} diff --git a/pugl/detail/mac_stub.m b/pugl/detail/mac_stub.m new file mode 100644 index 0000000..4ed246b --- /dev/null +++ b/pugl/detail/mac_stub.m @@ -0,0 +1,96 @@ +/* + Copyright 2019-2020 David Robillard <http://drobilla.net> + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file mac_stub.m Stub graphics backend for MacOS. +*/ + +#include "pugl/detail/implementation.h" +#include "pugl/detail/mac.h" +#include "pugl/pugl_stub.h" + +#import <Cocoa/Cocoa.h> + +@interface PuglStubView : NSView +{ +@public + PuglView* puglview; +} + +@end + +@implementation PuglStubView + +- (void) resizeWithOldSuperviewSize:(NSSize)oldSize +{ + PuglWrapperView* wrapper = (PuglWrapperView*)[self superview]; + + [super resizeWithOldSuperviewSize:oldSize]; + [wrapper setReshaped]; +} + +- (void) drawRect:(NSRect)rect +{ + PuglWrapperView* wrapper = (PuglWrapperView*)[self superview]; + + [wrapper dispatchExpose:rect]; +} + +@end + +static PuglStatus +puglMacStubCreate(PuglView* view) +{ + PuglInternals* impl = view->impl; + PuglStubView* drawView = [PuglStubView alloc]; + + drawView->puglview = view; + [drawView initWithFrame:NSMakeRect(0, 0, view->frame.width, view->frame.height)]; + if (view->hints[PUGL_RESIZABLE]) { + [drawView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + } else { + [drawView setAutoresizingMask:NSViewNotSizable]; + } + + impl->drawView = drawView; + return PUGL_SUCCESS; +} + +static PuglStatus +puglMacStubDestroy(PuglView* view) +{ + PuglStubView* const drawView = (PuglStubView*)view->impl->drawView; + + [drawView removeFromSuperview]; + [drawView release]; + + view->impl->drawView = nil; + return PUGL_SUCCESS; +} + +const PuglBackend* +puglStubBackend(void) +{ + static const PuglBackend backend = {puglStubConfigure, + puglMacStubCreate, + puglMacStubDestroy, + puglStubEnter, + puglStubLeave, + puglStubResize, + puglStubGetContext}; + + return &backend; +} |