13# pragma clang diagnostic ignored "-Wdeprecated-declarations"
16#ifdef WITH_METAL_BACKEND
20#ifdef WITH_VULKAN_BACKEND
24#import <Cocoa/Cocoa.h>
25#import <Metal/Metal.h>
26#import <QuartzCore/QuartzCore.h>
28#include <sys/sysctl.h>
41- (void)windowDidBecomeKey:(NSNotification *)notification;
42- (void)windowDidResignKey:(NSNotification *)notification;
43- (void)windowDidExpose:(NSNotification *)notification;
44- (void)windowDidResize:(NSNotification *)notification;
45- (void)windowDidMove:(NSNotification *)notification;
46- (void)windowWillMove:(NSNotification *)notification;
47- (BOOL)windowShouldClose:(
id)sender;
48- (void)windowDidChangeBackingProperties:(NSNotification *)notification;
63 m_systemCocoa = sysCocoa;
64 m_windowCocoa = winCocoa;
70- (void)windowDidBecomeKey:(NSNotification *)notification
74 [(NSWindow *)m_windowCocoa->getOSWindow() orderFrontRegardless];
77- (void)windowDidResignKey:(NSNotification *)notification
82- (void)windowDidExpose:(NSNotification *)notification
87- (void)windowDidMove:(NSNotification *)notification
92- (void)windowWillMove:(NSNotification *)notification
97- (void)windowWillEnterFullScreen:(NSNotification *)notification
99 m_windowCocoa->setImmediateDraw(
true);
102- (void)windowDidEnterFullScreen:(NSNotification *)notification
109 m_windowCocoa->setImmediateDraw(
false);
112- (void)windowWillExitFullScreen:(NSNotification *)notification
114 m_windowCocoa->setImmediateDraw(
true);
117- (void)windowDidExitFullScreen:(NSNotification *)notification
121 m_windowCocoa->setImmediateDraw(
false);
124- (void)windowDidResize:(NSNotification *)notification
127 if (![[notification
object] inLiveResize])
135 if ([[notification
object] inLiveResize]) {
136 m_systemCocoa->dispatchEvents();
140- (void)windowDidChangeBackingProperties:(NSNotification *)notification
146- (BOOL)windowShouldClose:(id)sender;
163 contentRect:(NSRect)contentRect
164 styleMask:(NSWindowStyleMask)style
165 backing:(NSBackingStoreType)backingStoreType
172@synthesize systemCocoa = m_systemCocoa;
173@synthesize windowCocoa = m_windowCocoa;
174@synthesize draggedObjectType = m_draggedObjectType;
178 contentRect:(NSRect)contentRect
179 styleMask:(NSWindowStyleMask)style
180 backing:(NSBackingStoreType)backingStoreType
183 self = [
super initWithContentRect:contentRect
185 backing:backingStoreType
189 m_systemCocoa = sysCocoa;
190 m_windowCocoa = winCocoa;
196- (BOOL)canBecomeKeyWindow
199 return (m_windowCocoa->isDialog() || !m_systemCocoa->hasDialogWindow());
203- (NSDragOperation)draggingEntered:(
id<NSDraggingInfo>)sender
206 NSPasteboard *draggingPBoard = sender.draggingPasteboard;
207 if ([[draggingPBoard types] containsObject:NSPasteboardTypeTIFF]) {
210 else if ([[draggingPBoard types] containsObject:NSFilenamesPboardType]) {
213 else if ([[draggingPBoard types] containsObject:NSPasteboardTypeString]) {
217 return NSDragOperationNone;
220 const NSPoint mouseLocation = sender.draggingLocation;
221 m_windowCocoa->setAcceptDragOperation(TRUE);
229 return NSDragOperationCopy;
232- (
BOOL)wantsPeriodicDraggingUpdates
237- (NSDragOperation)draggingUpdated:(
id<NSDraggingInfo>)sender
239 const NSPoint mouseLocation = [sender draggingLocation];
247 return m_windowCocoa->canAcceptDragOperation() ? NSDragOperationCopy : NSDragOperationNone;
250- (void)draggingExited:(
id<NSDraggingInfo>)sender
252 m_systemCocoa->handleDraggingEvent(
257- (
BOOL)prepareForDragOperation:(
id<NSDraggingInfo>)sender
259 if (m_windowCocoa->canAcceptDragOperation()) {
265- (
BOOL)performDragOperation:(
id<NSDraggingInfo>)sender
268 NSPasteboard *draggingPBoard = sender.draggingPasteboard;
271 switch (m_draggedObjectType) {
273 if ([NSImage canInitWithPasteboard:draggingPBoard]) {
274 NSImage *droppedImg = [[[NSImage alloc] initWithPasteboard:draggingPBoard] autorelease];
284 data = [draggingPBoard propertyListForType:NSFilenamesPboardType];
287 data = [draggingPBoard stringForType:NSPasteboardTypeString];
294 const NSPoint mouseLocation = sender.draggingLocation;
308#define COCOA_VIEW_CLASS CocoaOpenGLView
309#define COCOA_VIEW_BASE_CLASS NSOpenGLView
311#undef COCOA_VIEW_CLASS
312#undef COCOA_VIEW_BASE_CLASS
314#define COCOA_VIEW_CLASS CocoaMetalView
315#define COCOA_VIEW_BASE_CLASS NSView
317#undef COCOA_VIEW_CLASS
318#undef COCOA_VIEW_BASE_CLASS
332 const bool stereoVisual,
341 m_systemCocoa(systemCocoa),
342 m_customCursor(nullptr),
343 m_immediateDraw(
false),
344 m_debug_context(is_debug),
345 m_is_dialog(is_dialog),
346 m_preferred_device(preferred_device)
353 rect.origin.x =
left;
354 rect.origin.y = bottom;
355 rect.size.width = width;
356 rect.size.height = height;
358 NSWindowStyleMask styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable |
359 NSWindowStyleMaskResizable;
361 styleMask |= NSWindowStyleMaskMiniaturizable;
368 backing:NSBackingStoreBuffered
372 const NSSize minSize = {320, 240};
376 id<MTLDevice> metalDevice = MTLCreateSystemDefaultDevice();
390 if (type == GHOST_kDrawingContextTypeMetal) {
399 const CFStringRef name = kCGColorSpaceExtendedSRGB;
400 CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(name);
402 CGColorSpaceRelease(colorspace);
405 m_metalView = [[CocoaMetalView alloc] initWithSystemCocoa:systemCocoa
414 m_openGLView = [[CocoaOpenGLView alloc] initWithSystemCocoa:systemCocoa
423 if ([view respondsToSelector:
@selector(setWantsBestResolutionOpenGLSurface:)]) {
424 view.wantsBestResolutionOpenGLSurface = YES;
431 [
m_window makeKeyAndOrderFront:nil];
442 initWithSystemCocoa:systemCocoa
446 m_window.acceptsMouseMovedEvents = YES;
448 NSView *contentview =
m_window.contentView;
449 contentview.allowedTouchTypes = (NSTouchTypeMaskDirect | NSTouchTypeMaskIndirect);
451 [
m_window registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType,
452 NSPasteboardTypeString,
453 NSPasteboardTypeTIFF,
456 if (is_dialog && parentWindow) {
457 [parentWindow->getViewWindow() addChildWindow:m_window ordered:NSWindowAbove];
458 m_window.collectionBehavior = NSWindowCollectionBehaviorFullScreenAuxiliary;
461 m_window.collectionBehavior = NSWindowCollectionBehaviorFullScreenPrimary;
501 NSArray *windowsList = [NSApp orderedWindows];
502 for (
int a = 0; a < [windowsList count]; a++) {
504 [[windowsList objectAtIndex:a] makeKeyWindow];
532 NSString *windowTitle = [[NSString alloc] initWithCString:title encoding:NSUTF8StringEncoding];
535 [windowTitle release];
545 NSString *windowTitle =
m_window.title;
546 if (windowTitle != nil) {
547 title = windowTitle.UTF8String;
559 NSString *associatedFileName = [[NSString alloc] initWithCString:filepath
560 encoding:NSUTF8StringEncoding];
563 m_window.representedFilename = associatedFileName;
565 @catch (NSException *
e)
567 printf(
"\nInvalid file path given for window");
571 [associatedFileName release];
581 const NSRect screenSize =
m_window.screen.visibleFrame;
584 bounds.m_b = screenSize.size.height - (rect.origin.y - screenSize.origin.y);
585 bounds.m_l = rect.origin.x - screenSize.origin.x;
586 bounds.m_r = rect.origin.x - screenSize.origin.x + rect.size.width;
587 bounds.m_t = screenSize.size.height - (rect.origin.y + rect.size.height - screenSize.origin.y);
596 const NSRect screenSize =
m_window.screen.visibleFrame;
599 const NSRect contentRect = [
BlenderWindow contentRectForFrameRect:screenSize
604 bounds.m_b = contentRect.size.height - (rect.origin.y - contentRect.origin.y);
605 bounds.m_l = rect.origin.x - contentRect.origin.x;
606 bounds.m_r = rect.origin.x - contentRect.origin.x + rect.size.width;
607 bounds.m_t = contentRect.size.height -
608 (rect.origin.y + rect.size.height - contentRect.origin.y);
621 const NSSize size = {(CGFloat)width, (CGFloat)cBnds.
getHeight()};
637 const NSSize size = {(CGFloat)cBnds.
getWidth(), (CGFloat)height};
652 const NSSize size = {(CGFloat)width, (CGFloat)height};
664 NSUInteger masks =
m_window.styleMask;
666 if (masks & NSWindowStyleMaskFullScreen) {
722 screenCoord.origin = {(CGFloat)inX, (CGFloat)inY};
724 const NSRect baseCoord = [
m_window convertRectFromScreen:screenCoord];
726 outX = baseCoord.origin.x;
727 outY = baseCoord.origin.y;
736 baseCoord.origin = {(CGFloat)inX, (CGFloat)inY};
738 const NSRect screenCoord = [
m_window convertRectToScreen:baseCoord];
740 outX = screenCoord.origin.x;
741 outY = screenCoord.origin.y;
753 const NSRect backingBounds = [view convertRectToBacking:[view bounds]];
782 const NSUInteger masks =
m_window.styleMask;
784 if (!(masks & NSWindowStyleMaskFullScreen)) {
792 const NSUInteger masks =
m_window.styleMask;
794 if (masks & NSWindowStyleMaskFullScreen) {
814 m_window.documentEdited = isUnsavedChanges;
825 [NSApp activateIgnoringOtherApps:YES];
826 [
m_window makeKeyAndOrderFront:nil];
829 NSArray *windowsList;
834 windowsList = [NSApp orderedWindows];
835 if (windowsList.count) {
836 [[windowsList objectAtIndex:0] makeKeyAndOrderFront:nil];
850#ifdef WITH_VULKAN_BACKEND
851 case GHOST_kDrawingContextTypeVulkan: {
854 if (context->initializeDrawingContext()) {
862#ifdef WITH_METAL_BACKEND
863 case GHOST_kDrawingContextTypeMetal: {
866 if (context->initializeDrawingContext()) {
890 view.needsDisplay = YES;
902 if ((progress >= 0.0) && (progress <= 1.0)) {
903 NSImage *dockIcon = [[NSImage alloc] initWithSize:NSMakeSize(128, 128)];
905 [dockIcon lockFocus];
907 [[NSImage imageNamed:@"NSApplicationIcon"] drawAtPoint:NSZeroPoint
909 operation:NSCompositingOperationSourceOver
912 NSRect progressRect = {{8, 8}, {112, 14}};
913 NSBezierPath *progressPath;
916 [[[NSColor whiteColor] colorWithAlphaComponent:0.6] setFill];
917 progressPath = [NSBezierPath bezierPathWithRoundedRect:progressRect xRadius:7 yRadius:7];
921 [[[NSColor blackColor] colorWithAlphaComponent:0.7] setFill];
922 progressRect = NSInsetRect(progressRect, 2, 2);
923 progressRect.size.width *= progress;
924 progressPath = [NSBezierPath bezierPathWithRoundedRect:progressRect xRadius:5 yRadius:5];
927 [dockIcon unlockFocus];
928 [NSApp setApplicationIconImage:dockIcon];
946 NSImage *dockIcon = [[NSImage alloc] initWithSize:NSMakeSize(128, 128)];
947 [dockIcon lockFocus];
948 [[NSImage imageNamed:@"NSApplicationIcon"] drawAtPoint:NSZeroPoint
950 operation:NSCompositingOperationSourceOver
952 [dockIcon unlockFocus];
953 [NSApp setApplicationIconImage:dockIcon];
965 static NSCursor *cursors[GHOST_kStandardCursorNumCursors] = {
nullptr};
966 static bool loaded[GHOST_kStandardCursorNumCursors] = {
false};
968 const int index =
int(shape);
969 if (!loaded[index]) {
972 NSImage *image = [NSImage imageNamed:name];
973 if (image !=
nullptr) {
974 cursors[index] = [[NSCursor alloc] initWithImage:image hotSpot:hotspot];
978 loaded[index] =
true;
981 return cursors[index];
996 return [NSCursor disappearingItemCursor];
998 return [NSCursor IBeamCursor];
1000 return [NSCursor crosshairCursor];
1002 return [NSCursor resizeUpDownCursor];
1004 return [NSCursor resizeLeftRightCursor];
1006 return [NSCursor resizeUpCursor];
1008 return [NSCursor resizeDownCursor];
1010 return [NSCursor resizeLeftCursor];
1012 return [NSCursor resizeRightCursor];
1014 return [NSCursor dragCopyCursor];
1016 return [NSCursor operationNotAllowedCursor];
1018 return [NSCursor openHandCursor];
1020 return [NSCursor openHandCursor];
1022 return [NSCursor closedHandCursor];
1024 return [NSCursor pointingHandCursor];
1026 return [NSCursor arrowCursor];
1034 return getImageCursor(shape,
@"eyedropper.pdf", NSMakePoint(6, 24));
1040 return getImageCursor(shape,
@"scrollnsew.pdf", NSMakePoint(16, 16));
1042 return getImageCursor(shape,
@"scrollns.pdf", NSMakePoint(16, 16));
1044 return getImageCursor(shape,
@"scrollew.pdf", NSMakePoint(16, 16));
1046 return getImageCursor(shape,
@"arrowup.pdf", NSMakePoint(16, 16));
1048 return getImageCursor(shape,
@"arrowdown.pdf", NSMakePoint(16, 16));
1050 return getImageCursor(shape,
@"arrowleft.pdf", NSMakePoint(16, 16));
1052 return getImageCursor(shape,
@"arrowright.pdf", NSMakePoint(16, 16));
1054 return getImageCursor(shape,
@"splitv.pdf", NSMakePoint(16, 16));
1056 return getImageCursor(shape,
@"splith.pdf", NSMakePoint(16, 16));
1058 return getImageCursor(shape,
@"paint_cursor_cross.pdf", NSMakePoint(16, 15));
1060 return getImageCursor(shape,
@"paint_cursor_dot.pdf", NSMakePoint(16, 15));
1062 return getImageCursor(shape,
@"crossc.pdf", NSMakePoint(16, 16));
1064 return getImageCursor(shape,
@"handle_left.pdf", NSMakePoint(12, 14));
1066 return getImageCursor(shape,
@"handle_right.pdf", NSMakePoint(10, 14));
1068 return getImageCursor(shape,
@"handle_both.pdf", NSMakePoint(11, 14));
1077 static bool systemCursorVisible =
true;
1080 if (visible != systemCursorVisible) {
1083 systemCursorVisible =
true;
1087 systemCursorVisible =
false;
1092 if (cursor ==
nullptr) {
1171 ch= ((ch >> 1) & 0x55) | ((ch << 1) & 0xAA);
1172 ch= ((ch >> 2) & 0x33) | ((ch << 2) & 0xCC);
1173 ch= ((ch >> 4) & 0x0F) | ((ch << 4) & 0xF0);
1181 shrt = ((shrt >> 1) & 0x5555) | ((shrt << 1) & 0xAAAA);
1182 shrt = ((shrt >> 2) & 0x3333) | ((shrt << 2) & 0xCCCC);
1183 shrt = ((shrt >> 4) & 0x0F0F) | ((shrt << 4) & 0xF0F0);
1184 shrt = ((shrt >> 8) & 0x00FF) | ((shrt << 8) & 0xFF00);
1189 uint8_t *bitmap,
uint8_t *mask,
int sizex,
int sizey,
int hotX,
int hotY,
bool canInvertColor)
1197 NSBitmapImageRep *cursorImageRep = [[NSBitmapImageRep alloc]
1198 initWithBitmapDataPlanes:nil
1205 colorSpaceName:NSDeviceWhiteColorSpace
1206 bytesPerRow:(sizex / 8 + (sizex % 8 > 0 ? 1 : 0))
1210 int nbUns16 = cursorImageRep.bytesPerPlane / 2;
1212 for (
int y = 0; y < nbUns16; y++) {
1213#if !defined(__LITTLE_ENDIAN__)
1214 cursorBitmap[y] =
uns16ReverseBits((bitmap[2 * y] << 0) | (bitmap[2 * y + 1] << 8));
1215 cursorBitmap[nbUns16 + y] =
uns16ReverseBits((mask[2 * y] << 0) | (mask[2 * y + 1] << 8));
1217 cursorBitmap[y] =
uns16ReverseBits((bitmap[2 * y + 1] << 0) | (bitmap[2 * y] << 8));
1218 cursorBitmap[nbUns16 + y] =
uns16ReverseBits((mask[2 * y + 1] << 0) | (mask[2 * y] << 8));
1223 if (canInvertColor) {
1224 cursorBitmap[y] = ~cursorBitmap[y];
1228 const NSSize imSize = {(CGFloat)sizex, (CGFloat)sizey};
1229 NSImage *cursorImage = [[NSImage alloc] initWithSize:imSize];
1230 [cursorImage addRepresentation:cursorImageRep];
1232 const NSPoint hotSpotPoint = {(CGFloat)(hotX), (CGFloat)(hotY)};
1235 m_customCursor = [[NSCursor alloc] initWithImage:cursorImage hotSpot:hotSpotPoint];
1237 [cursorImageRep release];
1238 [cursorImage release];
1247#ifdef WITH_INPUT_IME
1251 [m_openGLView beginIME:x y:y w:w h:h completed:completed];
1254 [m_metalView beginIME:x y:y w:w h:h completed:completed];
1258void GHOST_WindowCocoa::endIME()
1261 [m_openGLView endIME];
1264 [m_metalView endIME];
#define GHOST_ASSERT(x, info)
@ GHOST_kWindowStateMinimized
@ GHOST_kWindowStateMaximized
@ GHOST_kWindowStateNormal
@ GHOST_kWindowStateFullScreen
@ GHOST_kStandardCursorLeftHandle
@ GHOST_kStandardCursorHandClosed
@ GHOST_kStandardCursorHandOpen
@ GHOST_kStandardCursorZoomIn
@ GHOST_kStandardCursorVerticalSplit
@ GHOST_kStandardCursorCopy
@ GHOST_kStandardCursorRightHandle
@ GHOST_kStandardCursorHorizontalSplit
@ GHOST_kStandardCursorTopSide
@ GHOST_kStandardCursorStop
@ GHOST_kStandardCursorCrosshair
@ GHOST_kStandardCursorCustom
@ GHOST_kStandardCursorNSEWScroll
@ GHOST_kStandardCursorLeftRight
@ GHOST_kStandardCursorPencil
@ GHOST_kStandardCursorNSScroll
@ GHOST_kStandardCursorCrosshairA
@ GHOST_kStandardCursorUpDown
@ GHOST_kStandardCursorUpArrow
@ GHOST_kStandardCursorHandPoint
@ GHOST_kStandardCursorBottomSide
@ GHOST_kStandardCursorBothHandles
@ GHOST_kStandardCursorEyedropper
@ GHOST_kStandardCursorKnife
@ GHOST_kStandardCursorMove
@ GHOST_kStandardCursorCrosshairB
@ GHOST_kStandardCursorDownArrow
@ GHOST_kStandardCursorEraser
@ GHOST_kStandardCursorDefault
@ GHOST_kStandardCursorEWScroll
@ GHOST_kStandardCursorRightSide
@ GHOST_kStandardCursorRightArrow
@ GHOST_kStandardCursorDestroy
@ GHOST_kStandardCursorCrosshairC
@ GHOST_kStandardCursorZoomOut
@ GHOST_kStandardCursorLeftSide
@ GHOST_kStandardCursorText
@ GHOST_kStandardCursorLeftArrow
@ GHOST_kEventWindowClose
@ GHOST_kEventDraggingDropDone
@ GHOST_kEventDraggingExited
@ GHOST_kEventNativeResolutionChange
@ GHOST_kEventDraggingUpdated
@ GHOST_kEventDraggingEntered
@ GHOST_kEventWindowActivate
@ GHOST_kEventWindowUpdate
@ GHOST_kEventWindowDeactivate
static const GHOST_TabletData GHOST_TABLET_DATA_NONE
GHOST_TDrawingContextType
@ GHOST_kDragnDropTypeUnknown
@ GHOST_kDragnDropTypeFilenames
@ GHOST_kDragnDropTypeBitmap
@ GHOST_kDragnDropTypeString
static NSCursor * getImageCursor(GHOST_TStandardCursor shape, NSString *name, NSPoint hotspot)
static uint16_t uns16ReverseBits(uint16_t shrt)
static uint8_t uns8ReverseBits(uint8_t ch)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
virtual int32_t getHeight() const
virtual int32_t getWidth() const
GHOST_TSuccess getCursorPosition(int32_t &x, int32_t &y) const override
GHOST_TSuccess setCursorPosition(int32_t x, int32_t y) override
bool isDialog() const override
GHOST_TSuccess setProgressBar(float progress) override
GHOST_TSuccess setWindowCursorShape(GHOST_TStandardCursor shape) override
GHOST_SystemCocoa * m_systemCocoa
GHOST_TSuccess setState(GHOST_TWindowState state) override
std::string getTitle() const override
GHOST_TSuccess setClientHeight(uint32_t height) override
void clientToScreen(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const override
void setTitle(const char *title) override
GHOST_TSuccess setModifiedState(bool isUnsavedChanges) override
GHOST_TSuccess invalidate() override
CocoaOpenGLView * m_openGLView
CAMetalLayer * m_metalLayer
GHOST_TSuccess endProgressBar() override
NSCursor * getStandardCursor(GHOST_TStandardCursor cursor) const
GHOST_TWindowState getState() const override
GHOST_TSuccess setClientWidth(uint32_t width) override
GHOST_GPUDevice m_preferred_device
GHOST_TabletData m_tablet
GHOST_WindowCocoa(GHOST_SystemCocoa *systemCocoa, const char *title, int32_t left, int32_t bottom, uint32_t width, uint32_t height, GHOST_TWindowState state, GHOST_TDrawingContextType type, const bool stereoVisual, bool is_debug, bool dialog, GHOST_WindowCocoa *parentWindow, const GHOST_GPUDevice &preferred_device)
GHOST_TSuccess hasCursorShape(GHOST_TStandardCursor shape) override
void clientToScreenIntern(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const
void * getOSWindow() const override
void getClientBounds(GHOST_Rect &bounds) const override
void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const override
void getWindowBounds(GHOST_Rect &bounds) const override
NSCursor * m_customCursor
GHOST_Context * newDrawingContext(GHOST_TDrawingContextType type) override
GHOST_TSuccess setWindowCursorGrab(GHOST_TGrabCursorMode mode) override
GHOST_TSuccess setWindowCustomCursorShape(uint8_t *bitmap, uint8_t *mask, int sizex, int sizey, int hotX, int hotY, bool canInvertColor) override
~GHOST_WindowCocoa() override
GHOST_TSuccess setOrder(GHOST_TWindowOrder order) override
void screenToClientIntern(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const
CocoaMetalView * m_metalView
GHOST_TSuccess setPath(const char *filepath) override
void setNativePixelSize()
bool getValid() const override
GHOST_TSuccess setWindowCursorVisibility(bool visible) override
void loadCursor(bool visible, GHOST_TStandardCursor cursor) const
GHOST_TSuccess setClientSize(uint32_t width, uint32_t height) override
GHOST_Rect m_cursorGrabBounds
void setCursorGrabAccum(int32_t x, int32_t y)
GHOST_TGrabCursorMode m_cursorGrab
int32_t m_cursorGrabInitPos[2]
GHOST_TStandardCursor getCursorShape() const override
GHOST_TSuccess setDrawingContextType(GHOST_TDrawingContextType type) override
GHOST_TSuccess releaseNativeHandles()
bool getCursorVisibility() const override
virtual GHOST_TSuccess activateDrawingContext() override
GHOST_TSuccess updateDrawingContext()
virtual GHOST_TSuccess setModifiedState(bool isUnsavedChanges) override
bool m_progressBarVisible
virtual bool getValid() const override
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
GHOST_SystemCocoa * systemCocoa
GHOST_WindowCocoa * windowCocoa