some cleanup

now have function fghPlatformGetMousePos to get current mouse position
in screen coordinates
Using this in fg_menu as all that code should be platform independent


git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1376 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2012-07-29 05:11:53 +00:00
parent 3162c53c9f
commit faf732bda6
3 changed files with 40 additions and 35 deletions

View File

@ -371,8 +371,8 @@ struct tagSFG_Context
SFG_PlatformContext pContext; /* The window's FBConfig (X11) or device context (Windows) */
int DoubleBuffered; /* Treat the window as double-buffered */
GLint attribute_v_coord;
GLint attribute_v_normal;
GLint attribute_v_coord;
GLint attribute_v_normal;
};

View File

@ -720,12 +720,13 @@ void fgDeactivateMenu( SFG_Window *window )
if (fgState.MenuStatusCallback)
{
/* Get cursor position on screen and convert to relative to parent_window's client area */
POINT mouse_pos;
GetCursorPos(&mouse_pos);
mouse_pos.x -= glutGet( GLUT_WINDOW_X );
mouse_pos.y -= glutGet( GLUT_WINDOW_Y );
SFG_XYUse mouse_pos;
fghPlatformGetMousePos(&mouse_pos);
mouse_pos.X -= glutGet( GLUT_WINDOW_X );
mouse_pos.Y -= glutGet( GLUT_WINDOW_Y );
fgState.MenuStatusCallback(GLUT_MENU_NOT_IN_USE, mouse_pos.x, mouse_pos.y);
fgState.MenuStatusCallback(GLUT_MENU_NOT_IN_USE, mouse_pos.X, mouse_pos.Y);
}
}
}

View File

@ -85,13 +85,6 @@ typedef BOOL (WINAPI *pRegisterTouchWindow)(HWND,ULONG);
static pRegisterTouchWindow fghRegisterTouchWindow = (pRegisterTouchWindow)0xDEADBEEF;
#endif
/*
* Helper functions for getting client area from the window rect
* and the window rect from the client area given the style of the window
* (or a valid window pointer from which the style can be queried).
*/
extern void fghGetBorderWidth(const DWORD windowStyle, int* xBorderWidth, int* yBorderWidth);
/*
* Setup the pixel format for a Win32 window
@ -378,6 +371,38 @@ void fgPlatformSetWindow ( SFG_Window *window )
}
void fghPlatformGetMousePos(SFG_XYUse *mouse_pos)
{
POINT pos;
GetCursorPos(&pos);
mouse_pos->X = pos.x;
mouse_pos->Y = pos.y;
mouse_pos->Use = GL_TRUE;
}
/* Returns the width of the window borders based on the window's style.
*/
void fghGetBorderWidth(const DWORD windowStyle, int* xBorderWidth, int* yBorderWidth)
{
if (windowStyle & WS_THICKFRAME)
{
*xBorderWidth = GetSystemMetrics(SM_CXSIZEFRAME);
*yBorderWidth = GetSystemMetrics(SM_CYSIZEFRAME);
}
else if (windowStyle & WS_DLGFRAME)
{
*xBorderWidth = GetSystemMetrics(SM_CXFIXEDFRAME);
*yBorderWidth = GetSystemMetrics(SM_CYFIXEDFRAME);
}
else
{
*xBorderWidth = 0;
*yBorderWidth = 0;
}
}
/* Computes position of corners of window Rect (outer position including
* decorations) based on the provided client rect and based on the style
@ -516,27 +541,6 @@ RECT fghGetClientArea( const SFG_Window *window, BOOL wantPosOutside )
return windowRect;
}
/* Returns the width of the window borders based on the window's style.
*/
void fghGetBorderWidth(const DWORD windowStyle, int* xBorderWidth, int* yBorderWidth)
{
if (windowStyle & WS_THICKFRAME)
{
*xBorderWidth = GetSystemMetrics(SM_CXSIZEFRAME);
*yBorderWidth = GetSystemMetrics(SM_CYSIZEFRAME);
}
else if (windowStyle & WS_DLGFRAME)
{
*xBorderWidth = GetSystemMetrics(SM_CXFIXEDFRAME);
*yBorderWidth = GetSystemMetrics(SM_CYFIXEDFRAME);
}
else
{
*xBorderWidth = 0;
*yBorderWidth = 0;
}
}
#if(WINVER >= 0x500)
typedef struct
{