1use crate::common::*;
4use crate::AppKit::*;
5use crate::CoreData::*;
6use crate::Foundation::*;
7
8typed_extensible_enum!(
9 pub type NSLayoutPriority = c_float;
10);
11
12extern_static!(NSLayoutPriorityRequired: NSLayoutPriority = 1000);
13
14extern_static!(NSLayoutPriorityDefaultHigh: NSLayoutPriority = 750);
15
16extern_static!(NSLayoutPriorityDragThatCanResizeWindow: NSLayoutPriority = 510);
17
18extern_static!(NSLayoutPriorityWindowSizeStayPut: NSLayoutPriority = 500);
19
20extern_static!(NSLayoutPriorityDragThatCannotResizeWindow: NSLayoutPriority = 490);
21
22extern_static!(NSLayoutPriorityDefaultLow: NSLayoutPriority = 250);
23
24extern_static!(NSLayoutPriorityFittingSizeCompression: NSLayoutPriority = 50);
25
26ns_enum!(
27 #[underlying(NSInteger)]
28 pub enum NSLayoutConstraintOrientation {
29 NSLayoutConstraintOrientationHorizontal = 0,
30 NSLayoutConstraintOrientationVertical = 1,
31 }
32);
33
34ns_enum!(
35 #[underlying(NSInteger)]
36 pub enum NSLayoutRelation {
37 NSLayoutRelationLessThanOrEqual = -1,
38 NSLayoutRelationEqual = 0,
39 NSLayoutRelationGreaterThanOrEqual = 1,
40 }
41);
42
43ns_enum!(
44 #[underlying(NSInteger)]
45 pub enum NSLayoutAttribute {
46 NSLayoutAttributeLeft = 1,
47 NSLayoutAttributeRight = 2,
48 NSLayoutAttributeTop = 3,
49 NSLayoutAttributeBottom = 4,
50 NSLayoutAttributeLeading = 5,
51 NSLayoutAttributeTrailing = 6,
52 NSLayoutAttributeWidth = 7,
53 NSLayoutAttributeHeight = 8,
54 NSLayoutAttributeCenterX = 9,
55 NSLayoutAttributeCenterY = 10,
56 NSLayoutAttributeLastBaseline = 11,
57 NSLayoutAttributeBaseline = NSLayoutAttributeLastBaseline,
58 NSLayoutAttributeFirstBaseline = 12,
59 NSLayoutAttributeNotAnAttribute = 0,
60 }
61);
62
63ns_options!(
64 #[underlying(NSUInteger)]
65 pub enum NSLayoutFormatOptions {
66 NSLayoutFormatAlignAllLeft = 1 << NSLayoutAttributeLeft,
67 NSLayoutFormatAlignAllRight = 1 << NSLayoutAttributeRight,
68 NSLayoutFormatAlignAllTop = 1 << NSLayoutAttributeTop,
69 NSLayoutFormatAlignAllBottom = 1 << NSLayoutAttributeBottom,
70 NSLayoutFormatAlignAllLeading = 1 << NSLayoutAttributeLeading,
71 NSLayoutFormatAlignAllTrailing = 1 << NSLayoutAttributeTrailing,
72 NSLayoutFormatAlignAllCenterX = 1 << NSLayoutAttributeCenterX,
73 NSLayoutFormatAlignAllCenterY = 1 << NSLayoutAttributeCenterY,
74 NSLayoutFormatAlignAllLastBaseline = 1 << NSLayoutAttributeLastBaseline,
75 NSLayoutFormatAlignAllFirstBaseline = 1 << NSLayoutAttributeFirstBaseline,
76 NSLayoutFormatAlignAllBaseline = NSLayoutFormatAlignAllLastBaseline,
77 NSLayoutFormatAlignmentMask = 0xFFFF,
78 NSLayoutFormatDirectionLeadingToTrailing = 0 << 16,
79 NSLayoutFormatDirectionLeftToRight = 1 << 16,
80 NSLayoutFormatDirectionRightToLeft = 2 << 16,
81 NSLayoutFormatDirectionMask = 0x3 << 16,
82 }
83);
84
85extern_class!(
86 #[derive(Debug, PartialEq, Eq, Hash)]
87 #[cfg(feature = "AppKit_NSLayoutConstraint")]
88 pub struct NSLayoutConstraint;
89
90 #[cfg(feature = "AppKit_NSLayoutConstraint")]
91 unsafe impl ClassType for NSLayoutConstraint {
92 type Super = NSObject;
93 type Mutability = InteriorMutable;
94 }
95);
96
97#[cfg(feature = "AppKit_NSLayoutConstraint")]
98unsafe impl NSObjectProtocol for NSLayoutConstraint {}
99
100extern_methods!(
101 #[cfg(feature = "AppKit_NSLayoutConstraint")]
102 unsafe impl NSLayoutConstraint {
103 #[cfg(all(
104 feature = "Foundation_NSArray",
105 feature = "Foundation_NSDictionary",
106 feature = "Foundation_NSString"
107 ))]
108 #[method_id(@__retain_semantics Other constraintsWithVisualFormat:options:metrics:views:)]
109 pub unsafe fn constraintsWithVisualFormat_options_metrics_views(
110 format: &NSString,
111 opts: NSLayoutFormatOptions,
112 metrics: Option<&NSDictionary<NSString, AnyObject>>,
113 views: &NSDictionary<NSString, AnyObject>,
114 ) -> Id<NSArray<NSLayoutConstraint>>;
115
116 #[method_id(@__retain_semantics Other constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:)]
117 pub unsafe fn constraintWithItem_attribute_relatedBy_toItem_attribute_multiplier_constant(
118 view1: &AnyObject,
119 attr1: NSLayoutAttribute,
120 relation: NSLayoutRelation,
121 view2: Option<&AnyObject>,
122 attr2: NSLayoutAttribute,
123 multiplier: CGFloat,
124 c: CGFloat,
125 ) -> Id<Self>;
126
127 #[method(priority)]
128 pub unsafe fn priority(&self) -> NSLayoutPriority;
129
130 #[method(setPriority:)]
131 pub unsafe fn setPriority(&self, priority: NSLayoutPriority);
132
133 #[method(shouldBeArchived)]
134 pub unsafe fn shouldBeArchived(&self) -> bool;
135
136 #[method(setShouldBeArchived:)]
137 pub unsafe fn setShouldBeArchived(&self, should_be_archived: bool);
138
139 #[method_id(@__retain_semantics Other firstItem)]
140 pub unsafe fn firstItem(&self) -> Option<Id<AnyObject>>;
141
142 #[method_id(@__retain_semantics Other secondItem)]
143 pub unsafe fn secondItem(&self) -> Option<Id<AnyObject>>;
144
145 #[method(firstAttribute)]
146 pub unsafe fn firstAttribute(&self) -> NSLayoutAttribute;
147
148 #[method(secondAttribute)]
149 pub unsafe fn secondAttribute(&self) -> NSLayoutAttribute;
150
151 #[cfg(feature = "AppKit_NSLayoutAnchor")]
152 #[method_id(@__retain_semantics Other firstAnchor)]
153 pub unsafe fn firstAnchor(&self) -> Id<NSLayoutAnchor>;
154
155 #[cfg(feature = "AppKit_NSLayoutAnchor")]
156 #[method_id(@__retain_semantics Other secondAnchor)]
157 pub unsafe fn secondAnchor(&self) -> Option<Id<NSLayoutAnchor>>;
158
159 #[method(relation)]
160 pub unsafe fn relation(&self) -> NSLayoutRelation;
161
162 #[method(multiplier)]
163 pub unsafe fn multiplier(&self) -> CGFloat;
164
165 #[method(constant)]
166 pub unsafe fn constant(&self) -> CGFloat;
167
168 #[method(setConstant:)]
169 pub unsafe fn setConstant(&self, constant: CGFloat);
170
171 #[method(isActive)]
172 pub unsafe fn isActive(&self) -> bool;
173
174 #[method(setActive:)]
175 pub unsafe fn setActive(&self, active: bool);
176
177 #[cfg(feature = "Foundation_NSArray")]
178 #[method(activateConstraints:)]
179 pub unsafe fn activateConstraints(constraints: &NSArray<NSLayoutConstraint>);
180
181 #[cfg(feature = "Foundation_NSArray")]
182 #[method(deactivateConstraints:)]
183 pub unsafe fn deactivateConstraints(constraints: &NSArray<NSLayoutConstraint>);
184 }
185);
186
187extern_methods!(
188 #[cfg(feature = "AppKit_NSLayoutConstraint")]
190 unsafe impl NSLayoutConstraint {
191 #[method_id(@__retain_semantics Init init)]
192 pub unsafe fn init(this: Allocated<Self>) -> Id<Self>;
193
194 #[method_id(@__retain_semantics New new)]
195 pub unsafe fn new() -> Id<Self>;
196 }
197);
198
199extern_methods!(
200 #[cfg(feature = "AppKit_NSLayoutConstraint")]
202 unsafe impl NSLayoutConstraint {
203 #[cfg(feature = "Foundation_NSString")]
204 #[method_id(@__retain_semantics Other identifier)]
205 pub unsafe fn identifier(&self) -> Option<Id<NSString>>;
206
207 #[cfg(feature = "Foundation_NSString")]
208 #[method(setIdentifier:)]
209 pub unsafe fn setIdentifier(&self, identifier: Option<&NSString>);
210 }
211);
212
213extern_methods!(
214 #[cfg(feature = "AppKit_NSLayoutConstraint")]
215 unsafe impl NSLayoutConstraint {}
216);
217
218#[cfg(feature = "AppKit_NSLayoutConstraint")]
219unsafe impl NSAnimatablePropertyContainer for NSLayoutConstraint {}
220
221extern_methods!(
222 #[cfg(feature = "AppKit_NSView")]
224 unsafe impl NSView {
225 #[cfg(feature = "AppKit_NSLayoutXAxisAnchor")]
226 #[method_id(@__retain_semantics Other leadingAnchor)]
227 pub unsafe fn leadingAnchor(&self) -> Id<NSLayoutXAxisAnchor>;
228
229 #[cfg(feature = "AppKit_NSLayoutXAxisAnchor")]
230 #[method_id(@__retain_semantics Other trailingAnchor)]
231 pub unsafe fn trailingAnchor(&self) -> Id<NSLayoutXAxisAnchor>;
232
233 #[cfg(feature = "AppKit_NSLayoutXAxisAnchor")]
234 #[method_id(@__retain_semantics Other leftAnchor)]
235 pub unsafe fn leftAnchor(&self) -> Id<NSLayoutXAxisAnchor>;
236
237 #[cfg(feature = "AppKit_NSLayoutXAxisAnchor")]
238 #[method_id(@__retain_semantics Other rightAnchor)]
239 pub unsafe fn rightAnchor(&self) -> Id<NSLayoutXAxisAnchor>;
240
241 #[cfg(feature = "AppKit_NSLayoutYAxisAnchor")]
242 #[method_id(@__retain_semantics Other topAnchor)]
243 pub unsafe fn topAnchor(&self) -> Id<NSLayoutYAxisAnchor>;
244
245 #[cfg(feature = "AppKit_NSLayoutYAxisAnchor")]
246 #[method_id(@__retain_semantics Other bottomAnchor)]
247 pub unsafe fn bottomAnchor(&self) -> Id<NSLayoutYAxisAnchor>;
248
249 #[cfg(feature = "AppKit_NSLayoutDimension")]
250 #[method_id(@__retain_semantics Other widthAnchor)]
251 pub unsafe fn widthAnchor(&self) -> Id<NSLayoutDimension>;
252
253 #[cfg(feature = "AppKit_NSLayoutDimension")]
254 #[method_id(@__retain_semantics Other heightAnchor)]
255 pub unsafe fn heightAnchor(&self) -> Id<NSLayoutDimension>;
256
257 #[cfg(feature = "AppKit_NSLayoutXAxisAnchor")]
258 #[method_id(@__retain_semantics Other centerXAnchor)]
259 pub unsafe fn centerXAnchor(&self) -> Id<NSLayoutXAxisAnchor>;
260
261 #[cfg(feature = "AppKit_NSLayoutYAxisAnchor")]
262 #[method_id(@__retain_semantics Other centerYAnchor)]
263 pub unsafe fn centerYAnchor(&self) -> Id<NSLayoutYAxisAnchor>;
264
265 #[cfg(feature = "AppKit_NSLayoutYAxisAnchor")]
266 #[method_id(@__retain_semantics Other firstBaselineAnchor)]
267 pub unsafe fn firstBaselineAnchor(&self) -> Id<NSLayoutYAxisAnchor>;
268
269 #[cfg(feature = "AppKit_NSLayoutYAxisAnchor")]
270 #[method_id(@__retain_semantics Other lastBaselineAnchor)]
271 pub unsafe fn lastBaselineAnchor(&self) -> Id<NSLayoutYAxisAnchor>;
272
273 #[cfg(all(feature = "AppKit_NSLayoutConstraint", feature = "Foundation_NSArray"))]
274 #[method_id(@__retain_semantics Other constraints)]
275 pub unsafe fn constraints(&self) -> Id<NSArray<NSLayoutConstraint>>;
276
277 #[cfg(feature = "AppKit_NSLayoutConstraint")]
278 #[method(addConstraint:)]
279 pub unsafe fn addConstraint(&self, constraint: &NSLayoutConstraint);
280
281 #[cfg(all(feature = "AppKit_NSLayoutConstraint", feature = "Foundation_NSArray"))]
282 #[method(addConstraints:)]
283 pub unsafe fn addConstraints(&self, constraints: &NSArray<NSLayoutConstraint>);
284
285 #[cfg(feature = "AppKit_NSLayoutConstraint")]
286 #[method(removeConstraint:)]
287 pub unsafe fn removeConstraint(&self, constraint: &NSLayoutConstraint);
288
289 #[cfg(all(feature = "AppKit_NSLayoutConstraint", feature = "Foundation_NSArray"))]
290 #[method(removeConstraints:)]
291 pub unsafe fn removeConstraints(&self, constraints: &NSArray<NSLayoutConstraint>);
292 }
293);
294
295extern_methods!(
296 #[cfg(feature = "AppKit_NSWindow")]
298 unsafe impl NSWindow {
299 #[method(updateConstraintsIfNeeded)]
300 pub unsafe fn updateConstraintsIfNeeded(&self);
301
302 #[method(layoutIfNeeded)]
303 pub unsafe fn layoutIfNeeded(&self);
304 }
305);
306
307extern_methods!(
308 #[cfg(feature = "AppKit_NSView")]
310 unsafe impl NSView {
311 #[method(updateConstraintsForSubtreeIfNeeded)]
312 pub unsafe fn updateConstraintsForSubtreeIfNeeded(&self);
313
314 #[method(updateConstraints)]
315 pub unsafe fn updateConstraints(&self);
316
317 #[method(needsUpdateConstraints)]
318 pub unsafe fn needsUpdateConstraints(&self) -> bool;
319
320 #[method(setNeedsUpdateConstraints:)]
321 pub unsafe fn setNeedsUpdateConstraints(&self, needs_update_constraints: bool);
322 }
323);
324
325extern_methods!(
326 #[cfg(feature = "AppKit_NSView")]
328 unsafe impl NSView {
329 #[method(translatesAutoresizingMaskIntoConstraints)]
330 pub unsafe fn translatesAutoresizingMaskIntoConstraints(&self) -> bool;
331
332 #[method(setTranslatesAutoresizingMaskIntoConstraints:)]
333 pub unsafe fn setTranslatesAutoresizingMaskIntoConstraints(
334 &self,
335 translates_autoresizing_mask_into_constraints: bool,
336 );
337
338 #[method(requiresConstraintBasedLayout)]
339 pub unsafe fn requiresConstraintBasedLayout(mtm: MainThreadMarker) -> bool;
340 }
341);
342
343extern_static!(NSViewNoInstrinsicMetric: CGFloat);
344
345extern_static!(NSViewNoIntrinsicMetric: CGFloat);
346
347extern_methods!(
348 #[cfg(feature = "AppKit_NSView")]
350 unsafe impl NSView {
351 #[method(alignmentRectForFrame:)]
352 pub unsafe fn alignmentRectForFrame(&self, frame: NSRect) -> NSRect;
353
354 #[method(frameForAlignmentRect:)]
355 pub unsafe fn frameForAlignmentRect(&self, alignment_rect: NSRect) -> NSRect;
356
357 #[method(alignmentRectInsets)]
358 pub unsafe fn alignmentRectInsets(&self) -> NSEdgeInsets;
359
360 #[method(firstBaselineOffsetFromTop)]
361 pub unsafe fn firstBaselineOffsetFromTop(&self) -> CGFloat;
362
363 #[method(lastBaselineOffsetFromBottom)]
364 pub unsafe fn lastBaselineOffsetFromBottom(&self) -> CGFloat;
365
366 #[method(baselineOffsetFromBottom)]
367 pub unsafe fn baselineOffsetFromBottom(&self) -> CGFloat;
368
369 #[method(intrinsicContentSize)]
370 pub unsafe fn intrinsicContentSize(&self) -> NSSize;
371
372 #[method(invalidateIntrinsicContentSize)]
373 pub unsafe fn invalidateIntrinsicContentSize(&self);
374
375 #[method(contentHuggingPriorityForOrientation:)]
376 pub unsafe fn contentHuggingPriorityForOrientation(
377 &self,
378 orientation: NSLayoutConstraintOrientation,
379 ) -> NSLayoutPriority;
380
381 #[method(setContentHuggingPriority:forOrientation:)]
382 pub unsafe fn setContentHuggingPriority_forOrientation(
383 &self,
384 priority: NSLayoutPriority,
385 orientation: NSLayoutConstraintOrientation,
386 );
387
388 #[method(contentCompressionResistancePriorityForOrientation:)]
389 pub unsafe fn contentCompressionResistancePriorityForOrientation(
390 &self,
391 orientation: NSLayoutConstraintOrientation,
392 ) -> NSLayoutPriority;
393
394 #[method(setContentCompressionResistancePriority:forOrientation:)]
395 pub unsafe fn setContentCompressionResistancePriority_forOrientation(
396 &self,
397 priority: NSLayoutPriority,
398 orientation: NSLayoutConstraintOrientation,
399 );
400
401 #[method(isHorizontalContentSizeConstraintActive)]
402 pub unsafe fn isHorizontalContentSizeConstraintActive(&self) -> bool;
403
404 #[method(setHorizontalContentSizeConstraintActive:)]
405 pub unsafe fn setHorizontalContentSizeConstraintActive(
406 &self,
407 horizontal_content_size_constraint_active: bool,
408 );
409
410 #[method(isVerticalContentSizeConstraintActive)]
411 pub unsafe fn isVerticalContentSizeConstraintActive(&self) -> bool;
412
413 #[method(setVerticalContentSizeConstraintActive:)]
414 pub unsafe fn setVerticalContentSizeConstraintActive(
415 &self,
416 vertical_content_size_constraint_active: bool,
417 );
418 }
419);
420
421extern_methods!(
422 #[cfg(feature = "AppKit_NSControl")]
424 unsafe impl NSControl {
425 #[cfg(feature = "AppKit_NSCell")]
426 #[method(invalidateIntrinsicContentSizeForCell:)]
427 pub unsafe fn invalidateIntrinsicContentSizeForCell(&self, cell: &NSCell);
428 }
429);
430
431extern_methods!(
432 #[cfg(feature = "AppKit_NSWindow")]
434 unsafe impl NSWindow {
435 #[method(anchorAttributeForOrientation:)]
436 pub unsafe fn anchorAttributeForOrientation(
437 &self,
438 orientation: NSLayoutConstraintOrientation,
439 ) -> NSLayoutAttribute;
440
441 #[method(setAnchorAttribute:forOrientation:)]
442 pub unsafe fn setAnchorAttribute_forOrientation(
443 &self,
444 attr: NSLayoutAttribute,
445 orientation: NSLayoutConstraintOrientation,
446 );
447 }
448);
449
450extern_methods!(
451 #[cfg(feature = "AppKit_NSView")]
453 unsafe impl NSView {
454 #[method(fittingSize)]
455 pub unsafe fn fittingSize(&self) -> NSSize;
456 }
457);
458
459extern_methods!(
460 #[cfg(feature = "AppKit_NSView")]
462 unsafe impl NSView {
463 #[cfg(all(feature = "AppKit_NSLayoutConstraint", feature = "Foundation_NSArray"))]
464 #[method_id(@__retain_semantics Other constraintsAffectingLayoutForOrientation:)]
465 pub unsafe fn constraintsAffectingLayoutForOrientation(
466 &self,
467 orientation: NSLayoutConstraintOrientation,
468 ) -> Id<NSArray<NSLayoutConstraint>>;
469
470 #[method(hasAmbiguousLayout)]
471 pub unsafe fn hasAmbiguousLayout(&self) -> bool;
472
473 #[method(exerciseAmbiguityInLayout)]
474 pub unsafe fn exerciseAmbiguityInLayout(&self);
475 }
476);
477
478extern_methods!(
479 #[cfg(feature = "AppKit_NSWindow")]
481 unsafe impl NSWindow {
482 #[cfg(all(feature = "AppKit_NSLayoutConstraint", feature = "Foundation_NSArray"))]
483 #[method(visualizeConstraints:)]
484 pub unsafe fn visualizeConstraints(
485 &self,
486 constraints: Option<&NSArray<NSLayoutConstraint>>,
487 );
488 }
489);