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.

This commit is contained in:
Pietro Gagliardi 2015-08-11 20:10:12 -04:00
parent 22599c3428
commit 819d778b46
4 changed files with 18 additions and 12 deletions

View File

@ -90,8 +90,6 @@ class Box : NSView, Control {
self.parent = p self.parent = p
} }
// TODO stretchiness
// - we will need a trailing view if there are no stretchy controls
private func relayout() { private func relayout() {
var constraint: String var constraint: String
@ -144,19 +142,19 @@ class Box : NSView, Control {
constraint += "[noStretchyView]" constraint += "[noStretchyView]"
} }
constraint += "|" constraint += "|"
var constraints = mkconstraints(constraint, views) var constraints = mkconstraints(constraint, nil, views)
self.addConstraints(constraints) self.addConstraints(constraints)
// next: assemble the views in the secondary direction // next: assemble the views in the secondary direction
// each of them will span the secondary direction // each of them will span the secondary direction
for i in 0..<n { for i in 0..<n {
constraint = "\(self.secondaryDirPrefix)|[view\(i)]|" constraint = "\(self.secondaryDirPrefix)|[view\(i)]|"
var constraints = mkconstraints(constraint, views) var constraints = mkconstraints(constraint, nil, views)
self.addConstraints(constraints) self.addConstraints(constraints)
} }
if firstStretchy == -1 { // and again to the no-stretchy view if firstStretchy == -1 { // and again to the no-stretchy view
constraint = "\(self.secondaryDirPrefix)|[noStretchyView]|" constraint = "\(self.secondaryDirPrefix)|[noStretchyView]|"
var constraints = mkconstraints(constraint, views) var constraints = mkconstraints(constraint, nil, views)
self.addConstraints(constraints) self.addConstraints(constraints)
} }
} }

View File

@ -1,11 +1,11 @@
// 8 august 2015 // 8 august 2015
import Cocoa import Cocoa
func mkconstraints(constraint: String, views: [String: NSView]) -> [AnyObject] { func mkconstraints(constraint: String, metrics: [String: Double]?, views: [String: NSView]) -> [AnyObject] {
return NSLayoutConstraint.constraintsWithVisualFormat( return NSLayoutConstraint.constraintsWithVisualFormat(
constraint, constraint,
options: NSLayoutFormatOptions(0), options: NSLayoutFormatOptions(0),
metrics: nil, metrics: metrics,
views: views) views: views)
} }
@ -38,3 +38,11 @@ func setHorzHuggingPri(view: NSView, priority: NSLayoutPriority) {
func setVertHuggingPri(view: NSView, priority: NSLayoutPriority) { func setVertHuggingPri(view: NSView, priority: NSLayoutPriority) {
setHuggingPri(view, priority, NSLayoutConstraintOrientation.Vertical) 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
}

View File

@ -50,11 +50,11 @@ nspinbox++
"t": self.t, "t": self.t,
"s": self.s, "s": self.s,
] ]
var constraints = mkconstraints("H:|[t]-[s]|", views) var constraints = mkconstraints("H:|[t]-[s]|", nil, views)
self.addConstraints(constraints) self.addConstraints(constraints)
constraints = mkconstraints("V:|[t]|", views) constraints = mkconstraints("V:|[t]|", nil, views)
self.addConstraints(constraints) self.addConstraints(constraints)
constraints = mkconstraints("V:|[s]|", views) constraints = mkconstraints("V:|[s]|", nil, views)
self.addConstraints(constraints) self.addConstraints(constraints)
} }

View File

@ -76,11 +76,11 @@ class Window : NSWindow, Control {
} }
var constraint = "H:|" + margin + "[view]" + margin + "|" var constraint = "H:|" + margin + "[view]" + margin + "|"
var constraints = mkconstraints(constraint, views) var constraints = mkconstraints(constraint, nil, views)
contentView.addConstraints(constraints) contentView.addConstraints(constraints)
constraint = "V:|" + margin + "[view]" + margin + "|" constraint = "V:|" + margin + "[view]" + margin + "|"
constraints = mkconstraints(constraint, views) constraints = mkconstraints(constraint, nil, views)
contentView.addConstraints(constraints) contentView.addConstraints(constraints)
} }
} }