From 819d778b463a6493a79befb0e3766dd4fa8ebc52 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Tue, 11 Aug 2015 20:10:12 -0400 Subject: [PATCH] Some layout.swift changes. Added support for the metrics parameter and a fitting size calculation function; this will be needed for the next experiment with boxes. --- redo/osxaltest/box.swift | 8 +++----- redo/osxaltest/layout.swift | 12 ++++++++++-- redo/osxaltest/spinbox.swift | 6 +++--- redo/osxaltest/window.swift | 4 ++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/redo/osxaltest/box.swift b/redo/osxaltest/box.swift index ad5f3c55..2a7d358c 100644 --- a/redo/osxaltest/box.swift +++ b/redo/osxaltest/box.swift @@ -90,8 +90,6 @@ class Box : NSView, Control { self.parent = p } - // TODO stretchiness - // - we will need a trailing view if there are no stretchy controls private func relayout() { var constraint: String @@ -144,19 +142,19 @@ class Box : NSView, Control { constraint += "[noStretchyView]" } constraint += "|" - var constraints = mkconstraints(constraint, views) + var constraints = mkconstraints(constraint, nil, views) self.addConstraints(constraints) // next: assemble the views in the secondary direction // each of them will span the secondary direction for i in 0.. [AnyObject] { +func mkconstraints(constraint: String, metrics: [String: Double]?, views: [String: NSView]) -> [AnyObject] { return NSLayoutConstraint.constraintsWithVisualFormat( constraint, options: NSLayoutFormatOptions(0), - metrics: nil, + metrics: metrics, views: views) } @@ -38,3 +38,11 @@ func setHorzHuggingPri(view: NSView, priority: NSLayoutPriority) { func setVertHuggingPri(view: NSView, priority: NSLayoutPriority) { setHuggingPri(view, priority, NSLayoutConstraintOrientation.Vertical) } + +func fittingAlignmentSize(view: NSView) -> NSSize { + var s = view.fittingSize + // the fitting size is for a frame rect; we need an alignment rect + var r = NSMakeRect(0, 0, s.width, s.height) + r = view.alignmentRectForFrame(r) + return r.size +} diff --git a/redo/osxaltest/spinbox.swift b/redo/osxaltest/spinbox.swift index c58ccd46..e103f3aa 100644 --- a/redo/osxaltest/spinbox.swift +++ b/redo/osxaltest/spinbox.swift @@ -50,11 +50,11 @@ nspinbox++ "t": self.t, "s": self.s, ] - var constraints = mkconstraints("H:|[t]-[s]|", views) + var constraints = mkconstraints("H:|[t]-[s]|", nil, views) self.addConstraints(constraints) - constraints = mkconstraints("V:|[t]|", views) + constraints = mkconstraints("V:|[t]|", nil, views) self.addConstraints(constraints) - constraints = mkconstraints("V:|[s]|", views) + constraints = mkconstraints("V:|[s]|", nil, views) self.addConstraints(constraints) } diff --git a/redo/osxaltest/window.swift b/redo/osxaltest/window.swift index 6514ebe9..98a7e2c5 100644 --- a/redo/osxaltest/window.swift +++ b/redo/osxaltest/window.swift @@ -76,11 +76,11 @@ class Window : NSWindow, Control { } var constraint = "H:|" + margin + "[view]" + margin + "|" - var constraints = mkconstraints(constraint, views) + var constraints = mkconstraints(constraint, nil, views) contentView.addConstraints(constraints) constraint = "V:|" + margin + "[view]" + margin + "|" - constraints = mkconstraints(constraint, views) + constraints = mkconstraints(constraint, nil, views) contentView.addConstraints(constraints) } }