diff options
Diffstat (limited to 'Source/3rdParty/SDL2/src/video/cocoa/SDL_cocoametalview.m')
-rw-r--r-- | Source/3rdParty/SDL2/src/video/cocoa/SDL_cocoametalview.m | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/Source/3rdParty/SDL2/src/video/cocoa/SDL_cocoametalview.m b/Source/3rdParty/SDL2/src/video/cocoa/SDL_cocoametalview.m deleted file mode 100644 index 9447fb8..0000000 --- a/Source/3rdParty/SDL2/src/video/cocoa/SDL_cocoametalview.m +++ /dev/null @@ -1,138 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -/* - * @author Mark Callow, www.edgewise-consulting.com. - * - * Thanks to Alex Szpakowski, @slime73 on GitHub, for his gist showing - * how to add a CAMetalLayer backed view. - */ - -#import "SDL_cocoametalview.h" - -#if SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL) - -#include "SDL_assert.h" - -@implementation SDL_cocoametalview - -/* Return a Metal-compatible layer. */ -+ (Class)layerClass -{ - return NSClassFromString(@"CAMetalLayer"); -} - -/* Indicate the view wants to draw using a backing layer instead of drawRect. */ -- (BOOL)wantsUpdateLayer -{ - return YES; -} - -/* When the wantsLayer property is set to YES, this method will be invoked to - * return a layer instance. - */ -- (CALayer*)makeBackingLayer -{ - return [self.class.layerClass layer]; -} - -- (instancetype)initWithFrame:(NSRect)frame - highDPI:(BOOL)highDPI -{ - if ((self = [super initWithFrame:frame])) { - self.highDPI = highDPI; - self.wantsLayer = YES; - - /* Allow resize. */ - self.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; - - [self updateDrawableSize]; - } - - return self; -} - -- (NSInteger)tag -{ - return METALVIEW_TAG; -} - -- (void)updateDrawableSize -{ - CAMetalLayer *metalLayer = (CAMetalLayer *)self.layer; - CGSize size = self.bounds.size; - CGSize backingSize = size; - - if (self.highDPI) { - /* Note: NSHighResolutionCapable must be set to true in the app's - * Info.plist in order for the backing size to be high res. - */ - backingSize = [self convertSizeToBacking:size]; - } - - metalLayer.contentsScale = backingSize.height / size.height; - metalLayer.drawableSize = backingSize; -} - -/* Set the size of the metal drawables when the view is resized. */ -- (void)resizeWithOldSuperviewSize:(NSSize)oldSize -{ - [super resizeWithOldSuperviewSize:oldSize]; - [self updateDrawableSize]; -} - -@end - -SDL_cocoametalview* -Cocoa_Mtl_AddMetalView(SDL_Window* window) -{ - SDL_WindowData* data = (__bridge SDL_WindowData *)window->driverdata; - NSView *view = data->nswindow.contentView; - BOOL highDPI = (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) != 0; - SDL_cocoametalview *metalview; - - metalview = [[SDL_cocoametalview alloc] initWithFrame:view.frame highDPI:highDPI]; - [view addSubview:metalview]; - return metalview; -} - -void -Cocoa_Mtl_GetDrawableSize(SDL_Window * window, int * w, int * h) -{ - SDL_WindowData *data = (__bridge SDL_WindowData *)window->driverdata; - NSView *view = data->nswindow.contentView; - SDL_cocoametalview* metalview = [view viewWithTag:METALVIEW_TAG]; - if (metalview) { - CAMetalLayer *layer = (CAMetalLayer*)metalview.layer; - assert(layer != NULL); - if (w) { - *w = layer.drawableSize.width; - } - if (h) { - *h = layer.drawableSize.height; - } - } else { - SDL_GetWindowSize(window, w, h); - } -} - -#endif /* SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL) */ - -/* vi: set ts=4 sw=4 expandtab: */ |