Tried to do lateral dimension tuning. Didn't work -_- Recursive tBoxes might have to be individual NSViews as well :|

Psy in #macdev said things which confirm that Auto Layout does NOT give me Interface Builder metrics for free. This destroys the whole point...
This commit is contained in:
Pietro Gagliardi 2015-08-02 19:27:55 -04:00
parent 2fe193563e
commit f1b372569a
2 changed files with 35 additions and 7 deletions

View File

@ -52,7 +52,7 @@
NSMutableArray *subhorz, *subvert; NSMutableArray *subhorz, *subvert;
NSMutableArray *subhorzleft, *subhorzright; NSMutableArray *subhorzleft, *subhorzright;
NSMutableArray *subverttop, *subvertbottom; NSMutableArray *subverttop, *subvertbottom;
uintmax_t *first; __block uintmax_t *first;
NSUInteger i; NSUInteger i;
tAutoLayoutParams pp; tAutoLayoutParams pp;
void (^buildPrimary)(NSMutableArray *in, BOOL first, BOOL last, void (^buildPrimary)(NSMutableArray *in, BOOL first, BOOL last,
@ -149,6 +149,33 @@
[p->vertAttachBottom addObjectsFromArray:subvertbottom]; [p->vertAttachBottom addObjectsFromArray:subvertbottom];
} }
// now constrain the lateral dimension
// all children of item i must be next to the first child of item i+1
// this is so sub-boxes are on the same "line"
// TODO move this declaration above
void (^lateral)(NSMutableArray *, BOOL, BOOL, NSMutableArray *, NSMutableArray *) = ^(NSMutableArray *out, BOOL xfirst, BOOL last, NSMutableArray *outstart, NSMutableArray *outend) {
NSUInteger i;
uintmax_t j;
for (i = 0; i < [self->children count] - 1; i++)
for (j = first[i]; j < first[i + 1]; j++) {
NSString *c1, *c2;
NSString *constraint;
c1 = tAutoLayoutKey(j);
c2 = tAutoLayoutKey(first[i + 1]);
constraint = [NSString stringWithFormat:@"[%@][%@]", c1, c2];
[out addObject:constraint];
[outstart addObject:[NSNumber numberWithBool:xfirst]];
[outend addObject:[NSNumber numberWithBool:last]];
}
};
if (self->vertical)
lateral(p->vert, p->vertFirst, p->vertLast, p->vertAttachTop, p->vertAttachBottom);
else
lateral(p->horz, p->horzFirst, p->horzLast, p->horzAttachLeft, p->horzAttachRight);
[subhorz release]; [subhorz release];
[subhorzleft release]; [subhorzleft release];
[subhorzright release]; [subhorzright release];

View File

@ -3,7 +3,8 @@
// #qo LDFLAGS: -framework Foundation -framework AppKit // #qo LDFLAGS: -framework Foundation -framework AppKit
BOOL margined = NO; BOOL spaced = NO;
BOOL firstvert = YES;
@interface appDelegate : NSObject<NSApplicationDelegate> @interface appDelegate : NSObject<NSApplicationDelegate>
@end @end
@ -18,23 +19,23 @@ BOOL margined = NO;
tSpinbox *spinbox; tSpinbox *spinbox;
mainwin = [[tWindow alloc] init]; mainwin = [[tWindow alloc] init];
[mainwin tSetMargined:margined]; [mainwin tSetMargined:spaced];
box = [[tBox alloc] tInitVertical:YES]; box = [[tBox alloc] tInitVertical:firstvert];
spinbox = [[tSpinbox alloc] init]; spinbox = [[tSpinbox alloc] init];
[box tAddControl:spinbox stretchy:NO]; [box tAddControl:spinbox stretchy:NO];
[mainwin tSetControl:box]; [mainwin tSetControl:box];
hbox = [[tBox alloc] tInitVertical:NO]; hbox = [[tBox alloc] tInitVertical:!firstvert];
button = [[tButton alloc] tInitWithText:@"Button"]; button = [[tButton alloc] tInitWithText:@"Button"];
[hbox tAddControl:button stretchy:YES]; [hbox tAddControl:button stretchy:YES];
button = [[tButton alloc] tInitWithText:@"Button"]; button = [[tButton alloc] tInitWithText:@"Button"];
[hbox tAddControl:button stretchy:YES]; [hbox tAddControl:button stretchy:YES];
[box tAddControl:hbox stretchy:NO]; [box tAddControl:hbox stretchy:NO];
hbox = [[tBox alloc] tInitVertical:NO]; hbox = [[tBox alloc] tInitVertical:!firstvert];
button = [[tButton alloc] tInitWithText:@"Button"]; button = [[tButton alloc] tInitWithText:@"Button"];
[hbox tAddControl:button stretchy:YES]; [hbox tAddControl:button stretchy:YES];
button = [[tButton alloc] tInitWithText:@"Button"]; button = [[tButton alloc] tInitWithText:@"Button"];
@ -55,7 +56,7 @@ int main(int argc, char *argv[])
{ {
NSApplication *app; NSApplication *app;
margined = argc > 1; spaced = argc > 1;
app = [NSApplication sharedApplication]; app = [NSApplication sharedApplication];
[app setActivationPolicy:NSApplicationActivationPolicyRegular]; [app setActivationPolicy:NSApplicationActivationPolicyRegular];