summaryrefslogtreecommitdiff
path: root/indra/llwindow/llwindowmacosx.cpp
diff options
context:
space:
mode:
authorGeenz <geenz@geenzo.com>2013-01-01 11:32:53 -0500
committerGeenz <geenz@geenzo.com>2013-01-01 11:32:53 -0500
commitddb48d51d996b18063b111faa3b7e709160074d9 (patch)
treef64cab16299cec07756dea34823ab3749b4d1ec3 /indra/llwindow/llwindowmacosx.cpp
parent7a1593c083a7ed6e3d6589d5dd656354d748b8ce (diff)
More things in this commit:
- Removed the callback system in favor of simply defining functions in a header to later be implemented in whichever file is most convenient for what we want to do (i.e., calling LLWindow callbacks within LLWindowMacOSX, setting cursors in llwindowmacosx-objc.mm, etc.) - Viewer shutdown now works appropriately - Added a bit of debugging code to test if a key has been handled by the UI or not (useful for tracking down the mystery of the enter key not being handled) - Setup a cocoa quit handler within the application delegate that intercepts any termination requests
Diffstat (limited to 'indra/llwindow/llwindowmacosx.cpp')
-rw-r--r--indra/llwindow/llwindowmacosx.cpp73
1 files changed, 56 insertions, 17 deletions
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index a616b2df2d..cfdfbe2138 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -198,7 +198,7 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks,
}
-// These functions are used as callbacks for event handling within Cocoa.
+// These functions are used as wrappers for our internal event handling callbacks.
// It's a good idea to wrap these to avoid reworking more code than we need to within LLWindow.
void callKeyUp(unsigned short key, unsigned int mask)
@@ -216,9 +216,14 @@ void callUnicodeCallback(wchar_t character, unsigned int mask)
gWindowImplementation->getCallbacks()->handleUnicodeChar(character, mask);
}
-void callModifierCallback(unsigned int mask)
+void callFocus()
{
-
+ gWindowImplementation->getCallbacks()->handleFocus(gWindowImplementation);
+}
+
+void callFocusLost()
+{
+ gWindowImplementation->getCallbacks()->handleFocusLost(gWindowImplementation);
}
void callRightMouseDown(float *pos, MASK mask)
@@ -302,17 +307,41 @@ void callWindowUnfocus()
void callDeltaUpdate(float *delta, MASK mask)
{
- gWindowImplementation->updateMouseDeltas();
+ gWindowImplementation->updateMouseDeltas(delta);
+}
+
+void callMiddleMouseDown(float *pos, MASK mask)
+{
+ LLCoordGL outCoords;
+ outCoords.mX = llround(pos[0]);
+ outCoords.mY = llround(pos[1]);
+ float deltas[2];
+ gWindowImplementation->getMouseDeltas(deltas);
+ outCoords.mX += deltas[0];
+ outCoords.mY += deltas[1];
+ gWindowImplementation->getCallbacks()->handleMiddleMouseDown(gWindowImplementation, outCoords, mask);
+}
+
+void callMiddleMouseUp(float *pos, MASK mask)
+{
+ LLCoordGL outCoords;
+ outCoords.mX = llround(pos[0]);
+ outCoords.mY = llround(pos[1]);
+ float deltas[2];
+ gWindowImplementation->getMouseDeltas(deltas);
+ outCoords.mX += deltas[0];
+ outCoords.mY += deltas[1];
+ gWindowImplementation->getCallbacks()->handleMiddleMouseUp(gWindowImplementation, outCoords, mask);
}
-void LLWindowMacOSX::updateMouseDeltas()
+void LLWindowMacOSX::updateMouseDeltas(float* deltas)
{
if (mCursorDecoupled)
{
- CGMouseDelta x, y;
- CGGetLastMouseDelta( &x, &y );
- mCursorLastEventDeltaX = x;
- mCursorLastEventDeltaY = y;
+ mCursorLastEventDeltaX = llround(deltas[0]);
+ mCursorLastEventDeltaY = llround(-deltas[1]);
+
+
if (mCursorIgnoreNextDelta)
{
@@ -320,6 +349,7 @@ void LLWindowMacOSX::updateMouseDeltas()
mCursorLastEventDeltaY = 0;
mCursorIgnoreNextDelta = FALSE;
}
+ LL_INFOS("Delta Update") << "Last event delta: " << mCursorLastEventDeltaX << ", " << mCursorLastEventDeltaY << LL_ENDL;
} else {
mCursorLastEventDeltaX = 0;
mCursorLastEventDeltaY = 0;
@@ -342,6 +372,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
{
LL_INFOS("Window") << "Creating window..." << LL_ENDL;
mWindow = getMainAppWindow();
+ /*
LL_INFOS("Window") << "Registering key callbacks..." << LL_ENDL;
registerKeyDownCallback(mWindow, callKeyDown);
registerKeyUpCallback(mWindow, callKeyUp);
@@ -355,6 +386,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
registerScrollCallback(mWindow, callScrollMoved);
registerDeltaUpdateCallback(mWindow, callDeltaUpdate);
registerMouseExitCallback(mWindow, callMouseExit);
+ */
}
if(mContext == NULL)
@@ -363,7 +395,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
// Our OpenGL view is already defined within SecondLife.xib.
// Get the view instead.
mGLView = createOpenGLView(mWindow);
- registerResizeEventCallback(mGLView, callResize);
+ //registerResizeEventCallback(mGLView, callResize);
mContext = getCGLContextObj(mGLView);
// Since we just created the context, it needs to be set up.
glNeedsInit = TRUE;
@@ -439,9 +471,7 @@ void LLWindowMacOSX::destroyContext()
if(mContext != NULL)
{
LL_DEBUGS("Window") << "destroyContext: unhooking drawable " << LL_ENDL;
-
CGLSetCurrentContext(NULL);
- mContext = NULL;
}
// Clean up remaining GL state before blowing away window
@@ -454,16 +484,25 @@ void LLWindowMacOSX::destroyContext()
mPixelFormat = NULL;
}
- // Close the window
- if(mWindow != NULL)
- {
- }
-
// Clean up the GL context
if(mContext != NULL)
{
CGLDestroyContext(mContext);
}
+
+ // Destroy our LLOpenGLView
+ if(mGLView != NULL)
+ {
+ removeGLView(mGLView);
+ mGLView = NULL;
+ }
+
+ // Close the window
+ if(mWindow != NULL)
+ {
+ closeWindow(mWindow);
+ mWindow = NULL;
+ }
}