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
}
// 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..<n {
constraint = "\(self.secondaryDirPrefix)|[view\(i)]|"
var constraints = mkconstraints(constraint, views)
var constraints = mkconstraints(constraint, nil, views)
self.addConstraints(constraints)
}
if firstStretchy == -1 { // and again to the no-stretchy view
constraint = "\(self.secondaryDirPrefix)|[noStretchyView]|"
var constraints = mkconstraints(constraint, views)
var constraints = mkconstraints(constraint, nil, views)
self.addConstraints(constraints)
}
}

View File

@ -1,11 +1,11 @@
// 8 august 2015
import Cocoa
func mkconstraints(constraint: String, views: [String: NSView]) -> [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
}

View File

@ -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)
}

View File

@ -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)
}
}