From 820ee5b0f6a8b38157808febd77bff20f4f9bb75 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Tue, 13 Feb 2024 16:42:32 +0800 Subject: [PATCH] CocoaImpl // Fix NSView.makeSimpleConstraint(). --- .../CocoaExtension_NSView.swift | 53 +++++++++++++++++-- .../UserDef/UserDefRenderableCocoa.swift | 4 +- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_NSView.swift b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_NSView.swift index f9c5d4e0..7063cab8 100644 --- a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_NSView.swift +++ b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_NSView.swift @@ -62,14 +62,59 @@ public extension NSEdgeInsets { public extension NSView { @discardableResult func makeSimpleConstraint( _ attribute: NSLayoutConstraint.Attribute, - relation: NSLayoutConstraint.Relation, + relation givenRelation: NSLayoutConstraint.Relation, value: CGFloat? ) -> NSView { - guard let value = value else { return self } translatesAutoresizingMaskIntoConstraints = false + guard let givenValue = value, givenValue >= 0 else { return self } + var handled = false + constraints.forEach { constraint in + guard constraint.firstAttribute == attribute else { return } + switch (constraint.relation, givenRelation) { + case (.lessThanOrEqual, .lessThanOrEqual): + constraint.constant = Swift.min(givenValue, constraint.constant) + handled = true + case (.lessThanOrEqual, .equal): + constraint.constant = Swift.max(givenValue, constraint.constant) + handled = true + case (.lessThanOrEqual, .greaterThanOrEqual): + switch givenValue { + case constraint.constant, ..