Added the Mac OS X uiContainer. Added it to uiWindow. Added the Mac OS X coordinate system mirroring to the new control logic. Renamed *_darwin.c to *_darwin.m.

This commit is contained in:
Pietro Gagliardi 2015-04-07 15:45:00 -04:00
parent a013fe6384
commit 96e25cf502
4 changed files with 40 additions and 1 deletions

22
new/container_darwin.m Normal file
View File

@ -0,0 +1,22 @@
// 4 august 2014
#import "uipriv_darwin.h"
// calling -[className] on the content views of NSWindow, NSTabItem, and NSBox all return NSView, so I'm assuming I just need to override these
// fornunately:
// - NSWindow resizing calls -[setFrameSize:] (but not -[setFrame:])
// - NSTab resizing calls both -[setFrame:] and -[setFrameSIze:] on the current tab
// - NSTab switching tabs calls both -[setFrame:] and -[setFrameSize:] on the new tab
// so we just override setFrameSize:
// thanks to mikeash and JtRip in irc.freenode.net/#macdev
@implementation uiContainer
- (void)setFrameSize:(NSSize)s
{
uiSizing d;
[super setFrameSize:s];
if (self.child != NULL)
(*(self.child->resize))(self.child, 0, 0, [self bounds].size.width, [self bounds].size.height, d);
}
@end

View File

@ -39,7 +39,8 @@ static void singleResize(uiControl *c, intmax_t x, intmax_t y, intmax_t width, i
NSRect frame;
frame.origin.x = x;
frame.origin.y = y;
// mac os x coordinate system has (0,0) in the lower-left
frame.origin.y = [[S(c)->immediate superview] bounds].size.height - y;
frame.size.width = width;
frame.size.height = height;
frame = [S(c)->immediate frameForAlignmentRect:frame];

View File

@ -11,3 +11,8 @@
extern void *uiAlloc(size_t);
extern void *uiRealloc(void *, size_t);
extern void uiFree(void *);
// container_darwin.m
@interface uiContainer : NSView
@property uiControl *child;
@end

View File

@ -22,6 +22,8 @@
struct uiWindow {
NSWindow *w;
uiContainer *container;
uiControl *child;
uiWindowDelegate *d;
};
@ -43,6 +45,9 @@ uiWindow *uiNewWindow(char *title, int width, int height)
[w->w setTitle:toNSString(title)];
// TODO substitutions
w->container = [[uiContainer alloc] initWithFrame:NSZeroRect];
[w->w setContentView:((NSView *) w->container)];
w->d = [uiWindowDelegate new];
w->d.w = w;
w->d.onClosing = defaultOnClosing;
@ -79,3 +84,9 @@ void uiWindowOnClosing(uiWindow *w, int (*f)(uiWindow *, void *), void *data)
w->d.onClosing = f;
w->d.onClosingData = data;
}
void uiWindowSetChild(uiWindow *w, uiControl *c)
{
w->child = c;
(*(w->child->setParent))(w->child, (uintptr_t) (w->container));
}