Skip to content

Commit 45eccda

Browse files
committed
Make menu font monospaced using ImageRenderer
1 parent 2891df5 commit 45eccda

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

Sources/AppBundle/MenuBar.swift

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,35 @@ public func menuBar(viewModel: TrayMenuModel) -> some Scene {
5151
terminateApp()
5252
}.keyboardShortcut("Q", modifiers: .command)
5353
} label: {
54-
// .font(.system(.body, design: .monospaced)) doesn't work unfortunately :(
55-
Text(viewModel.isEnabled ? viewModel.trayText : "⏸️")
54+
if viewModel.isEnabled {
55+
menuLabel(viewModel: viewModel)
56+
.id(viewModel.trayText.hashValue)
57+
} else {
58+
Text("⏸️")
59+
}
60+
}
61+
}
62+
63+
struct menuLabel: View {
64+
var viewModel: TrayMenuModel
65+
66+
var body: some View {
67+
let renderer = ImageRenderer(content: imageContent)
68+
if let cgImage = renderer.cgImage {
69+
Image(cgImage, scale: 2, label: Text(viewModel.trayText))
70+
.resizable()
71+
.aspectRatio(contentMode: .fit)
72+
} else {
73+
// In case image can't be rendered fallback to plain text
74+
Text(viewModel.trayText)
75+
}
76+
}
77+
78+
// I used a largeTitle font and then use a scale of 2 to make the image look smoother
79+
private var imageContent: some View {
80+
Text(viewModel.trayText)
81+
.font(.system(.largeTitle, design: .monospaced))
82+
.foregroundStyle(Color.white)
5683
}
5784
}
5885

0 commit comments

Comments
 (0)