mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-02-21 19:41:11 +00:00
Lowered minimum OS requirement to 10.5 Leopard
This commit is contained in:
parent
f0f0f2a24d
commit
d2d6d2a7f8
2 changed files with 132 additions and 57 deletions
|
@ -1212,7 +1212,7 @@ endif( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE )
|
||||||
|
|
||||||
if( APPLE )
|
if( APPLE )
|
||||||
set_target_properties(zdoom PROPERTIES
|
set_target_properties(zdoom PROPERTIES
|
||||||
LINK_FLAGS "-framework Cocoa -framework IOKit -framework OpenGL"
|
LINK_FLAGS "-framework Carbon -framework Cocoa -framework IOKit -framework OpenGL"
|
||||||
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/cocoa/zdoom-info.plist" )
|
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/cocoa/zdoom-info.plist" )
|
||||||
|
|
||||||
# Fix fmod link so that it can be found in the app bundle.
|
# Fix fmod link so that it can be found in the app bundle.
|
||||||
|
|
|
@ -781,6 +781,19 @@ const Uint16 BYTES_PER_PIXEL = 4;
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
const NSInteger LEVEL_FULLSCREEN = NSMainMenuWindowLevel + 1;
|
||||||
|
const NSInteger LEVEL_WINDOWED = NSNormalWindowLevel;
|
||||||
|
|
||||||
|
const NSUInteger STYLE_MASK_FULLSCREEN = NSBorderlessWindowMask;
|
||||||
|
const NSUInteger STYLE_MASK_WINDOWED = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@interface FullscreenWindow : NSWindow
|
@interface FullscreenWindow : NSWindow
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -788,27 +801,8 @@ const Uint16 BYTES_PER_PIXEL = 4;
|
||||||
|
|
||||||
- (bool)canBecomeKeyWindow;
|
- (bool)canBecomeKeyWindow;
|
||||||
|
|
||||||
- (void)close;
|
- (void)setLevel:(NSInteger)level;
|
||||||
|
- (void)setStyleMask:(NSUInteger)styleMask;
|
||||||
@end
|
|
||||||
|
|
||||||
|
|
||||||
@implementation FullscreenWindow
|
|
||||||
|
|
||||||
- (bool)canBecomeKeyWindow
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
- (void)close
|
|
||||||
{
|
|
||||||
[super close];
|
|
||||||
|
|
||||||
I_ShutdownJoysticks();
|
|
||||||
|
|
||||||
[NSApp terminate:self];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -892,12 +886,51 @@ const Uint16 BYTES_PER_PIXEL = 4;
|
||||||
|
|
||||||
- (void)setMainWindowVisible:(bool)visible;
|
- (void)setMainWindowVisible:(bool)visible;
|
||||||
|
|
||||||
|
- (void)setWindowStyleMask:(NSUInteger)styleMask;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
static ApplicationController* appCtrl;
|
static ApplicationController* appCtrl;
|
||||||
|
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@implementation FullscreenWindow
|
||||||
|
|
||||||
|
- (bool)canBecomeKeyWindow
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setLevel:(NSInteger)level
|
||||||
|
{
|
||||||
|
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
|
||||||
|
[super setLevel:level];
|
||||||
|
#else // 10.5 or earlier
|
||||||
|
// Old Carbon-based way to make fullscreen window above dock and menu
|
||||||
|
// It's supported on 64-bit, but on 10.6 and later the following is preferred:
|
||||||
|
// [NSWindow setLevel:NSMainMenuWindowLevel + 1]
|
||||||
|
|
||||||
|
const SystemUIMode mode = LEVEL_FULLSCREEN == level
|
||||||
|
? kUIModeAllHidden
|
||||||
|
: kUIModeNormal;
|
||||||
|
SetSystemUIMode(mode, 0);
|
||||||
|
#endif // 10.6 or higher
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setStyleMask:(NSUInteger)styleMask
|
||||||
|
{
|
||||||
|
[appCtrl setWindowStyleMask:styleMask];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@implementation ApplicationController
|
@implementation ApplicationController
|
||||||
|
|
||||||
- (id)init
|
- (id)init
|
||||||
|
@ -1040,6 +1073,23 @@ static ApplicationController* appCtrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (FullscreenWindow*)createWindow:(NSUInteger)styleMask
|
||||||
|
{
|
||||||
|
FullscreenWindow* window = [[FullscreenWindow alloc] initWithContentRect:NSMakeRect(0, 0, 640, 480)
|
||||||
|
styleMask:styleMask
|
||||||
|
backing:NSBackingStoreBuffered
|
||||||
|
defer:NO];
|
||||||
|
[window setOpaque:YES];
|
||||||
|
[window makeFirstResponder:self];
|
||||||
|
[window setAcceptsMouseMovedEvents:YES];
|
||||||
|
|
||||||
|
NSButton* closeButton = [window standardWindowButton:NSWindowCloseButton];
|
||||||
|
[closeButton setAction:@selector(closeWindow:)];
|
||||||
|
[closeButton setTarget:self];
|
||||||
|
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)initializeOpenGL
|
- (void)initializeOpenGL
|
||||||
{
|
{
|
||||||
if (m_openGLInitialized)
|
if (m_openGLInitialized)
|
||||||
|
@ -1047,15 +1097,7 @@ static ApplicationController* appCtrl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create window
|
m_window = [self createWindow:STYLE_MASK_WINDOWED];
|
||||||
|
|
||||||
m_window = [[FullscreenWindow alloc] initWithContentRect:NSMakeRect(0, 0, 640, 480)
|
|
||||||
styleMask:NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask
|
|
||||||
backing:NSBackingStoreBuffered
|
|
||||||
defer:NO];
|
|
||||||
[m_window setOpaque:YES];
|
|
||||||
[m_window makeFirstResponder:self];
|
|
||||||
[m_window setAcceptsMouseMovedEvents:YES];
|
|
||||||
|
|
||||||
// Create OpenGL context and view
|
// Create OpenGL context and view
|
||||||
|
|
||||||
|
@ -1093,7 +1135,7 @@ static ApplicationController* appCtrl;
|
||||||
m_openGLInitialized = true;
|
m_openGLInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)switchToFullscreen
|
- (void)setFullscreenModeWidth:(int)width height:(int)height
|
||||||
{
|
{
|
||||||
NSScreen* screen = [m_window screen];
|
NSScreen* screen = [m_window screen];
|
||||||
|
|
||||||
|
@ -1105,42 +1147,50 @@ static ApplicationController* appCtrl;
|
||||||
const float displayWidth = displayRect.size.width;
|
const float displayWidth = displayRect.size.width;
|
||||||
const float displayHeight = displayRect.size.height;
|
const float displayHeight = displayRect.size.height;
|
||||||
|
|
||||||
const float pixelScaleFactorX = displayWidth / static_cast<float>(m_width );
|
const float pixelScaleFactorX = displayWidth / static_cast<float>(width );
|
||||||
const float pixelScaleFactorY = displayHeight / static_cast<float>(m_height);
|
const float pixelScaleFactorY = displayHeight / static_cast<float>(height);
|
||||||
|
|
||||||
rbOpts.pixelScale = std::min(pixelScaleFactorX, pixelScaleFactorY);
|
rbOpts.pixelScale = std::min(pixelScaleFactorX, pixelScaleFactorY);
|
||||||
|
|
||||||
rbOpts.width = m_width * rbOpts.pixelScale;
|
rbOpts.width = width * rbOpts.pixelScale;
|
||||||
rbOpts.height = m_height * rbOpts.pixelScale;
|
rbOpts.height = height * rbOpts.pixelScale;
|
||||||
|
|
||||||
rbOpts.shiftX = (displayWidth - rbOpts.width ) / 2.0f;
|
rbOpts.shiftX = (displayWidth - rbOpts.width ) / 2.0f;
|
||||||
rbOpts.shiftY = (displayHeight - rbOpts.height) / 2.0f;
|
rbOpts.shiftY = (displayHeight - rbOpts.height) / 2.0f;
|
||||||
|
|
||||||
[m_window setLevel:NSMainMenuWindowLevel + 1];
|
if (!m_fullscreen)
|
||||||
[m_window setStyleMask:NSBorderlessWindowMask];
|
{
|
||||||
[m_window setHidesOnDeactivate:YES];
|
[m_window setLevel:LEVEL_FULLSCREEN];
|
||||||
|
[m_window setStyleMask:STYLE_MASK_FULLSCREEN];
|
||||||
|
[m_window setHidesOnDeactivate:YES];
|
||||||
|
}
|
||||||
|
|
||||||
[m_window setFrame:displayRect display:YES];
|
[m_window setFrame:displayRect display:YES];
|
||||||
[m_window setFrameOrigin:NSMakePoint(0.0f, 0.0f)];
|
[m_window setFrameOrigin:NSMakePoint(0.0f, 0.0f)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)switchToWindowed
|
- (void)setWindowedModeWidth:(int)width height:(int)height
|
||||||
{
|
{
|
||||||
rbOpts.pixelScale = 1.0f;
|
rbOpts.pixelScale = 1.0f;
|
||||||
|
|
||||||
rbOpts.width = static_cast<float>(m_width );
|
rbOpts.width = static_cast<float>(width );
|
||||||
rbOpts.height = static_cast<float>(m_height);
|
rbOpts.height = static_cast<float>(height);
|
||||||
|
|
||||||
rbOpts.shiftX = 0.0f;
|
rbOpts.shiftX = 0.0f;
|
||||||
rbOpts.shiftY = 0.0f;
|
rbOpts.shiftY = 0.0f;
|
||||||
|
|
||||||
const NSSize windowPixelSize = NSMakeSize(m_width, m_height);
|
const NSSize windowPixelSize = NSMakeSize(width, height);
|
||||||
const NSSize windowSize = vid_hidpi
|
const NSSize windowSize = vid_hidpi
|
||||||
? [[m_window contentView] convertSizeFromBacking:windowPixelSize]
|
? [[m_window contentView] convertSizeFromBacking:windowPixelSize]
|
||||||
: windowPixelSize;
|
: windowPixelSize;
|
||||||
|
|
||||||
[m_window setLevel:NSNormalWindowLevel];
|
if (m_fullscreen)
|
||||||
[m_window setStyleMask:NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask];
|
{
|
||||||
[m_window setHidesOnDeactivate:NO];
|
[m_window setLevel:LEVEL_WINDOWED];
|
||||||
|
[m_window setStyleMask:STYLE_MASK_WINDOWED];
|
||||||
|
[m_window setHidesOnDeactivate:NO];
|
||||||
|
}
|
||||||
|
|
||||||
[m_window setContentSize:windowSize];
|
[m_window setContentSize:windowSize];
|
||||||
[m_window center];
|
[m_window center];
|
||||||
}
|
}
|
||||||
|
@ -1155,33 +1205,28 @@ static ApplicationController* appCtrl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_fullscreen = fullscreen;
|
|
||||||
m_width = width;
|
|
||||||
m_height = height;
|
|
||||||
m_hiDPI = hiDPI;
|
|
||||||
|
|
||||||
[self initializeOpenGL];
|
[self initializeOpenGL];
|
||||||
|
|
||||||
if (IsHiDPISupported())
|
if (IsHiDPISupported())
|
||||||
{
|
{
|
||||||
NSOpenGLView* const glView = [m_window contentView];
|
NSOpenGLView* const glView = [m_window contentView];
|
||||||
[glView setWantsBestResolutionOpenGLSurface:m_hiDPI];
|
[glView setWantsBestResolutionOpenGLSurface:hiDPI];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_fullscreen)
|
if (fullscreen)
|
||||||
{
|
{
|
||||||
[self switchToFullscreen];
|
[self setFullscreenModeWidth:width height:height];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
[self switchToWindowed];
|
[self setWindowedModeWidth:width height:height];
|
||||||
}
|
}
|
||||||
|
|
||||||
rbOpts.dirty = true;
|
rbOpts.dirty = true;
|
||||||
|
|
||||||
const NSSize viewSize = GetRealContentViewSize(m_window);
|
const NSSize viewSize = GetRealContentViewSize(m_window);
|
||||||
|
|
||||||
glViewport(0, 0, viewSize.width, viewSize.height);
|
glViewport(0, 0, static_cast<GLsizei>(viewSize.width), static_cast<GLsizei>(viewSize.height));
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
@ -1194,7 +1239,12 @@ static ApplicationController* appCtrl;
|
||||||
if (![m_window isKeyWindow])
|
if (![m_window isKeyWindow])
|
||||||
{
|
{
|
||||||
[m_window makeKeyAndOrderFront:nil];
|
[m_window makeKeyAndOrderFront:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_fullscreen = fullscreen;
|
||||||
|
m_width = width;
|
||||||
|
m_height = height;
|
||||||
|
m_hiDPI = hiDPI;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)useHiDPI:(bool)hiDPI
|
- (void)useHiDPI:(bool)hiDPI
|
||||||
|
@ -1321,6 +1371,31 @@ static ApplicationController* appCtrl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)setWindowStyleMask:(NSUInteger)styleMask
|
||||||
|
{
|
||||||
|
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
|
||||||
|
[m_window setStyleMask:styleMask];
|
||||||
|
#else // 10.5 or earlier
|
||||||
|
// Before 10.6 it's impossible to change window's style mask
|
||||||
|
// To workaround this new window should be created with required style mask
|
||||||
|
|
||||||
|
FullscreenWindow* tempWindow = [self createWindow:styleMask];
|
||||||
|
[tempWindow setContentView:[m_window contentView]];
|
||||||
|
|
||||||
|
[m_window close];
|
||||||
|
m_window = tempWindow;
|
||||||
|
#endif // 10.6 or higher
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)closeWindow:(id)sender
|
||||||
|
{
|
||||||
|
I_ShutdownJoysticks();
|
||||||
|
|
||||||
|
[NSApp terminate:sender];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue