61 lines
1.7 KiB
Mathematica
61 lines
1.7 KiB
Mathematica
|
// 15 august 2015
|
||
|
#import "uipriv_darwin.h"
|
||
|
|
||
|
void addConstraint(NSView *view, NSString *constraint, NSDictionary *metrics, NSDictionary *views)
|
||
|
{
|
||
|
NSArray *constraints;
|
||
|
|
||
|
constraints = [NSLayoutConstraint constraintsWithVisualFormat:constraint
|
||
|
options:0
|
||
|
metrics:metrics
|
||
|
views:views];
|
||
|
[view addConstraints:constraints];
|
||
|
}
|
||
|
|
||
|
NSLayoutPriority horzHuggingPri(NSView *view)
|
||
|
{
|
||
|
return [view contentHuggingPriorityForOrientation:NSLayoutConstraintOrientationHorizontal];
|
||
|
}
|
||
|
|
||
|
NSLayoutPriority vertHuggingPri(NSView *view)
|
||
|
{
|
||
|
return [view contentHuggingPriorityForOrientation:NSLayoutConstraintOrientationVertical];
|
||
|
}
|
||
|
|
||
|
void setHuggingPri(NSView *view, NSLayoutPriority priority, NSLayoutConstraintOrientation orientation)
|
||
|
{
|
||
|
[view setContentHuggingPriority:priority forOrientation:orientation];
|
||
|
}
|
||
|
|
||
|
// precondition: constraints must have been removed from superview already
|
||
|
void layoutSingleView(NSView *superview, NSView *subview, int margined)
|
||
|
{
|
||
|
NSDictionary *views;
|
||
|
NSString *constraint;
|
||
|
|
||
|
views = NSDictionaryOfVariableBindings(subview);
|
||
|
|
||
|
constraint = @"H:|[subview]|";
|
||
|
if (margined)
|
||
|
constraint = @"H:|-[subview]-|";
|
||
|
addConstraint(superview, constraint, nil, views);
|
||
|
|
||
|
constraint = @"V:|[subview]|";
|
||
|
if (margined)
|
||
|
constraint = @"V:|-[subview]-|";
|
||
|
addConstraint(superview, constraint, nil, views);
|
||
|
}
|
||
|
|
||
|
// use the fitting size, not the intrinsic content size, for the case of recursive views without an intrinsic content size
|
||
|
NSSize fittingAlignmentSize(NSView *view)
|
||
|
{
|
||
|
NSSize s;
|
||
|
NSRect r;
|
||
|
|
||
|
s = [view fittingSize];
|
||
|
// the fitting size is for a frame rect; we need an alignment rect
|
||
|
r = NSMakeRect(0, 0, s.width, s.height);
|
||
|
r = [view alignmentRectForFrame:r];
|
||
|
return r.size;
|
||
|
}
|