summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2015-04-16 14:50:05 -0400
committerPietro Gagliardi <[email protected]>2015-04-16 14:50:05 -0400
commite2ffe78e8708b3c8514c2804cbe77fdf3e63938c (patch)
tree3505f1c82309c7e5b47c93c77068ff096acc51d7
parent0660104659c17852035233617ce9885339c93d7c (diff)
Migrated darwin/tab.m and darwin/window.m. Now to test.
-rw-r--r--new/darwin/tab.m44
-rw-r--r--new/darwin/window.m111
2 files changed, 88 insertions, 67 deletions
diff --git a/new/darwin/tab.m b/new/darwin/tab.m
index c36181e..98dd733 100644
--- a/new/darwin/tab.m
+++ b/new/darwin/tab.m
@@ -6,7 +6,7 @@
// - free child containers properly
@interface uiNSTabView : NSTabView
-@property uiControl *uiC;
+@property uiTab *uiT;
@end
@implementation uiNSTabView
@@ -14,7 +14,7 @@
- (void)viewDidMoveToSuperview
{
// TODO free all tabs explicitly
- if (uiDarwinControlFreeWhenAppropriate(self.uiC, [self superview]))
+ if (uiDarwinControlFreeWhenAppropriate(uiControl(self.uiT), [self superview]))
self.uiC = NULL;
[super viewDidMoveToSuperview];
}
@@ -34,23 +34,7 @@ static void preferredSize(uiControl *c, uiSizing *d, intmax_t *width, intmax_t *
*height = (intmax_t) (s.height);
}
-uiControl *uiNewTab(void)
-{
- uiControl *c;
- uiNSTabView *t;
-
- c = uiDarwinNewControl([uiNSTabView class], NO, NO);
- c->preferredSize = preferredSize;
- t = (uiNSTabView *) uiControlHandle(c);
- t.uiC = c;
-
- // also good for NSTabView (same selector and everything)
- setStandardControlFont((NSControl *) t);
-
- return c;
-}
-
-void uiTabAddPage(uiControl *c, const char *name, uiControl *child)
+static void tabAddPage(uiTab *t, const char *name, uiControl *child)
{
uiNSTabView *tv;
uiParent *content;
@@ -62,6 +46,26 @@ void uiTabAddPage(uiControl *c, const char *name, uiControl *child)
i = [[NSTabViewItem alloc] initWithIdentifier:nil];
[i setLabel:toNSString(name)];
[i setView:((NSView *) uiParentHandle(content))];
- tv = (uiNSTabView *) uiControlHandle(c);
+ tv = (uiNSTabView *) uiControlHandle(uiControl(t));
[tv addTabViewItem:i];
}
+
+uiTab *uiNewTab(void)
+{
+ uiTab *t;
+ uiNSTabView *tv;
+
+ uiDarwinNewControl(uiControl(t), [uiNSTabView class], NO, NO);
+ tv = (uiNSTabView *) uiControlHandle(c);
+
+ // also good for NSTabView (same selector and everything)
+ setStandardControlFont((NSControl *) tv);
+
+ uiControl(t)->PreferredSize = preferredSize;
+
+ uiTab(t)->AddPage = tabAddPage;
+
+ tv.uiT = t;
+
+ return tv.uiT;
+}
diff --git a/new/darwin/window.m b/new/darwin/window.m
index b0cab11..af644c0 100644
--- a/new/darwin/window.m
+++ b/new/darwin/window.m
@@ -9,7 +9,7 @@
@property uiParent *content;
@property int (*onClosing)(uiWindow *, void *);
@property void *onClosingData;
-@property uiWindow *uiw;
+@property struct window *uiw;
@end
@implementation uiWindowDelegate
@@ -42,7 +42,8 @@ uiLogObjCClassAllocations
@end
-struct uiWindow {
+struct window {
+ uiWindow w;
uiWindowDelegate *d;
int margined;
};
@@ -52,90 +53,60 @@ static int defaultOnClosing(uiWindow *w, void *data)
return 1;
}
-uiWindow *uiNewWindow(char *title, int width, int height)
-{
- uiWindowDelegate *d;
-
- d = [uiWindowDelegate new];
-
- d.w = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, (CGFloat) width, (CGFloat) height)
- styleMask:(NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask)
- backing:NSBackingStoreBuffered
- defer:YES];
- [d.w setTitle:toNSString(title)];
-
- // we do not want substitutions
- // text fields, labels, etc. take their smart quotes and other autocorrect settings from their parent window, which provides a shared "field editor"
- // so we have to turn them off here
- // thanks akempgen in irc.freenode.net/#macdev
- // for some reason, this selector returns NSText but is documented to return NSTextView...
- // NOTE: if you disagree with me about disabling substitutions, start a github issue with why and I'll be happy to consider it
- disableAutocorrect((NSTextView *) [d.w fieldEditor:YES forObject:nil]);
+#define D (((struct window *) w)->d)
- // this is what will destroy the window on close
- [d.w setReleasedWhenClosed:YES];
-
- d.content = uiNewParent(0);
- [d.w setContentView:((NSView *) uiParentHandle(d.content))];
-
- d.onClosing = defaultOnClosing;
- [d.w setDelegate:d];
-
- d.uiw = uiNew(uiWindow);
- d.uiw->d = d;
- return d.uiw;
-}
-
-#define D w->d
-
-void uiWindowDestroy(uiWindow *w)
+static void windowDestroy(uiWindow *w)
{
[D.w close];
}
-uintptr_t uiWindowHandle(uiWindow *w)
+static uintptr_t windowHandle(uiWindow *w)
{
return (uintptr_t) (D.w);
}
-char *uiWindowTitle(uiWindow *w)
+static char *windowTitle(uiWindow *w)
{
return uiDarwinNSStringToText([D.w title]);
}
-void uiWindowSetTitle(uiWindow *w, const char *title)
+static void windowSetTitle(uiWindow *w, const char *title)
{
[D.w setTitle:toNSString(title)];
}
-void uiWindowShow(uiWindow *w)
+static void windowShow(uiWindow *w)
{
[D.w makeKeyAndOrderFront:D.w];
}
-void uiWindowHide(uiWindow *w)
+static void windowHide(uiWindow *w)
{
[D.w orderOut:D.w];
}
-void uiWindowOnClosing(uiWindow *w, int (*f)(uiWindow *, void *), void *data)
+static void windowOnClosing(uiWindow *w, int (*f)(uiWindow *, void *), void *data)
{
D.onClosing = f;
D.onClosingData = data;
}
-void uiWindowSetChild(uiWindow *w, uiControl *c)
+static void windowSetChild(uiWindow *w, uiControl *c)
{
uiParentSetChild(D.content, c);
}
-int uiWindowMargined(uiWindow *w)
+static int windowMargined(uiWindow *ww)
{
+ struct window *w = (struct window *) ww;
+
return w->margined;
}
-void uiWindowSetMargined(uiWindow *w, int margined)
+static void windowSetMargined(uiWindow *ww, int margined)
{
+ struct window *w = (struct window *) ww;
+
w->margined = margined;
if (w->margined)
uiParentSetMargins(D.content, macXMargin, macYMargin, macXMargin, macYMargin);
@@ -143,3 +114,49 @@ void uiWindowSetMargined(uiWindow *w, int margined)
uiParentSetMargins(D.content, 0, 0, 0, 0);
uiParentUpdate(D.content);
}
+
+uiWindow *uiNewWindow(const char *title, int width, int height)
+{
+ uiWindowDelegate *d;
+
+ d = [uiWindowDelegate new];
+
+ d.w = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, (CGFloat) width, (CGFloat) height)
+ styleMask:(NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask)
+ backing:NSBackingStoreBuffered
+ defer:YES];
+ [d.w setTitle:toNSString(title)];
+
+ // we do not want substitutions
+ // text fields, labels, etc. take their smart quotes and other autocorrect settings from their parent window, which provides a shared "field editor"
+ // so we have to turn them off here
+ // thanks akempgen in irc.freenode.net/#macdev
+ // for some reason, this selector returns NSText but is documented to return NSTextView...
+ // NOTE: if you disagree with me about disabling substitutions, start a github issue with why and I'll be happy to consider it
+ disableAutocorrect((NSTextView *) [d.w fieldEditor:YES forObject:nil]);
+
+ // this is what will destroy the window on close
+ [d.w setReleasedWhenClosed:YES];
+
+ d.content = uiNewParent(0);
+ [d.w setContentView:((NSView *) uiParentHandle(d.content))];
+
+ d.onClosing = defaultOnClosing;
+ [d.w setDelegate:d];
+
+ d.uiw = uiNew(struct window);
+ d.uiw->d = d;
+
+ uiWindow(d.uiw)->Destroy = windowDestroy;
+ uiWindow(d.uiw)->Handle = windowHandle;
+ uiWindow(d.uiw)->Title = windowTitle;
+ uiWindow(d.uiw)->SetTitle = windowSetTitle;
+ uiWindow(d.uiw)->Show = windowShow;
+ uiWindow(d.uiw)->Hide = windowHide;
+ uiWindow(d.uiw)->OnClosing = windowSetOnClosing;
+ uiWindow(d.uiw)->SetChild = windowSetChild;
+ uiWindow(d.uiw)->Margined = windowMargined;
+ uiWindow(d.uiw)->SetMargined = windowSetMargined;
+
+ return d.uiw;
+}