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
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
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]) {
277 NSImage *droppedImg = [[NSImage alloc] initWithPasteboard:draggingPBoard];
282 data = [draggingPBoard propertyListForType:NSFilenamesPboardType];
285 data = [draggingPBoard stringForType:NSPasteboardTypeString];
292 const NSPoint mouseLocation = sender.draggingLocation;
306#define COCOA_VIEW_CLASS CocoaOpenGLView
307#define COCOA_VIEW_BASE_CLASS NSOpenGLView
309#undef COCOA_VIEW_CLASS
310#undef COCOA_VIEW_BASE_CLASS
312#define COCOA_VIEW_CLASS CocoaMetalView
313#define COCOA_VIEW_BASE_CLASS NSView
315#undef COCOA_VIEW_CLASS
316#undef COCOA_VIEW_BASE_CLASS
330 const bool stereoVisual,
351 rect.origin.x =
left;
352 rect.origin.y = bottom;
353 rect.size.width = width;
354 rect.size.height = height;
356 NSWindowStyleMask styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable |
357 NSWindowStyleMaskResizable;
359 styleMask |= NSWindowStyleMaskMiniaturizable;
366 backing:NSBackingStoreBuffered
372 [
m_window setFrameOrigin:NSMakePoint(left, bottom)];
375 const NSSize minSize = {320, 240};
379 id<MTLDevice> metalDevice = MTLCreateSystemDefaultDevice();
390 [m_metalLayer removeAllAnimations];
393 if (type == GHOST_kDrawingContextTypeMetal) {
402 const CFStringRef name = kCGColorSpaceExtendedSRGB;
403 CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(name);
405 CGColorSpaceRelease(colorspace);
426 if ([
view respondsToSelector:
@selector(setWantsBestResolutionOpenGLSurface:)]) {
427 view.wantsBestResolutionOpenGLSurface = YES;
434 [
m_window makeKeyAndOrderFront:nil];
445 initWithSystemCocoa:systemCocoa
449 m_window.acceptsMouseMovedEvents = YES;
451 NSView *contentview =
m_window.contentView;
452 contentview.allowedTouchTypes = (NSTouchTypeMaskDirect | NSTouchTypeMaskIndirect);
454 [
m_window registerForDraggedTypes:[
NSArray arrayWithObjects:NSFilenamesPboardType,
455 NSPasteboardTypeString,
456 NSPasteboardTypeTIFF,
459 if (is_dialog && parentWindow) {
460 [
parentWindow->getViewWindow() addChildWindow:m_window ordered:NSWindowAbove];
461 m_window.collectionBehavior = NSWindowCollectionBehaviorFullScreenAuxiliary;
464 m_window.collectionBehavior = NSWindowCollectionBehaviorFullScreenPrimary;
479 [m_customCursor release];
486 [m_openGLView release];
490 [m_metalView release];
494 [m_metalLayer release];
504 NSArray *windowsList = [
NSApp orderedWindows];
535 NSString *windowTitle = [[
NSString alloc] initWithCString:title encoding:NSUTF8StringEncoding];
548 NSString *windowTitle =
m_window.title;
549 if (windowTitle != nil) {
550 title = windowTitle.UTF8String;
561 NSString *associatedFileName = [[[
NSString alloc] initWithCString:filepath
562 encoding:NSUTF8StringEncoding]
565 m_window.representedFilename = associatedFileName;
579 green:background_color[1]
580 blue:background_color[2]
588 const float hsv_v = MAX(background_color[0], MAX(background_color[1], background_color[2]));
590 const NSAppearanceName win_appearance = hsv_v > 0.5 ? NSAppearanceNameVibrantLight :
591 NSAppearanceNameVibrantDark;
594 m_window.titlebarAppearsTransparent = YES;
597 m_window.titlebarAppearsTransparent = NO;
609 const NSRect screenFrame = [getPrimaryScreen() visibleFrame];
610 const NSRect windowFrame =
m_window.frame;
617 const int32_t screenMaxY = screenFrame.origin.y + screenFrame.size.height;
621 bounds.m_b = screenMaxY - windowFrame.origin.y;
622 bounds.m_t = screenMaxY - windowFrame.origin.y - windowFrame.size.height;
624 bounds.m_l = windowFrame.origin.x;
625 bounds.m_r = windowFrame.origin.x + windowFrame.size.width;
635 const NSRect screenFrame = [getPrimaryScreen() visibleFrame];
637 const NSRect screenContentRect = [
NSWindow contentRectForFrameRect:screenFrame
640 const NSRect windowFrame =
m_window.frame;
642 const NSRect windowContentRect = [
m_window contentRectForFrameRect:windowFrame];
644 const int32_t screenMaxY = screenContentRect.origin.y + screenContentRect.size.height;
648 bounds.m_b = screenMaxY - windowContentRect.origin.y;
649 bounds.m_t = screenMaxY - windowContentRect.origin.y - windowContentRect.size.height;
651 bounds.m_l = windowContentRect.origin.x;
652 bounds.m_r = windowContentRect.origin.x + windowContentRect.size.width;
664 if ((uint32_t(cBnds.
getWidth())) != width) {
665 const NSSize
size = {(CGFloat)width, (CGFloat)cBnds.
getHeight()};
680 if ((uint32_t(cBnds.
getHeight())) != height) {
681 const NSSize
size = {(CGFloat)cBnds.
getWidth(), (CGFloat)height};
695 if (((uint32_t(cBnds.
getWidth())) != width) || ((uint32_t(cBnds.
getHeight())) != height)) {
696 const NSSize
size = {(CGFloat)width, (CGFloat)height};
708 NSUInteger masks =
m_window.styleMask;
710 if (masks & NSWindowStyleMaskFullScreen) {
766 screenCoord.origin = {(CGFloat)inX, (CGFloat)inY};
768 const NSRect baseCoord = [
m_window convertRectFromScreen:screenCoord];
770 outX = baseCoord.origin.x;
771 outY = baseCoord.origin.y;
780 baseCoord.origin = {(CGFloat)inX, (CGFloat)inY};
782 const NSRect screenCoord = [
m_window convertRectToScreen:baseCoord];
784 outX = screenCoord.origin.x;
785 outY = screenCoord.origin.y;
796 return [[
NSScreen screens] firstObject];
803 const NSRect backingBounds = [view convertRectToBacking:[view bounds]];
832 const NSUInteger masks =
m_window.styleMask;
834 if (!(masks & NSWindowStyleMaskFullScreen)) {
842 const NSUInteger masks =
m_window.styleMask;
844 if (masks & NSWindowStyleMaskFullScreen) {
864 m_window.documentEdited = isUnsavedChanges;
875 [
NSApp activateIgnoringOtherApps:YES];
876 [
m_window makeKeyAndOrderFront:nil];
879 NSArray *windowsList;
884 windowsList = [
NSApp orderedWindows];
885 if (windowsList.count) {
886 [[
windowsList objectAtIndex:0] makeKeyAndOrderFront:nil];
900#ifdef WITH_VULKAN_BACKEND
901 case GHOST_kDrawingContextTypeVulkan: {
904 if (context->initializeDrawingContext()) {
912#ifdef WITH_METAL_BACKEND
913 case GHOST_kDrawingContextTypeMetal: {
916 if (context->initializeDrawingContext()) {
940 view.needsDisplay = YES;
953 NSImage *dockIcon = [[
NSImage alloc] initWithSize:NSMakeSize(128, 128)];
957 [[
NSImage imageNamed:@"NSApplicationIcon"] drawAtPoint:NSZeroPoint
959 operation:NSCompositingOperationSourceOver
962 NSRect progressRect = {{8, 8}, {112, 14}};
963 NSBezierPath *progressPath;
966 [[[
NSColor whiteColor] colorWithAlphaComponent:0.6] setFill];
967 progressPath = [
NSBezierPath bezierPathWithRoundedRect:progressRect xRadius:7 yRadius:7];
971 [[[
NSColor blackColor] colorWithAlphaComponent:0.7] setFill];
972 progressRect = NSInsetRect(progressRect, 2, 2);
973 progressRect.size.width *=
progress;
974 progressPath = [
NSBezierPath bezierPathWithRoundedRect:progressRect xRadius:5 yRadius:5];
978 [
NSApp setApplicationIconImage:dockIcon];
996 NSImage *dockIcon = [[
NSImage alloc] initWithSize:NSMakeSize(128, 128)];
998 [[
NSImage imageNamed:@"NSApplicationIcon"] drawAtPoint:NSZeroPoint
1000 operation:NSCompositingOperationSourceOver
1003 [
NSApp setApplicationIconImage:dockIcon];
1015 static NSCursor *cursors[GHOST_kStandardCursorNumCursors] = {
nullptr};
1016 static bool loaded[GHOST_kStandardCursorNumCursors] = {
false};
1018 const int index = int(shape);
1019 if (!loaded[index]) {
1022 NSImage *image = [NSImage imageNamed:name];
1023 if (image !=
nullptr) {
1024 cursors[index] = [[NSCursor alloc] initWithImage:image hotSpot:hotspot];
1028 loaded[index] =
true;
1031 return cursors[index];
1036@interface NSCursor (Undocumented)
1052 return [
NSCursor disappearingItemCursor];
1058 return [
NSCursor resizeUpDownCursor];
1060 return [
NSCursor resizeLeftRightCursor];
1064 return [
NSCursor resizeDownCursor];
1066 return [
NSCursor resizeLeftCursor];
1068 return [
NSCursor resizeRightCursor];
1072 return [
NSCursor operationNotAllowedCursor];
1078 return [
NSCursor closedHandCursor];
1080 return [
NSCursor pointingHandCursor];
1085 return [
NSCursor busyButClickableCursor];
1095 return getImageCursor(shape,
@"eyedropper.pdf", NSMakePoint(6, 24));
1101 return getImageCursor(shape,
@"scrollnsew.pdf", NSMakePoint(16, 16));
1103 return getImageCursor(shape,
@"scrollns.pdf", NSMakePoint(16, 16));
1105 return getImageCursor(shape,
@"scrollew.pdf", NSMakePoint(16, 16));
1107 return getImageCursor(shape,
@"arrowup.pdf", NSMakePoint(16, 16));
1109 return getImageCursor(shape,
@"arrowdown.pdf", NSMakePoint(16, 16));
1111 return getImageCursor(shape,
@"arrowleft.pdf", NSMakePoint(16, 16));
1113 return getImageCursor(shape,
@"arrowright.pdf", NSMakePoint(16, 16));
1115 return getImageCursor(shape,
@"splitv.pdf", NSMakePoint(16, 16));
1117 return getImageCursor(shape,
@"splith.pdf", NSMakePoint(16, 16));
1119 return getImageCursor(shape,
@"paint_cursor_cross.pdf", NSMakePoint(16, 15));
1121 return getImageCursor(shape,
@"paint_cursor_dot.pdf", NSMakePoint(16, 15));
1123 return getImageCursor(shape,
@"crossc.pdf", NSMakePoint(16, 16));
1125 return getImageCursor(shape,
@"handle_left.pdf", NSMakePoint(12, 14));
1127 return getImageCursor(shape,
@"handle_right.pdf", NSMakePoint(10, 14));
1129 return getImageCursor(shape,
@"handle_both.pdf", NSMakePoint(11, 14));
1138 static bool systemCursorVisible =
true;
1141 if (visible != systemCursorVisible) {
1144 systemCursorVisible =
true;
1148 systemCursorVisible =
false;
1153 if (cursor ==
nullptr) {
1232 ch= ((ch >> 1) & 0x55) | ((ch << 1) & 0xAA);
1233 ch= ((ch >> 2) & 0x33) | ((ch << 2) & 0xCC);
1234 ch= ((ch >> 4) & 0x0F) | ((ch << 4) & 0xF0);
1242 shrt = ((shrt >> 1) & 0x5555) | ((shrt << 1) & 0xAAAA);
1243 shrt = ((shrt >> 2) & 0x3333) | ((shrt << 2) & 0xCCCC);
1244 shrt = ((shrt >> 4) & 0x0F0F) | ((shrt << 4) & 0xF0F0);
1245 shrt = ((shrt >> 8) & 0x00FF) | ((shrt << 8) & 0xFF00);
1250 uint8_t *bitmap, uint8_t *
mask,
int sizex,
int sizey,
int hotX,
int hotY,
bool canInvertColor)
1254 [m_customCursor release];
1259 initWithBitmapDataPlanes:nil
1266 colorSpaceName:NSDeviceWhiteColorSpace
1267 bytesPerRow:(sizex / 8 + (sizex % 8 > 0 ? 1 : 0))
1270 uint16_t *cursorBitmap = (uint16_t *)cursorImageRep.bitmapData;
1271 int nbUns16 = cursorImageRep.bytesPerPlane / 2;
1273 for (
int y = 0;
y < nbUns16;
y++) {
1274#if !defined(__LITTLE_ENDIAN__)
1284 if (canInvertColor) {
1285 cursorBitmap[y] = ~cursorBitmap[y];
1289 const NSSize imSize = {(CGFloat)sizex, (CGFloat)sizey};
1290 NSImage *cursorImage = [[
NSImage alloc] initWithSize:imSize];
1293 const NSPoint hotSpotPoint = {(CGFloat)(hotX), (CGFloat)(hotY)};
1308#ifdef WITH_INPUT_IME
1312 [m_openGLView beginIME:x y:y w:w h:h completed:completed];
1315 [m_metalView beginIME:x y:y w:w h:h completed:completed];
1319void GHOST_WindowCocoa::endIME()
1322 [m_openGLView endIME];
1325 [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_kStandardCursorWait
@ 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
@ GHOST_kDecorationColoredTitleBar
static NSCursor * getImageCursor(GHOST_TStandardCursor shape, NSString *name, NSPoint hotspot)
static uint16_t uns16ReverseBits(uint16_t shrt)
static uint8_t uns8ReverseBits(uint8_t ch)
BMesh const char void * data
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
NSCursor * busyButClickableCursor()
virtual int32_t getHeight() const
virtual int32_t getWidth() const
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
NSScreen * getScreen() const
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 applyWindowDecorationStyle() override
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
static NSScreen * getPrimaryScreen()
~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_TWindowDecorationStyleFlags m_windowDecorationStyleFlags
GHOST_Rect m_cursorGrabBounds
GHOST_WindowDecorationStyleSettings m_windowDecorationStyleSettings
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 getValid() const override
bool getCursorVisibility() const override
GHOST_TSuccess activateDrawingContext() override
GHOST_Window(uint32_t width, uint32_t height, GHOST_TWindowState state, const bool wantStereoVisual=false, const bool exclusive=false)
GHOST_TSuccess updateDrawingContext()
GHOST_TSuccess setModifiedState(bool isUnsavedChanges) override
bool m_progressBarVisible
GHOST_SystemCocoa * systemCocoa
GHOST_WindowCocoa * windowCocoa
GHOST_TDragnDropTypes draggedObjectType
GHOST_SystemCocoa * systemCocoa
GHOST_WindowCocoa * windowCocoa
ccl_device_inline float2 mask(const MaskType mask, const float2 a)