diff options
| author | Pietro Gagliardi <[email protected]> | 2015-04-07 14:42:52 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2015-04-07 14:42:52 -0400 |
| commit | a013fe638412809fe3dd18f0231d68d1ce469d56 (patch) | |
| tree | 9b6200a95810b6185430f8702d61cb7035e340ce | |
| parent | 4a52806d70af810634eaf6e3760d3c7a945ff006 (diff) | |
Added the uiDarwinControl logic.
| -rw-r--r-- | new/newcontrol_darwin.c | 99 | ||||
| -rw-r--r-- | new/ui_darwin.h | 17 | ||||
| -rw-r--r-- | new/uipriv_darwin.h | 1 |
3 files changed, 117 insertions, 0 deletions
diff --git a/new/newcontrol_darwin.c b/new/newcontrol_darwin.c new file mode 100644 index 0000000..66a7ecc --- /dev/null +++ b/new/newcontrol_darwin.c @@ -0,0 +1,99 @@ +// 7 april 2015 +#include "uipriv_darwin.h" + +typedef struct uiSingleWidgetControl uiSingleWidgetControl; + +struct uiSingleViewControl { + uiControl control; + NSView *control; + NSScrollView *scrollView; + NSView *immediate; // the control that is added to the parent container; either control or scrollView + void *data; +}; + +#define S(c) ((uiSingleViewControl *) (c)) + +static uintptr_t singleHandle(uiControl *c) +{ + return (uintptr_t) (S(c)->control); +} + +static void singleSetParent(uiControl *c, uintptr_t parent) +{ + NSView *parentView = (NSView *) parent; + + [parentView addSubview:S(c)->immediate]; +} + +static uiSize singlePreferredSize(uiControl *c, uiSizing *d) +{ + uiSize size; + + // TODO + size.width = size.height = 0; + return size; +} + +static void singleResize(uiControl *c, intmax_t x, intmax_t y, intmax_t width, intmax_t height, uiSizing *d) +{ + NSRect frame; + + frame.origin.x = x; + frame.origin.y = y; + frame.size.width = width; + frame.size.height = height; + frame = [S(c)->immediate frameForAlignmentRect:frame]; + [S(c)->immediate setFrame:frame]; +} + +static void singleContainerShow(uiControl *c) +{ + [S(c)->immediate setHidden:NO]; +} + +static void singleContainerHide(uiControl *c) +{ + [S(c)->immediate setHidden:YES]; +} + +// TODO connect free function + +uiControl *uiDarwinNewControl(Class class, BOOL inScrollView, BOOL scrollViewHasBorder, void *data) +{ + uiSingleViewControl *c; + + c = g_new0(uiSingleViewControl, 1); + // thanks to autoxr and arwyn in irc.freenode.net/#macdev + c->widget = (NSView *) [[class alloc] initWithFrame:NSZeroRect]; + c->immediate = c->control; + + // TODO turn into bit field? + if (inScrollView) { + c->scrollView = [[NSScrollView alloc] initWithFrame:NSZeroRect]; + [c->scrollView setDocumentView:c->control]; + [c->scrollView setHasHorizontalScroller:YES]; + [c->scrollView setHasVerticalScroller:YES]; + [c->scrollView setAutohidesScrollers:YES]; + if (scrollViewHasBorder) + [c->scrollView setBorderType:NSBezelBorder]; + else + [c->scrollView setBorderType:NSNoBorder]; + c->immediate = (NSView *) (c->scrolledWindow); + } + + c->control.handle = singleHandle; + c->control.setParent = singleSetParent; + c->control.preferredSize = singlePreferredSize; + c->control.resize = singleResize; + c->control.containerShow = singleContainerShow; + c->control.containerHide = singleContainerHide; + + c->data = data; + + return (uiControl *) c; +} + +void *uiDarwinControlData(uiControl *c) +{ + return S(c)->data; +} diff --git a/new/ui_darwin.h b/new/ui_darwin.h new file mode 100644 index 0000000..0e7afb2 --- /dev/null +++ b/new/ui_darwin.h @@ -0,0 +1,17 @@ +// 7 april 2015 + +/* +This file assumes that you have imported <Cocoa/Cocoa.h> and "ui.h" beforehand. It provides API-specific functions for interfacing with foreign controls on Mac OS X. +*/ + +#ifndef __UI_UI_DARWIN_H__ +#define __UI_UI_DARWIN_H__ + +// uiDarwinNewControl() creates a new uiControl with the given Cocoa control inside. +// The first parameter should come from [RealControlType class]. +// The two scrollView parameters allow placing scrollbars on the new control. +// The data parameter can be accessed with uiDarwinControlData(). +extern uiControl *uiDarwinNewControl(Class class, gboolean inScrollView, gboolean scrollViewHasBorder, void *data); +extern void *uiDarwinControlData(uiControl *c); + +#endif diff --git a/new/uipriv_darwin.h b/new/uipriv_darwin.h index 60b3893..191355f 100644 --- a/new/uipriv_darwin.h +++ b/new/uipriv_darwin.h @@ -3,6 +3,7 @@ #define MAC_OS_X_VERSION_MAX_ALLOWED MAC_OS_X_VERSION_10_7 #import <Cocoa/Cocoa.h> #import "uipriv.h" +#import "ui_darwin.h" #define toNSString(str) [NSString stringWithUTF8String:(str)] |
