mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
font: if a codepoint is emoji presentation, prefer that for shaping
Fixes #787
This commit is contained in:
@ -669,6 +669,10 @@ fn addDeps(
|
|||||||
.@"enable-freetype" = true,
|
.@"enable-freetype" = true,
|
||||||
.@"enable-coretext" = font_backend.hasCoretext(),
|
.@"enable-coretext" = font_backend.hasCoretext(),
|
||||||
});
|
});
|
||||||
|
const ziglyph_dep = b.dependency("ziglyph", .{
|
||||||
|
.target = step.target,
|
||||||
|
.optimize = step.optimize,
|
||||||
|
});
|
||||||
|
|
||||||
// Wasm we do manually since it is such a different build.
|
// Wasm we do manually since it is such a different build.
|
||||||
if (step.target.getCpuArch() == .wasm32) {
|
if (step.target.getCpuArch() == .wasm32) {
|
||||||
@ -716,6 +720,7 @@ fn addDeps(
|
|||||||
step.addModule("xev", libxev_dep.module("xev"));
|
step.addModule("xev", libxev_dep.module("xev"));
|
||||||
step.addModule("pixman", pixman_dep.module("pixman"));
|
step.addModule("pixman", pixman_dep.module("pixman"));
|
||||||
step.addModule("utf8proc", utf8proc_dep.module("utf8proc"));
|
step.addModule("utf8proc", utf8proc_dep.module("utf8proc"));
|
||||||
|
step.addModule("ziglyph", ziglyph_dep.module("ziglyph"));
|
||||||
|
|
||||||
// Mac Stuff
|
// Mac Stuff
|
||||||
if (step.target.isDarwin()) {
|
if (step.target.isDarwin()) {
|
||||||
|
@ -4,6 +4,10 @@
|
|||||||
.paths = .{""},
|
.paths = .{""},
|
||||||
.dependencies = .{
|
.dependencies = .{
|
||||||
// Zig libs
|
// Zig libs
|
||||||
|
.glfw = .{
|
||||||
|
.url = "https://pkg.machengine.org/glfw/14181bd28aa65915262ac3b4549bbd2dc70bbaa5.tar.gz",
|
||||||
|
.hash = "1220c6bb317ae3948b95161b9706777dde0509e72e8b35b62b92898aef801897d904",
|
||||||
|
},
|
||||||
.libxev = .{
|
.libxev = .{
|
||||||
.url = "https://github.com/mitchellh/libxev/archive/5ecbc871f3bfa80fb7bf0fa853866cb93b99bc18.tar.gz",
|
.url = "https://github.com/mitchellh/libxev/archive/5ecbc871f3bfa80fb7bf0fa853866cb93b99bc18.tar.gz",
|
||||||
.hash = "1220416854e424601ecc9814afb461a5dc9cf95db5917d82f794594a58ffc723b82c",
|
.hash = "1220416854e424601ecc9814afb461a5dc9cf95db5917d82f794594a58ffc723b82c",
|
||||||
@ -20,10 +24,9 @@
|
|||||||
.url = "https://github.com/mitchellh/zig-js/archive/60ac42ab137461cdba2b38cc6c5e16376470aae6.tar.gz",
|
.url = "https://github.com/mitchellh/zig-js/archive/60ac42ab137461cdba2b38cc6c5e16376470aae6.tar.gz",
|
||||||
.hash = "1220319b42fbc0116f3f198343256018e9f1da9483cef259201afe4ebab0ce0d8f6a",
|
.hash = "1220319b42fbc0116f3f198343256018e9f1da9483cef259201afe4ebab0ce0d8f6a",
|
||||||
},
|
},
|
||||||
|
.ziglyph = .{
|
||||||
.glfw = .{
|
.url = "https://codeberg.org/dude_the_builder/ziglyph/archive/v0.11.1.tar.gz",
|
||||||
.url = "https://pkg.machengine.org/glfw/14181bd28aa65915262ac3b4549bbd2dc70bbaa5.tar.gz",
|
.hash = "1220dee955839b7f267c1bb21e0ee60888c08f408c30f0722b243cabcc8cce8b7508",
|
||||||
.hash = "1220c6bb317ae3948b95161b9706777dde0509e72e8b35b62b92898aef801897d904",
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// C libs
|
// C libs
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
|
const ziglyph = @import("ziglyph");
|
||||||
const font = @import("../main.zig");
|
const font = @import("../main.zig");
|
||||||
const shape = @import("../shape.zig");
|
const shape = @import("../shape.zig");
|
||||||
const terminal = @import("../../terminal/main.zig");
|
const terminal = @import("../../terminal/main.zig");
|
||||||
@ -109,12 +110,20 @@ pub const RunIterator = struct {
|
|||||||
// presentation format must be directly adjacent to the codepoint.
|
// presentation format must be directly adjacent to the codepoint.
|
||||||
var it = self.row.codepointIterator(j);
|
var it = self.row.codepointIterator(j);
|
||||||
if (it.next()) |cp| {
|
if (it.next()) |cp| {
|
||||||
if (cp == 0xFE0E) break :p font.Presentation.text;
|
if (cp == 0xFE0E) break :p .text;
|
||||||
if (cp == 0xFE0F) break :p font.Presentation.emoji;
|
if (cp == 0xFE0F) break :p .emoji;
|
||||||
}
|
}
|
||||||
|
|
||||||
break :p null;
|
break :p null;
|
||||||
} else null;
|
} else emoji: {
|
||||||
|
// If we're not a grapheme, our individual char could be
|
||||||
|
// an emoji so we want to check if we expect emoji presentation.
|
||||||
|
if (ziglyph.emoji.isEmojiPresentation(@intCast(cell.char))) {
|
||||||
|
break :emoji .emoji;
|
||||||
|
}
|
||||||
|
|
||||||
|
break :emoji .text;
|
||||||
|
};
|
||||||
|
|
||||||
// If our cursor is on this line then we break the run around the
|
// If our cursor is on this line then we break the run around the
|
||||||
// cursor. This means that any row with a cursor has at least
|
// cursor. This means that any row with a cursor has at least
|
||||||
|
Reference in New Issue
Block a user