/* Interface of class NSLayoutConstraint Copyright (C) 2020 Free Software Foundation, Inc. By: Gregory Casamento Date: Sat May 9 16:30:22 EDT 2020 This file is part of the GNUstep Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 USA. */ #ifndef _NSLayoutConstraint_h_GNUSTEP_GUI_INCLUDE #define _NSLayoutConstraint_h_GNUSTEP_GUI_INCLUDE #import #import #import #import #import @class NSControl, NSAnimation, NSArray, NSMutableArray, NSDictionary, NSView; typedef float NSLayoutPriority; typedef struct GSIntrinsicContentSizePriority { NSLayoutPriority horizontal; NSLayoutPriority vertical; } GSIntrinsicContentSizePriority; #if OS_API_VERSION(MAC_OS_X_VERSION_10_10, GS_API_LATEST) #if defined(__cplusplus) extern "C" { #endif // Priority static const NSLayoutPriority NSLayoutPriorityRequired = 1000.0; static const NSLayoutPriority NSLayoutPriorityDefaultHigh = 750.0; static const NSLayoutPriority NSLayoutPriorityDragThatCanResizeWindow = 510.0; static const NSLayoutPriority NSLayoutPriorityWindowSizeStayPut = 500.0; static const NSLayoutPriority NSLayoutPriorityDragThatCannotResizeWindow = 490.0; static const NSLayoutPriority NSLayoutPriorityDefaultLow = 250.0; static const NSLayoutPriority NSLayoutPriorityFittingSizeCompression = 50.0; // Orientation enum { NSLayoutConstraintOrientationHorizontal = 0, NSLayoutConstraintOrientationVertical = 1 }; typedef NSInteger NSLayoutConstraintOrientation; // Attributes enum { NSLayoutAttributeLeft = 1, NSLayoutAttributeRight, NSLayoutAttributeTop, NSLayoutAttributeBottom, NSLayoutAttributeLeading, NSLayoutAttributeTrailing, NSLayoutAttributeWidth, NSLayoutAttributeHeight, NSLayoutAttributeCenterX, NSLayoutAttributeCenterY, NSLayoutAttributeLastBaseline, NSLayoutAttributeBaseline = NSLayoutAttributeLastBaseline, NSLayoutAttributeFirstBaseline, NSLayoutAttributeNotAnAttribute = 0 }; typedef NSInteger NSLayoutAttribute; // Relation enum { NSLayoutRelationLessThanOrEqual = -1, NSLayoutRelationEqual = 0, NSLayoutRelationGreaterThanOrEqual = 1, }; typedef NSInteger NSLayoutRelation; // Options enum { NSLayoutFormatAlignAllLeft = (1 << NSLayoutAttributeLeft), NSLayoutFormatAlignAllRight = (1 << NSLayoutAttributeRight), NSLayoutFormatAlignAllTop = (1 << NSLayoutAttributeTop), NSLayoutFormatAlignAllBottom = (1 << NSLayoutAttributeBottom), NSLayoutFormatAlignAllLeading = (1 << NSLayoutAttributeLeading), NSLayoutFormatAlignAllTrailing = (1 << NSLayoutAttributeTrailing), NSLayoutFormatAlignAllCenterX = (1 << NSLayoutAttributeCenterX), NSLayoutFormatAlignAllCenterY = (1 << NSLayoutAttributeCenterY), NSLayoutFormatAlignAllLastBaseline = (1 << NSLayoutAttributeLastBaseline), NSLayoutFormatAlignAllFirstBaseline = (1 << NSLayoutAttributeFirstBaseline), NSLayoutFormatAlignAllBaseline = NSLayoutFormatAlignAllLastBaseline, NSLayoutFormatAlignmentMask = 0xFFFF, NSLayoutFormatDirectionLeadingToTrailing = 0 << 16, NSLayoutFormatDirectionLeftToRight = 1 << 16, NSLayoutFormatDirectionRightToLeft = 2 << 16, NSLayoutFormatDirectionMask = 0x3 << 16, }; typedef NSUInteger NSLayoutFormatOptions; APPKIT_EXPORT_CLASS @interface NSLayoutConstraint : NSObject { NSLayoutAnchor *_firstAnchor; NSLayoutAnchor *_secondAnchor; id _firstItem; id _secondItem; NSLayoutAttribute _firstAttribute; NSLayoutAttribute _secondAttribute; NSLayoutRelation _relation; CGFloat _multiplier; CGFloat _constant; NSLayoutPriority _priority; } + (NSArray *)constraintsWithVisualFormat: (NSString *)fmt options: (NSLayoutFormatOptions)opt metrics: (NSDictionary *)metrics views: (NSDictionary *)views; + (instancetype) constraintWithItem: (id)view1 attribute: (NSLayoutAttribute)attr1 relatedBy: (NSLayoutRelation)relation toItem: (id)view2 attribute: (NSLayoutAttribute)attr2 multiplier: (CGFloat)mult constant: (CGFloat)c; // Active - (BOOL) isActive; - (void) setActive: (BOOL)flag; + (void) activateConstraints: (NSArray *)constraints; + (void) deactivateConstraints: (NSArray *)constraints; // Items - (id) firstItem; - (NSLayoutAttribute) firstAttribute; - (NSLayoutRelation) relation; - (id) secondItem; - (NSLayoutAttribute) secondAttribute; - (CGFloat) multiplier; - (CGFloat) constant; - (NSLayoutAnchor *) firstAnchor; - (NSLayoutAnchor *) secondAnchor; #if GS_HAS_DECLARED_PROPERTIES @property NSLayoutPriority priority; #else - (NSLayoutPriority) priority; - (void) setPriority: (NSLayoutPriority)priority; #endif @end @interface NSWindow (NSConstraintBasedLayoutCoreMethods) - (void) _bootstrapAutoLayout; - (void) layoutIfNeeded; @end #if defined(__cplusplus) } #endif #endif /* GS_API_MACOSX */ #endif /* _NSLayoutConstraint_h_GNUSTEP_GUI_INCLUDE */