Merge pull request #1440 from qwerasd205/macos-fix-resize-jello

fix(macOS): Prevent squash/stretch during resize
This commit is contained in:
Mitchell Hashimoto
2024-02-02 08:42:07 -08:00
committed by GitHub
6 changed files with 18 additions and 0 deletions

6
pkg/macos/animation.zig Normal file
View File

@ -0,0 +1,6 @@
pub const c = @import("animation/c.zig");
pub usingnamespace @import("animation/layer.zig");
test {
@import("std").testing.refAllDecls(@This());
}

View File

@ -0,0 +1,3 @@
pub usingnamespace @cImport({
@cInclude("QuartzCore/CALayer.h");
});

View File

@ -0,0 +1,2 @@
/// https://developer.apple.com/documentation/quartzcore/calayer/contents_gravity_values?language=objc
pub extern "c" const kCAGravityTopLeft: *anyopaque;

View File

@ -32,6 +32,7 @@ pub fn build(b: *std.Build) !void {
lib.linkFramework("CoreGraphics"); lib.linkFramework("CoreGraphics");
lib.linkFramework("CoreText"); lib.linkFramework("CoreText");
lib.linkFramework("CoreVideo"); lib.linkFramework("CoreVideo");
lib.linkFramework("QuartzCore");
if (target.result.os.tag == .macos) { if (target.result.os.tag == .macos) {
lib.linkFramework("Carbon"); lib.linkFramework("Carbon");
module.linkFramework("Carbon", .{}); module.linkFramework("Carbon", .{});
@ -42,6 +43,7 @@ pub fn build(b: *std.Build) !void {
module.linkFramework("CoreGraphics", .{}); module.linkFramework("CoreGraphics", .{});
module.linkFramework("CoreText", .{}); module.linkFramework("CoreText", .{});
module.linkFramework("CoreVideo", .{}); module.linkFramework("CoreVideo", .{});
module.linkFramework("QuartzCore", .{});
if (!target.query.isNative()) { if (!target.query.isNative()) {
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, &lib.root_module);

View File

@ -1,4 +1,5 @@
pub const foundation = @import("foundation.zig"); pub const foundation = @import("foundation.zig");
pub const animation = @import("animation.zig");
pub const graphics = @import("graphics.zig"); pub const graphics = @import("graphics.zig");
pub const os = @import("os.zig"); pub const os = @import("os.zig");
pub const text = @import("text.zig"); pub const text = @import("text.zig");

View File

@ -327,6 +327,10 @@ pub fn init(alloc: Allocator, options: renderer.Options) !Metal {
if (comptime builtin.os.tag == .macos) { if (comptime builtin.os.tag == .macos) {
info.view.setProperty("layer", layer.value); info.view.setProperty("layer", layer.value);
info.view.setProperty("wantsLayer", true); info.view.setProperty("wantsLayer", true);
// The layer gravity is set to top-left so that when we resize
// the view, the contents aren't stretched before a redraw.
layer.setProperty("contentsGravity", macos.animation.kCAGravityTopLeft);
} }
// Ensure that our metal layer has a content scale set to match the // Ensure that our metal layer has a content scale set to match the