fix: correctly display right-to-left languages

This commit is contained in:
Louis Pontoise authored and lwouis committed 2020-05-06 04:34:58 +09:00
1 parent 37d8c98503
commit 89f2df4fe5
5 files changed
+9 -11

No files matched your search

+4 -6
View File
@@ -28,20 +28,18 @@ class FeedbackWindow: NSWindow {
private func setupView() { private func setupView() {
let appIcon = NSImageView(image: NSImage(named: "app-icon")!.resizedCopy(80, 80)) let appIcon = NSImageView(image: NSImage(named: "app-icon")!.resizedCopy(80, 80))
appIcon.imageScaling = .scaleNone appIcon.imageScaling = .scaleNone
let appText = NSStackView(views: [ let appText = StackView([
BoldLabel(NSLocalizedString("Share improvement ideas, or report bugs", comment: "")), BoldLabel(NSLocalizedString("Share improvement ideas, or report bugs", comment: "")),
HyperlinkLabel(NSLocalizedString("View existing discussions", comment: ""), App.repository + "/issues"), HyperlinkLabel(NSLocalizedString("View existing discussions", comment: ""), App.repository + "/issues"),
]) ], .vertical)
appText.orientation = .vertical
appText.alignment = .left
appText.spacing = GridView.interPadding / 2 appText.spacing = GridView.interPadding / 2
let header = NSStackView(views: [appIcon, appText]) let header = NSStackView(views: [appIcon, appText])
header.spacing = GridView.interPadding header.spacing = GridView.interPadding
sendButton = NSButton(title: NSLocalizedString("Send", comment: ""), target: nil, action: #selector(sendCallback)) sendButton = NSButton(title: NSLocalizedString("Send", comment: ""), target: nil, action: #selector(sendCallback))
sendButton.keyEquivalent = "\r" sendButton.keyEquivalent = "\r"
sendButton.isEnabled = false sendButton.isEnabled = false
let buttons = NSStackView(views: [ let buttons = StackView([
NSButton(title: NSLocalizedString("Cancel", comment: ""), target: nil, action: #selector(cancelCallback)), NSButton(title: NSLocalizedString("Cancel", comment: ""), target: nil, action: #selector(cancel)),
sendButton, sendButton,
]) ])
buttons.spacing = GridView.interPadding buttons.spacing = GridView.interPadding
+1 -1
View File
@@ -6,7 +6,7 @@ class StackView: NSStackView {
convenience init(_ views: [NSView], _ orientation: NSUserInterfaceLayoutOrientation = .horizontal, top: CGFloat = 0, right: CGFloat = 0, bottom: CGFloat = 0, left: CGFloat = 0) { convenience init(_ views: [NSView], _ orientation: NSUserInterfaceLayoutOrientation = .horizontal, top: CGFloat = 0, right: CGFloat = 0, bottom: CGFloat = 0, left: CGFloat = 0) {
self.init(views: views) self.init(views: views)
alignmentRectInsets_ = NSEdgeInsets(top: top, left: left, bottom: bottom, right: right) alignmentRectInsets_ = NSEdgeInsets(top: top, left: left, bottom: bottom, right: right)
alignment = orientation == .horizontal ? .firstBaseline : .left alignment = orientation == .horizontal ? .firstBaseline : .leading
// workaround: for some reason, horizontal stackviews with a RecorderControl have extra fittingSize.height // workaround: for some reason, horizontal stackviews with a RecorderControl have extra fittingSize.height
if orientation == .horizontal && views.first(where: { $0 is CustomRecorderControl }) != nil { if orientation == .horizontal && views.first(where: { $0 is CustomRecorderControl }) != nil {
fit(fittingSize.width, fittingSize.height - 7) fit(fittingSize.width, fittingSize.height - 7)
@@ -37,8 +37,10 @@ class TextFieldCell: NSTextFieldCell {
stringValue = "" stringValue = ""
placeholderString = placeholder placeholderString = placeholder
self.usesSingleLineMode = usesSingleLineMode self.usesSingleLineMode = usesSingleLineMode
alignment = .natural // appkit bug: the docs say default is .natural but it's .left
} }
// add padding all around
override func drawingRect(forBounds rect: NSRect) -> NSRect { override func drawingRect(forBounds rect: NSRect) -> NSRect {
return super.drawingRect(forBounds: NSMakeRect( return super.drawingRect(forBounds: NSMakeRect(
rect.origin.x + TextArea.padding, rect.origin.x + TextArea.padding,
@@ -35,7 +35,7 @@ class LabelAndControl: NSObject {
static func makeLabelWithSlider(_ labelText: String, _ rawName: String, _ minValue: Double, _ maxValue: Double, _ numberOfTickMarks: Int, _ allowsTickMarkValuesOnly: Bool, _ unitText: String = "") -> [NSView] { static func makeLabelWithSlider(_ labelText: String, _ rawName: String, _ minValue: Double, _ maxValue: Double, _ numberOfTickMarks: Int, _ allowsTickMarkValuesOnly: Bool, _ unitText: String = "") -> [NSView] {
let value = Preferences.getString(rawName)! let value = Preferences.getString(rawName)!
let suffixText = value + " " + unitText let suffixText = MeasurementFormatter().string(from: Measurement(value: Double(value)!, unit: Unit(symbol: unitText)))
let slider = NSSlider() let slider = NSSlider()
slider.minValue = minValue slider.minValue = minValue
slider.maxValue = maxValue slider.maxValue = maxValue
@@ -22,9 +22,7 @@ class UpdatesTab: NSViewController, PreferencePane {
periodicallyInstall.fit() periodicallyInstall.fit()
let policyLabel = NSTextField(wrappingLabelWithString: NSLocalizedString("Updates policy:", comment: "")) let policyLabel = NSTextField(wrappingLabelWithString: NSLocalizedString("Updates policy:", comment: ""))
policyLabel.isSelectable = false policyLabel.isSelectable = false
let policies = NSStackView(views: [dontPeriodicallyCheck, periodicallyCheck, periodicallyInstall]) let policies = StackView([dontPeriodicallyCheck, periodicallyCheck, periodicallyInstall], .vertical)
policies.alignment = .left
policies.orientation = .vertical
policies.spacing = GridView.interPadding / 2 policies.spacing = GridView.interPadding / 2
let grid = GridView([ let grid = GridView([
[policyLabel, policies], [policyLabel, policies],