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:
parent
a013fe6384
commit
96e25cf502
|
@ -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
|
|
@ -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];
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue