Changed: #947 window title, position, resize. fixed notify sound on key down.
This commit is contained in:
parent
67d3442211
commit
4b5ed65a30
5 changed files with 84 additions and 25 deletions
|
@ -1770,8 +1770,7 @@ void CDriverGL::setWindowTitle(const ucstring &title)
|
|||
SetWindowTextW(_hWnd,(WCHAR*)title.c_str());
|
||||
|
||||
#elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE)
|
||||
# warning "OpenGL Driver: Missing Mac Implementation"
|
||||
nlwarning("OpenGL Driver: Missing Mac Implementation");
|
||||
NL3D::MAC::setWindowTitle(title);
|
||||
|
||||
#elif defined (NL_OS_UNIX)
|
||||
XTextProperty text_property;
|
||||
|
@ -1790,11 +1789,11 @@ void CDriverGL::setWindowPos(uint32 x, uint32 y)
|
|||
SetWindowPos(_hWnd, NULL, _WindowX, _WindowY, 0, 0, SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOSIZE);
|
||||
|
||||
#elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE)
|
||||
# warning "OpenGL Driver: Missing Mac Implementation"
|
||||
nlwarning("OpenGL Driver: Missing Mac Implementation");
|
||||
NL3D::MAC::setWindowPos(x, y);
|
||||
|
||||
#elif defined (NL_OS_UNIX)
|
||||
XMoveWindow(dpy, win, _WindowX, _WindowY);
|
||||
|
||||
#endif // NL_OS_WINDOWS
|
||||
}
|
||||
|
||||
|
@ -2289,11 +2288,9 @@ void CDriverGL::setupViewport (const class CViewport& viewport)
|
|||
int clientHeight = _WindowHeight;
|
||||
|
||||
#elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE)
|
||||
# warning "OpenGL Driver: Temporary Mac Implementation"
|
||||
// nlwarning("OpenGL Driver: Temporary Mac Implementation");
|
||||
|
||||
int clientWidth = 1024;
|
||||
int clientHeight = 768;
|
||||
uint32 clientWidth, clientHeight;
|
||||
NL3D::MAC::getWindowSize(clientWidth, clientHeight);
|
||||
|
||||
#elif defined (NL_OS_UNIX)
|
||||
|
||||
|
@ -2544,11 +2541,8 @@ void CDriverGL::getWindowSize(uint32 &width, uint32 &height)
|
|||
}
|
||||
}
|
||||
#elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE)
|
||||
# warning "OpenGL Driver: Temporary Mac Implementation"
|
||||
// nlwarning("OpenGL Driver: Temporary Mac Implementation");
|
||||
|
||||
width = 1024;
|
||||
height = 768;
|
||||
NL3D::MAC::getWindowSize(width, height);
|
||||
|
||||
#elif defined (NL_OS_UNIX)
|
||||
XWindowAttributes xwa;
|
||||
|
@ -2579,8 +2573,8 @@ void CDriverGL::getWindowPos(uint32 &x, uint32 &y)
|
|||
}
|
||||
}
|
||||
#elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE)
|
||||
# warning "OpenGL Driver: Missing Mac Implementation"
|
||||
nlwarning("OpenGL Driver: Missing Mac Implementation");
|
||||
|
||||
NL3D::MAC::getWindowPos(x, y);
|
||||
|
||||
#elif defined (NL_OS_UNIX)
|
||||
x = y = 0;
|
||||
|
|
|
@ -34,26 +34,43 @@
|
|||
*
|
||||
* this can as well be seen as a preparation to pull platform specific code
|
||||
* out of driver_opengl.cpp ;)
|
||||
*
|
||||
* btw: we cannot simply use a c++ class here, because then NSWindow* and friends
|
||||
* would be members, but then we would need to add obj-c code here using an
|
||||
* include or a forward declaration. this again would break compiling cpp files
|
||||
* including this one (eg. driver_opengl.cpp)
|
||||
*/
|
||||
|
||||
namespace NL3D { namespace MAC {
|
||||
|
||||
/// mac specific stuff todo while calling CDriverGL::CDriverGL()
|
||||
/// mac specific stuff while calling CDriverGL::CDriverGL()
|
||||
void ctor();
|
||||
|
||||
/// mac specific stuff todo while calling CDriverGL::~CDriverGL()
|
||||
/// mac specific stuff while calling CDriverGL::~CDriverGL()
|
||||
void dtor();
|
||||
|
||||
/// mac specific stuff todo while calling CDriverGL::init()
|
||||
/// mac specific stuff while calling CDriverGL::init()
|
||||
bool init(uint windowIcon = 0, emptyProc exitFunc = 0);
|
||||
|
||||
/// mac specific stuff todo while calling CDriverGL::setDisplay()
|
||||
/// mac specific stuff while calling CDriverGL::setDisplay()
|
||||
bool setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool resizeable);
|
||||
|
||||
/// mac specific stuff todo while calling CDriverGL::swapBuffers()
|
||||
/// mac specific stuff while calling CDriverGL::getWindowSize()
|
||||
void getWindowSize(uint32 &width, uint32 &height);
|
||||
|
||||
/// mac specific stuff while calling CDriverGL::getWindowPos()
|
||||
void getWindowPos(uint32 &x, uint32 &y);
|
||||
|
||||
/// mac specific stuff while calling CDriverGL::setWindowPos()
|
||||
void setWindowPos(uint32 x, uint32 y);
|
||||
|
||||
/// mac specific stuff while calling CDriverGL::setWindowTitle()
|
||||
void setWindowTitle(const ucstring &title);
|
||||
|
||||
/// mac specific stuff while calling CDriverGL::swapBuffers()
|
||||
void swapBuffers();
|
||||
|
||||
/// mac specific stuff todo while calling CCocoaEventEmitter::submitEvents()
|
||||
/// mac specific stuff while calling CCocoaEventEmitter::submitEvents()
|
||||
void submitEvents(NLMISC::CEventServer& server,
|
||||
bool allWindows, NLMISC::CCocoaEventEmitter* eventEmitter);
|
||||
|
||||
|
|
|
@ -69,7 +69,8 @@ bool setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool resizeable)
|
|||
nldebug("mac cpp bridge called with %u %u %u %u", wnd, &mode, show, resizeable);
|
||||
|
||||
// create a window
|
||||
g_window = [[CocoaWindow alloc] initWithContentRect:NSMakeRect(10, 10, 1024, 768)
|
||||
/* TODO: NSBackingStoreBuffered ??? */
|
||||
g_window = [[CocoaWindow alloc] initWithContentRect:NSMakeRect(0, 0, 1024, 768)
|
||||
styleMask:NSTitledWindowMask | NSResizableWindowMask |
|
||||
NSClosableWindowMask | NSMiniaturizableWindowMask
|
||||
backing:NSBackingStoreBuffered
|
||||
|
@ -100,7 +101,6 @@ bool setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool resizeable)
|
|||
g_glctx = [g_glview openGLContext];
|
||||
|
||||
// setup some stuff in the window
|
||||
[g_window setTitle:@"NeL Cocoa Test"];
|
||||
[g_window setContentView:g_glview];
|
||||
[g_window makeKeyAndOrderFront:nil];
|
||||
[g_window setAcceptsMouseMovedEvents:YES];
|
||||
|
@ -117,6 +117,39 @@ bool setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool resizeable)
|
|||
return true;
|
||||
}
|
||||
|
||||
void getWindowSize(uint32 &width, uint32 &height)
|
||||
{
|
||||
NSRect rect = [g_glview bounds];
|
||||
width = rect.size.width;
|
||||
height = rect.size.height;
|
||||
}
|
||||
|
||||
void getWindowPos(uint32 &x, uint32 &y)
|
||||
{
|
||||
/*
|
||||
TODO mac os gives bottom left
|
||||
*/
|
||||
|
||||
NSRect rect = [g_window frame];
|
||||
x = rect.origin.x;
|
||||
y = rect.origin.y;
|
||||
|
||||
nldebug("%d %d", x, y);
|
||||
}
|
||||
|
||||
void setWindowPos(uint32 x, uint32 y)
|
||||
{
|
||||
/*
|
||||
TODO mac os gets bottom left
|
||||
*/
|
||||
[g_window setFrameOrigin:NSMakePoint(x, y)];
|
||||
}
|
||||
|
||||
void setWindowTitle(const ucstring &title)
|
||||
{
|
||||
[g_window setTitle:[NSString stringWithUTF8String:title.toUtf8().c_str()]];
|
||||
}
|
||||
|
||||
void swapBuffers()
|
||||
{
|
||||
[g_glctx flushBuffer];
|
||||
|
@ -274,6 +307,7 @@ void submitEvents(NLMISC::CEventServer& server,
|
|||
g_pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
// we break if there was no event to handle
|
||||
/* TODO maximum? */
|
||||
while(true)
|
||||
{
|
||||
// get the next event to handle
|
||||
|
@ -285,11 +319,15 @@ void submitEvents(NLMISC::CEventServer& server,
|
|||
if(!event)
|
||||
break;
|
||||
|
||||
NSLog(@"%@", event);
|
||||
// NSLog(@"%@", event);
|
||||
|
||||
uint32 width, height;
|
||||
/* TODO cache? */
|
||||
getWindowSize(width, height);
|
||||
|
||||
// get the mouse position in nel style (relative)
|
||||
float mouseX = event.locationInWindow.x / 1024.0;
|
||||
float mouseY = event.locationInWindow.y / 768.0;
|
||||
float mouseX = event.locationInWindow.x / (float)width;
|
||||
float mouseY = event.locationInWindow.y / (float)height;
|
||||
|
||||
// string to store symbols in case of key press
|
||||
ucstring ucstr;
|
||||
|
|
|
@ -27,5 +27,6 @@
|
|||
|
||||
-(BOOL)acceptsFirstResponder;
|
||||
-(BOOL)needsPanelToBecomeKey;
|
||||
-(void)keyDown:(NSEvent*)event;
|
||||
|
||||
@end
|
||||
|
|
|
@ -30,4 +30,13 @@
|
|||
return NO;
|
||||
}
|
||||
|
||||
-(void)keyDown:(NSEvent*)event
|
||||
{
|
||||
// we handle the key here, so os x does not make a sound :)
|
||||
/*
|
||||
TODO do it in the event emitter? eg do not forward key down?
|
||||
does command+q / command+m still work then?
|
||||
*/
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Reference in a new issue