libui/darwin/autolayout.m

61 lines
1.7 KiB
Objective-C

// 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;
}