summaryrefslogtreecommitdiffstats
path: root/external/skia/tdf147342.patch.0
diff options
context:
space:
mode:
Diffstat (limited to 'external/skia/tdf147342.patch.0')
-rw-r--r--external/skia/tdf147342.patch.0110
1 files changed, 110 insertions, 0 deletions
diff --git a/external/skia/tdf147342.patch.0 b/external/skia/tdf147342.patch.0
new file mode 100644
index 0000000000..3b50038c07
--- /dev/null
+++ b/external/skia/tdf147342.patch.0
@@ -0,0 +1,110 @@
+--- tools/sk_app/mac/WindowContextFactory_mac.h 2022-02-16 06:03:39.000000000 -0500
++++ tools/sk_app/mac/WindowContextFactory_mac.h 2023-01-25 08:09:00.000000000 -0500
+@@ -19,15 +19,8 @@
+
+ struct DisplayParams;
+
+-static inline CGFloat GetBackingScaleFactor(NSView* view) {
+- #ifdef SK_BUILD_FOR_IOS
+- UIScreen* screen = view.window.screen ?: [UIScreen mainScreen];
+- return screen.nativeScale;
+- #else
+- NSScreen* screen = view.window.screen ?: [NSScreen mainScreen];
+- return screen.backingScaleFactor;
+- #endif
+-}
++SK_API CGFloat GetBackingScaleFactor(NSView* view);
++SK_API void ResetBackingScaleFactor();
+
+ namespace window_context_factory {
+
+--- tools/sk_app/mac/MetalWindowContext_mac.mm 2021-11-25 10:39:27.000000000 -0500
++++ tools/sk_app/mac/MetalWindowContext_mac.mm 2023-01-28 14:55:57.000000000 -0500
+@@ -11,6 +11,8 @@
+ #import <Cocoa/Cocoa.h>
+ #import <QuartzCore/CAConstraintLayoutManager.h>
+
++#include <sal/log.hxx>
++
+ using sk_app::DisplayParams;
+ using sk_app::window_context_factory::MacWindowInfo;
+ using sk_app::MetalWindowContext;
+@@ -87,6 +89,18 @@
+ fMetalLayer.drawableSize = backingSize;
+ fMetalLayer.contentsScale = backingScaleFactor;
+
++ // Related: tdf#147342 Copy layer's colorspace to window's colorspace
++ // This method is now called when the window's backing properties have
++ // changed so copy any colorspace changes.
++ NSColorSpace* cs = fMainView.window.colorSpace;
++ fMetalLayer.colorspace = cs.CGColorSpace;
++ // Related tdf#145988 Reset layer's pixel format to MTLPixelFormatBGRA8Unorm
++ // Skia initally sets the layer's pixel format to be BGRA8888 but macOS
++ // may change the layer's pixel format when a window has moved to a screen
++ // with 30-bit color depth so reset it back to BGRA8888.
++ SAL_WARN_IF(fMetalLayer.pixelFormat != MTLPixelFormatBGRA8Unorm, "vcl.skia.metal", "CAMetalLayer pixel format is " << fMetalLayer.pixelFormat << " but should be " << MTLPixelFormatBGRA8Unorm << " (MTLPixelFormatBGRA8Unorm)");
++ fMetalLayer.pixelFormat = MTLPixelFormatBGRA8Unorm;
++
+ fWidth = backingSize.width;
+ fHeight = backingSize.height;
+ }
+--- /dev/null 2023-01-25 09:20:55.000000000 -0500
++++ tools/sk_app/mac/WindowContextFactory_mac.mm 2023-01-25 09:21:22.000000000 -0500
+@@ -0,0 +1,57 @@
++/*
++ * Use of this source code is governed by a BSD-style license that can be
++ * found in the LICENSE file.
++ */
++
++#include "tools/sk_app/mac/WindowContextFactory_mac.h"
++
++namespace sk_app {
++
++static bool bWindowScaling = false;
++static float fWindowScale = 1.0f;
++
++CGFloat GetBackingScaleFactor(NSView* view) {
++ #ifdef SK_BUILD_FOR_IOS
++ UIScreen* screen = view.window.screen ?: [UIScreen mainScreen];
++ return screen.nativeScale;
++ #else
++ // Related: tdf#147342 This should always be an exact copy of the
++ // sal::aqua::getWindowScaling() function in the following file:
++ // vcl/osx/salgdiutils.cxx
++ (void)view;
++
++ if (!bWindowScaling)
++ {
++ NSArray *aScreens = [NSScreen screens];
++ if (aScreens)
++ {
++ for (NSScreen *aScreen : aScreens)
++ {
++ float fScale = [aScreen backingScaleFactor];
++ if (fScale > fWindowScale)
++ fWindowScale = fScale;
++ }
++ bWindowScaling = true;
++ }
++ if( const char* env = getenv("SAL_FORCE_HIDPI_SCALING"))
++ {
++ fWindowScale = atof(env);
++ bWindowScaling = true;
++ }
++ }
++ return fWindowScale;
++ #endif
++}
++
++void ResetBackingScaleFactor() {
++ #ifndef SK_BUILD_FOR_IOS
++ // Related: tdf#147342 Force recalculation of the window scaling but keep
++ // the previous window scaling as the minimum so that we don't lose the
++ // resolution in cached images if a HiDPI monitor is disconnected and
++ // then reconnected.
++ bWindowScaling = false;
++ GetBackingScaleFactor(nil);
++ #endif
++}
++
++} // namespace sk_app