More removal of uiWindow move events.
This commit is contained in:
parent
570b794650
commit
6d796b5642
|
@ -0,0 +1,90 @@
|
||||||
|
struct uiWindow {
|
||||||
|
// constraints
|
||||||
|
void (*onPositionChanged)(uiWindow *, void *);
|
||||||
|
void *onPositionChangedData;
|
||||||
|
BOOL suppressPositionChanged;
|
||||||
|
// onContentSizeChanged
|
||||||
|
};
|
||||||
|
|
||||||
|
@interface windowDelegateClass : NSObject<NSWindowDelegate> {
|
||||||
|
// windowShouldClose:
|
||||||
|
- (void)windowDidMove:(NSNotification *)note;
|
||||||
|
// windowDidResize:
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation windowDelegateClass
|
||||||
|
|
||||||
|
// - (BOOL)windowShouldClose:(id)sender
|
||||||
|
|
||||||
|
// TODO doesn't happen live
|
||||||
|
- (void)windowDidMove:(NSNotification *)note
|
||||||
|
{
|
||||||
|
uiWindow *w;
|
||||||
|
|
||||||
|
w = [self lookupWindow:((NSWindow *) [note object])];
|
||||||
|
if (!w->suppressPositionChanged)
|
||||||
|
(*(w->onPositionChanged))(w, w->onPositionChangedData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - (void)windowDidResize:(NSNotification *)note
|
||||||
|
|
||||||
|
// void uiWindowSetTitle(uiWindow *w, const char *title)
|
||||||
|
|
||||||
|
void uiWindowPosition(uiWindow *w, int *x, int *y)
|
||||||
|
{
|
||||||
|
NSScreen *screen;
|
||||||
|
NSRect r;
|
||||||
|
|
||||||
|
r = [w->window frame];
|
||||||
|
*x = r.origin.x;
|
||||||
|
// this is the right screen to use; thanks mikeash in irc.freenode.net/#macdev
|
||||||
|
// -mainScreen is useless for positioning (it's just the key window's screen)
|
||||||
|
// and we use -frame, not -visibleFrame, for dealing with absolute positions
|
||||||
|
screen = (NSScreen *) [[NSScreen screens] objectAtIndex:0];
|
||||||
|
*y = ([screen frame].size.height - r.origin.y) - r.size.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiWindowSetPosition(uiWindow *w, int x, int y)
|
||||||
|
{
|
||||||
|
// -[NSWindow setFrameTopLeftPoint:] is acting weird so...
|
||||||
|
NSRect r;
|
||||||
|
NSScreen *screen;
|
||||||
|
|
||||||
|
// this fires windowDidMove:
|
||||||
|
w->suppressPositionChanged = YES;
|
||||||
|
r = [w->window frame];
|
||||||
|
r.origin.x = x;
|
||||||
|
screen = (NSScreen *) [[NSScreen screens] objectAtIndex:0];
|
||||||
|
r.origin.y = [screen frame].size.height - (y + r.size.height);
|
||||||
|
[w->window setFrameOrigin:r.origin];
|
||||||
|
w->suppressPositionChanged = NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiWindowCenter(uiWindow *w)
|
||||||
|
{
|
||||||
|
w->suppressPositionChanged = YES;
|
||||||
|
[w->window center];
|
||||||
|
w->suppressPositionChanged = NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiWindowOnPositionChanged(uiWindow *w, void (*f)(uiWindow *, void *), void *data)
|
||||||
|
{
|
||||||
|
w->onPositionChanged = f;
|
||||||
|
w->onPositionChangedData = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
// void uiWindowContentSize(uiWindow *w, int *width, int *height)
|
||||||
|
|
||||||
|
// static int defaultOnClosing(uiWindow *w, void *data)
|
||||||
|
|
||||||
|
static void defaultOnPositionContentSizeChanged(uiWindow *w, void *data)
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar)
|
||||||
|
{
|
||||||
|
// uiWindowOnClosing(w, defaultOnClosing, NULL);
|
||||||
|
uiWindowOnPositionChanged(w, defaultOnPositionContentSizeChanged, NULL);
|
||||||
|
// uiWindowOnContentSizeChanged(w, defaultOnPositionContentSizeChanged, NULL);
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
// uiWindowSetTitle
|
||||||
|
_UI_EXTERN void uiWindowPosition(uiWindow *w, int *x, int *y);
|
||||||
|
_UI_EXTERN void uiWindowSetPosition(uiWindow *w, int x, int y);
|
||||||
|
_UI_EXTERN void uiWindowCenter(uiWindow *w);
|
||||||
|
_UI_EXTERN void uiWindowOnPositionChanged(uiWindow *w, void (*f)(uiWindow *, void *), void *data);
|
||||||
|
// uiWindowContentSize
|
|
@ -11,9 +11,6 @@ struct uiWindow {
|
||||||
int (*onClosing)(uiWindow *, void *);
|
int (*onClosing)(uiWindow *, void *);
|
||||||
void *onClosingData;
|
void *onClosingData;
|
||||||
struct singleChildConstraints constraints;
|
struct singleChildConstraints constraints;
|
||||||
void (*onPositionChanged)(uiWindow *, void *);
|
|
||||||
void *onPositionChangedData;
|
|
||||||
BOOL suppressPositionChanged;
|
|
||||||
void (*onContentSizeChanged)(uiWindow *, void *);
|
void (*onContentSizeChanged)(uiWindow *, void *);
|
||||||
void *onContentSizeChangedData;
|
void *onContentSizeChangedData;
|
||||||
BOOL suppressSizeChanged;
|
BOOL suppressSizeChanged;
|
||||||
|
@ -25,7 +22,6 @@ struct uiWindow {
|
||||||
struct mapTable *windows;
|
struct mapTable *windows;
|
||||||
}
|
}
|
||||||
- (BOOL)windowShouldClose:(id)sender;
|
- (BOOL)windowShouldClose:(id)sender;
|
||||||
- (void)windowDidMove:(NSNotification *)note;
|
|
||||||
- (void)windowDidResize:(NSNotification *)note;
|
- (void)windowDidResize:(NSNotification *)note;
|
||||||
- (void)windowDidEnterFullScreen:(NSNotification *)note;
|
- (void)windowDidEnterFullScreen:(NSNotification *)note;
|
||||||
- (void)windowDidExitFullScreen:(NSNotification *)note;
|
- (void)windowDidExitFullScreen:(NSNotification *)note;
|
||||||
|
@ -61,16 +57,6 @@ struct uiWindow {
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO doesn't happen live
|
|
||||||
- (void)windowDidMove:(NSNotification *)note
|
|
||||||
{
|
|
||||||
uiWindow *w;
|
|
||||||
|
|
||||||
w = [self lookupWindow:((NSWindow *) [note object])];
|
|
||||||
if (!w->suppressPositionChanged)
|
|
||||||
(*(w->onPositionChanged))(w, w->onPositionChangedData);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)windowDidResize:(NSNotification *)note
|
- (void)windowDidResize:(NSNotification *)note
|
||||||
{
|
{
|
||||||
uiWindow *w;
|
uiWindow *w;
|
||||||
|
@ -255,49 +241,6 @@ void uiWindowSetTitle(uiWindow *w, const char *title)
|
||||||
[w->window setTitle:toNSString(title)];
|
[w->window setTitle:toNSString(title)];
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiWindowPosition(uiWindow *w, int *x, int *y)
|
|
||||||
{
|
|
||||||
NSScreen *screen;
|
|
||||||
NSRect r;
|
|
||||||
|
|
||||||
r = [w->window frame];
|
|
||||||
*x = r.origin.x;
|
|
||||||
// this is the right screen to use; thanks mikeash in irc.freenode.net/#macdev
|
|
||||||
// -mainScreen is useless for positioning (it's just the key window's screen)
|
|
||||||
// and we use -frame, not -visibleFrame, for dealing with absolute positions
|
|
||||||
screen = (NSScreen *) [[NSScreen screens] objectAtIndex:0];
|
|
||||||
*y = ([screen frame].size.height - r.origin.y) - r.size.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
void uiWindowSetPosition(uiWindow *w, int x, int y)
|
|
||||||
{
|
|
||||||
// -[NSWindow setFrameTopLeftPoint:] is acting weird so...
|
|
||||||
NSRect r;
|
|
||||||
NSScreen *screen;
|
|
||||||
|
|
||||||
// this fires windowDidMove:
|
|
||||||
w->suppressPositionChanged = YES;
|
|
||||||
r = [w->window frame];
|
|
||||||
r.origin.x = x;
|
|
||||||
screen = (NSScreen *) [[NSScreen screens] objectAtIndex:0];
|
|
||||||
r.origin.y = [screen frame].size.height - (y + r.size.height);
|
|
||||||
[w->window setFrameOrigin:r.origin];
|
|
||||||
w->suppressPositionChanged = NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
void uiWindowCenter(uiWindow *w)
|
|
||||||
{
|
|
||||||
w->suppressPositionChanged = YES;
|
|
||||||
[w->window center];
|
|
||||||
w->suppressPositionChanged = NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
void uiWindowOnPositionChanged(uiWindow *w, void (*f)(uiWindow *, void *), void *data)
|
|
||||||
{
|
|
||||||
w->onPositionChanged = f;
|
|
||||||
w->onPositionChangedData = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void uiWindowContentSize(uiWindow *w, int *width, int *height)
|
void uiWindowContentSize(uiWindow *w, int *width, int *height)
|
||||||
{
|
{
|
||||||
NSRect r;
|
NSRect r;
|
||||||
|
@ -434,7 +377,6 @@ uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar)
|
||||||
}
|
}
|
||||||
[windowDelegate registerWindow:w];
|
[windowDelegate registerWindow:w];
|
||||||
uiWindowOnClosing(w, defaultOnClosing, NULL);
|
uiWindowOnClosing(w, defaultOnClosing, NULL);
|
||||||
uiWindowOnPositionChanged(w, defaultOnPositionContentSizeChanged, NULL);
|
|
||||||
uiWindowOnContentSizeChanged(w, defaultOnPositionContentSizeChanged, NULL);
|
uiWindowOnContentSizeChanged(w, defaultOnPositionContentSizeChanged, NULL);
|
||||||
|
|
||||||
return w;
|
return w;
|
||||||
|
|
4
ui.h
4
ui.h
|
@ -100,10 +100,6 @@ typedef struct uiWindow uiWindow;
|
||||||
#define uiWindow(this) ((uiWindow *) (this))
|
#define uiWindow(this) ((uiWindow *) (this))
|
||||||
_UI_EXTERN char *uiWindowTitle(uiWindow *w);
|
_UI_EXTERN char *uiWindowTitle(uiWindow *w);
|
||||||
_UI_EXTERN void uiWindowSetTitle(uiWindow *w, const char *title);
|
_UI_EXTERN void uiWindowSetTitle(uiWindow *w, const char *title);
|
||||||
_UI_EXTERN void uiWindowPosition(uiWindow *w, int *x, int *y);
|
|
||||||
_UI_EXTERN void uiWindowSetPosition(uiWindow *w, int x, int y);
|
|
||||||
_UI_EXTERN void uiWindowCenter(uiWindow *w);
|
|
||||||
_UI_EXTERN void uiWindowOnPositionChanged(uiWindow *w, void (*f)(uiWindow *, void *), void *data);
|
|
||||||
_UI_EXTERN void uiWindowContentSize(uiWindow *w, int *width, int *height);
|
_UI_EXTERN void uiWindowContentSize(uiWindow *w, int *width, int *height);
|
||||||
_UI_EXTERN void uiWindowSetContentSize(uiWindow *w, int width, int height);
|
_UI_EXTERN void uiWindowSetContentSize(uiWindow *w, int width, int height);
|
||||||
_UI_EXTERN int uiWindowFullscreen(uiWindow *w);
|
_UI_EXTERN int uiWindowFullscreen(uiWindow *w);
|
||||||
|
|
Loading…
Reference in New Issue