summaryrefslogtreecommitdiff
path: root/new/darwin/newcontrol.m
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2015-04-16 20:33:28 -0400
committerPietro Gagliardi <[email protected]>2015-04-16 20:33:28 -0400
commite34c561ed5bedeb180437ec165882b98d70d38c1 (patch)
treed095e5db16d7a23e883526c8c1d3c524639c97cf /new/darwin/newcontrol.m
parentde9d72299fb89a8b6cdc8963cd6b6ae708a81e80 (diff)
Split the rewrite into a new repository.
Diffstat (limited to 'new/darwin/newcontrol.m')
-rw-r--r--new/darwin/newcontrol.m231
1 files changed, 0 insertions, 231 deletions
diff --git a/new/darwin/newcontrol.m b/new/darwin/newcontrol.m
deleted file mode 100644
index 12967c5..0000000
--- a/new/darwin/newcontrol.m
+++ /dev/null
@@ -1,231 +0,0 @@
-// 7 april 2015
-#include "uipriv_darwin.h"
-
-typedef struct singleView singleView;
-
-struct singleView {
- NSView *view;
- NSScrollView *scrollView;
- NSView *immediate; // the control that is added to the parent container; either view or scrollView
- uiParent *parent;
- BOOL userHid;
- BOOL containerHid;
- BOOL userDisabled;
- BOOL containerDisabled;
-};
-
-static void singleDestroy(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- [destroyedControlsView addSubview:s->immediate];
-}
-
-static uintptr_t singleHandle(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- return (uintptr_t) (s->view);
-}
-
-static void singleSetParent(uiControl *c, uiParent *parent)
-{
- singleView *s = (singleView *) (c->Internal);
- NSView *parentView;
- uiParent *oldparent;
-
- oldparent = s->parent;
- s->parent = parent;
- if (oldparent != NULL) {
- [s->immediate removeFromSuperview];
- uiParentUpdate(oldparent);
- }
- if (s->parent != NULL) {
- // TODO uiControlView(), uiParentView()
- parentView = (NSView *) uiParentHandle(s->parent);
- [parentView addSubview:s->immediate];
- uiParentUpdate(s->parent);
- }
-}
-
-// also good for NSBox and NSProgressIndicator
-static void singlePreferredSize(uiControl *c, uiSizing *d, intmax_t *width, intmax_t *height)
-{
- singleView *s = (singleView *) (c->Internal);
- NSControl *control;
- NSRect r;
-
- control = (NSControl *) (s->view);
- [control sizeToFit];
- // use alignmentRect here instead of frame because we'll be resizing based on that
- r = [control alignmentRectForFrame:[control frame]];
- *width = (intmax_t) r.size.width;
- *height = (intmax_t) r.size.height;
-}
-
-static void singleResize(uiControl *c, intmax_t x, intmax_t y, intmax_t width, intmax_t height, uiSizing *d)
-{
- singleView *s = (singleView *) (c->Internal);
- NSRect frame;
-
- frame.origin.x = x;
- // mac os x coordinate system has (0,0) in the lower-left
- frame.origin.y = ([[s->immediate superview] bounds].size.height - height) - y;
- frame.size.width = width;
- frame.size.height = height;
- frame = [s->immediate frameForAlignmentRect:frame];
- [s->immediate setFrame:frame];
-}
-
-static int singleVisible(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- if (s->userHid)
- return 0;
- return 1;
-}
-
-static void singleShow(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- s->userHid = NO;
- if (!s->containerHid) {
- [s->immediate setHidden:NO];
- if (s->parent != NULL)
- uiParentUpdate(s->parent);
- }
-}
-
-static void singleHide(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- s->userHid = YES;
- [s->immediate setHidden:YES];
- if (s->parent != NULL)
- uiParentUpdate(s->parent);
-}
-
-static void singleContainerShow(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- s->containerHid = NO;
- if (!s->userHid) {
- [s->immediate setHidden:NO];
- if (s->parent != NULL)
- uiParentUpdate(s->parent);
- }
-}
-
-static void singleContainerHide(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- s->containerHid = YES;
- [s->immediate setHidden:YES];
- if (s->parent != NULL)
- uiParentUpdate(s->parent);
-}
-
-static void enable(singleView *s)
-{
- if ([s->view respondsToSelector:@selector(setEnabled:)])
- [((NSControl *) (s->view)) setEnabled:YES];
-}
-
-static void disable(singleView *s)
-{
- if ([s->view respondsToSelector:@selector(setEnabled:)])
- [((NSControl *) (s->view)) setEnabled:NO];
-}
-
-static void singleEnable(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- s->userDisabled = NO;
- if (!s->containerDisabled)
- enable(s);
-}
-
-static void singleDisable(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- s->userDisabled = YES;
- disable(s);
-}
-
-static void singleContainerEnable(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- s->containerDisabled = NO;
- if (!s->userDisabled)
- enable(s);
-}
-
-static void singleContainerDisable(uiControl *c)
-{
- singleView *s = (singleView *) (c->Internal);
-
- s->containerDisabled = YES;
- disable(s);
-}
-
-void uiDarwinNewControl(uiControl *c, Class class, BOOL inScrollView, BOOL scrollViewHasBorder)
-{
- singleView *s;
-
- s = uiNew(singleView);
- // thanks to autoxr and arwyn in irc.freenode.net/#macdev
- s->view = (NSView *) [[class alloc] initWithFrame:NSZeroRect];
- s->immediate = s->view;
-
- if (inScrollView) {
- s->scrollView = [[NSScrollView alloc] initWithFrame:NSZeroRect];
- [s->scrollView setDocumentView:s->view];
- [s->scrollView setHasHorizontalScroller:YES];
- [s->scrollView setHasVerticalScroller:YES];
- [s->scrollView setAutohidesScrollers:YES];
- if (scrollViewHasBorder)
- [s->scrollView setBorderType:NSBezelBorder];
- else
- [s->scrollView setBorderType:NSNoBorder];
- s->immediate = (NSView *) (s->scrollView);
- }
-
- // and keep a reference to s->immediate for when we remove the control from its parent
- [s->immediate retain];
-
- c->Internal = s;
- c->Destroy = singleDestroy;
- c->Handle = singleHandle;
- c->SetParent = singleSetParent;
- c->PreferredSize = singlePreferredSize;
- c->Resize = singleResize;
- c->Visible = singleVisible;
- c->Show = singleShow;
- c->Hide = singleHide;
- c->ContainerShow = singleContainerShow;
- c->ContainerHide = singleContainerHide;
- c->Enable = singleEnable;
- c->Disable = singleDisable;
- c->ContainerEnable = singleContainerEnable;
- c->ContainerDisable = singleContainerDisable;
-}
-
-BOOL uiDarwinControlFreeWhenAppropriate(uiControl *c, NSView *newSuperview)
-{
- singleView *s = (singleView *) (c->Internal);
-
- if (newSuperview == destroyedControlsView) {
- [s->immediate release]; // we don't need the reference anymore
- uiFree(s);
- return YES;
- }
- return NO;
-}