diff options
Diffstat (limited to 'intern')
-rw-r--r-- | intern/clog/clog.c | 38 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_ContextCGL.mm | 2 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_SystemCocoa.mm | 5 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_SystemX11.h | 6 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_WindowCocoa.mm | 5 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_WindowViewCocoa.h | 4 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_WindowWin32.cpp | 11 |
7 files changed, 42 insertions, 29 deletions
diff --git a/intern/clog/clog.c b/intern/clog/clog.c index 2bc3985c71f..a26ac10a61f 100644 --- a/intern/clog/clog.c +++ b/intern/clog/clog.c @@ -1,4 +1,4 @@ -/* +/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 @@ -38,8 +38,13 @@ #endif #if defined(_MSC_VER) +# include <Windows.h> + +# include <VersionHelpers.h> /* This needs to be included after Windows.h. */ # include <io.h> -# include <windows.h> +# if !defined(ENABLE_VIRTUAL_TERMINAL_PROCESSING) +# define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 +# endif #endif /* For printing timestamp. */ @@ -228,6 +233,9 @@ enum eCLogColor { #define COLOR_LEN (COLOR_RESET + 1) static const char *clg_color_table[COLOR_LEN] = {NULL}; +#ifdef _WIN32 +static DWORD clg_previous_console_mode = 0; +#endif static void clg_color_table_init(bool use_color) { @@ -548,13 +556,22 @@ static void CLG_ctx_output_set(CLogContext *ctx, void *file_handle) #if defined(__unix__) || defined(__APPLE__) ctx->use_color = isatty(ctx->output); #elif defined(WIN32) - /* Windows Terminal supports color like the Linux terminals do while the standard console does - * not, the way to tell the two apart is to look at the `WT_SESSION` environment variable which - * will only be defined for Windows Terminal. */ - - /* #getenv is used here rather than #BLI_getenv since it would be a bad level call - * and there are no benefits for using it in this context. */ - ctx->use_color = isatty(ctx->output) && getenv("WT_SESSION"); + /* As of Windows 10 build 18298 all the standard consoles supports color + * like the Linux Terminal do, but it needs to be turned on. + * To turn on colors we need to enable virtual terminal processing by passing the flag + * ENABLE_VIRTUAL_TERMINAL_PROCESSING into SetConsoleMode. + * If the system doesn't support virtual terminal processing it will fail silently and the flag + * will not be set. */ + + GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &clg_previous_console_mode); + + ctx->use_color = 0; + if (IsWindows10OrGreater() && isatty(ctx->output)) { + DWORD mode = clg_previous_console_mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING; + if (SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), mode)) { + ctx->use_color = 1; + } + } #endif } @@ -638,6 +655,9 @@ static CLogContext *CLG_ctx_init(void) static void CLG_ctx_free(CLogContext *ctx) { +#if defined(WIN32) + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), clg_previous_console_mode); +#endif while (ctx->types != NULL) { CLG_LogType *item = ctx->types; ctx->types = item->next; diff --git a/intern/ghost/intern/GHOST_ContextCGL.mm b/intern/ghost/intern/GHOST_ContextCGL.mm index ab76b78e6df..687173ded09 100644 --- a/intern/ghost/intern/GHOST_ContextCGL.mm +++ b/intern/ghost/intern/GHOST_ContextCGL.mm @@ -278,7 +278,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext() #ifdef GHOST_WAIT_FOR_VSYNC { GLint swapInt = 1; - /* wait for vsync, to avoid tearing artifacts */ + /* Wait for vertical-sync, to avoid tearing artifacts. */ [m_openGLContext setValues:&swapInt forParameter:NSOpenGLCPSwapInterval]; } #endif diff --git a/intern/ghost/intern/GHOST_SystemCocoa.mm b/intern/ghost/intern/GHOST_SystemCocoa.mm index 3b20c95c954..4a23b30e078 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.mm +++ b/intern/ghost/intern/GHOST_SystemCocoa.mm @@ -646,6 +646,11 @@ GHOST_TSuccess GHOST_SystemCocoa::init() [NSApp setDelegate:appDelegate]; } + // AppKit provides automatic window tabbing. Blender is a single-tabbed application without a + // macOS tab bar, and should explicitly opt-out of this. This is also controlled by the macOS + // user default #NSWindowTabbingEnabled. + NSWindow.allowsAutomaticWindowTabbing = NO; + [NSApp finishLaunching]; [pool drain]; diff --git a/intern/ghost/intern/GHOST_SystemX11.h b/intern/ghost/intern/GHOST_SystemX11.h index a7e325bc9e1..ed5e945f69e 100644 --- a/intern/ghost/intern/GHOST_SystemX11.h +++ b/intern/ghost/intern/GHOST_SystemX11.h @@ -34,9 +34,9 @@ #ifdef WITH_X11_XINPUT # include <X11/extensions/XInput.h> -/* Disable xinput warp, currently not implemented by Xorg for multi-head display. - * (see comment in xserver "Xi/xiwarppointer.c" -> "FIXME: panoramix stuff is missing" ~ v1.13.4) - * If this is supported we can add back xinput for warping (fixing T48901). +/* Disable XINPUT warp, currently not implemented by Xorg for multi-head display. + * (see comment in XSERVER `Xi/xiwarppointer.c` -> `FIXME: panoramix stuff is missing` ~ v1.13.4) + * If this is supported we can add back XINPUT for warping (fixing T48901). * For now disable (see T50383). */ // # define USE_X11_XINPUT_WARP #endif diff --git a/intern/ghost/intern/GHOST_WindowCocoa.mm b/intern/ghost/intern/GHOST_WindowCocoa.mm index 73927317b24..add7962d924 100644 --- a/intern/ghost/intern/GHOST_WindowCocoa.mm +++ b/intern/ghost/intern/GHOST_WindowCocoa.mm @@ -336,11 +336,6 @@ GHOST_WindowCocoa::GHOST_WindowCocoa(GHOST_SystemCocoa *systemCocoa, backing:NSBackingStoreBuffered defer:NO]; - if (m_window == nil) { - [pool drain]; - return; - } - [m_window setSystemAndWindowCocoa:systemCocoa windowCocoa:this]; // Forbid to resize the window below the blender defined minimum one diff --git a/intern/ghost/intern/GHOST_WindowViewCocoa.h b/intern/ghost/intern/GHOST_WindowViewCocoa.h index 14c70382916..f47e02704b2 100644 --- a/intern/ghost/intern/GHOST_WindowViewCocoa.h +++ b/intern/ghost/intern/GHOST_WindowViewCocoa.h @@ -253,7 +253,7 @@ - (NSAttributedString *)attributedSubstringFromRange:(NSRange)range { - return [NSAttributedString new]; // XXX does this leak? + return [[[NSAttributedString alloc] init] autorelease]; } - (NSRange)markedRange @@ -284,7 +284,7 @@ - (NSArray *)validAttributesForMarkedText { - return [NSArray array]; // XXX does this leak? + return [NSArray array]; } @end diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp index ad5643fcd89..de4e77ffc24 100644 --- a/intern/ghost/intern/GHOST_WindowWin32.cpp +++ b/intern/ghost/intern/GHOST_WindowWin32.cpp @@ -92,16 +92,11 @@ GHOST_WindowWin32::GHOST_WindowWin32(GHOST_SystemWin32 *system, { wchar_t *title_16 = alloc_utf16_from_8((char *)title, 0); RECT win_rect = {left, top, (long)(left + width), (long)(top + height)}; - RECT parent_rect = {0, 0, 0, 0}; // Initialize tablet variables memset(&m_wintab, 0, sizeof(m_wintab)); m_tabletData = GHOST_TABLET_DATA_NONE; - if (parentwindow) { - GetWindowRect(m_parentWindowHwnd, &parent_rect); - } - DWORD style = parentwindow ? WS_POPUPWINDOW | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SIZEBOX : WS_OVERLAPPEDWINDOW; @@ -124,9 +119,7 @@ GHOST_WindowWin32::GHOST_WindowWin32(GHOST_SystemWin32 *system, MONITORINFOEX monitor; monitor.cbSize = sizeof(MONITORINFOEX); monitor.dwFlags = 0; - GetMonitorInfo( - MonitorFromRect(parentwindow ? &parent_rect : &win_rect, MONITOR_DEFAULTTONEAREST), - &monitor); + GetMonitorInfo(MonitorFromRect(&win_rect, MONITOR_DEFAULTTONEAREST), &monitor); /* Adjust our requested size to allow for caption and borders and constrain to monitor. */ AdjustWindowRectEx(&win_rect, WS_CAPTION, FALSE, 0); @@ -1200,7 +1193,7 @@ GHOST_TSuccess GHOST_WindowWin32::setWindowCustomCursorShape(GHOST_TUns8 *bitmap GHOST_TUns32 fullBitRow, fullMaskRow; int x, y, cols; - cols = sizeX / 8; /* Number of whole bytes per row (width of bm/mask). */ + cols = sizeX / 8; /* Number of whole bytes per row (width of bitmap/mask). */ if (sizeX % 8) cols++; |