add initial examples, replacing the 'Demos/Demos3'. Will make it work cross-platform, OpenGL3/OpenGL2 and add more examples to it.
This commit is contained in:
236
examples/ThirdPartyLibs/Gwen/Platforms/Windows.cpp
Normal file
236
examples/ThirdPartyLibs/Gwen/Platforms/Windows.cpp
Normal file
@@ -0,0 +1,236 @@
|
||||
/*
|
||||
GWEN
|
||||
Copyright (c) 2011 Facepunch Studios
|
||||
See license in Gwen.h
|
||||
*/
|
||||
|
||||
#include "Gwen/Macros.h"
|
||||
#include "Gwen/Platform.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include <mmsystem.h>
|
||||
#pragma comment( lib, "winmm.lib" )
|
||||
|
||||
using namespace Gwen;
|
||||
using namespace Gwen::Platform;
|
||||
|
||||
#ifdef UNICODE
|
||||
static LPWSTR iCursorConvertion[] =
|
||||
#else
|
||||
static LPSTR iCursorConvertion[] =
|
||||
#endif
|
||||
{
|
||||
IDC_ARROW,
|
||||
IDC_IBEAM,
|
||||
IDC_SIZENS,
|
||||
IDC_SIZEWE,
|
||||
IDC_SIZENWSE,
|
||||
IDC_SIZENESW,
|
||||
IDC_SIZEALL,
|
||||
IDC_NO,
|
||||
IDC_WAIT,
|
||||
IDC_HAND
|
||||
};
|
||||
|
||||
void Gwen::Platform::SetCursor( unsigned char iCursor )
|
||||
{
|
||||
// Todo.. Properly.
|
||||
::SetCursor( LoadCursor( NULL, iCursorConvertion[iCursor] ) );
|
||||
}
|
||||
|
||||
Gwen::UnicodeString Gwen::Platform::GetClipboardText()
|
||||
{
|
||||
if ( !OpenClipboard( NULL ) ) return L"";
|
||||
|
||||
HANDLE hData = GetClipboardData( CF_UNICODETEXT );
|
||||
|
||||
if ( hData == NULL )
|
||||
{
|
||||
CloseClipboard();
|
||||
return L"";
|
||||
}
|
||||
|
||||
wchar_t* buffer = (wchar_t *)GlobalLock( hData );
|
||||
UnicodeString str = buffer;
|
||||
GlobalUnlock( hData );
|
||||
CloseClipboard();
|
||||
return str;
|
||||
}
|
||||
|
||||
bool Gwen::Platform::SetClipboardText( const Gwen::UnicodeString& str )
|
||||
{
|
||||
if ( !OpenClipboard( NULL ) ) return false;
|
||||
|
||||
EmptyClipboard();
|
||||
|
||||
// Create a buffer to hold the string
|
||||
size_t iDataSize = (str.length()+1) * sizeof(wchar_t);
|
||||
HGLOBAL clipbuffer = GlobalAlloc( GMEM_DDESHARE, iDataSize );
|
||||
|
||||
// Copy the string into the buffer
|
||||
wchar_t* buffer = (wchar_t*) GlobalLock( clipbuffer );
|
||||
wcscpy_s( buffer, iDataSize, str.c_str() );
|
||||
GlobalUnlock(clipbuffer);
|
||||
|
||||
// Place it on the clipboard
|
||||
SetClipboardData( CF_UNICODETEXT, clipbuffer );
|
||||
|
||||
CloseClipboard();
|
||||
return true;
|
||||
}
|
||||
|
||||
double GetPerformanceFrequency()
|
||||
{
|
||||
static double Frequency = 0.0f;
|
||||
|
||||
if ( Frequency == 0.0f )
|
||||
{
|
||||
__int64 perfFreq;
|
||||
QueryPerformanceFrequency( (LARGE_INTEGER*)&perfFreq );
|
||||
Frequency = 1.0 / (double)perfFreq;
|
||||
}
|
||||
|
||||
return Frequency;
|
||||
}
|
||||
|
||||
float Gwen::Platform::GetTimeInSeconds()
|
||||
{
|
||||
#if 1
|
||||
|
||||
static float fCurrentTime = 0.0f;
|
||||
static __int64 iLastTime = 0;
|
||||
|
||||
__int64 thistime;
|
||||
QueryPerformanceCounter( (LARGE_INTEGER*)&thistime );
|
||||
|
||||
float fSecondsDifference = (double)( thistime - iLastTime ) * GetPerformanceFrequency();
|
||||
if ( fSecondsDifference > 0.1f ) fSecondsDifference = 0.1f;
|
||||
|
||||
fCurrentTime += fSecondsDifference;
|
||||
|
||||
iLastTime = thistime;
|
||||
|
||||
return fCurrentTime;
|
||||
|
||||
#else
|
||||
|
||||
return timeGetTime() / 1000.0;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
bool Gwen::Platform::FileOpen( const String& Name, const String& StartPath, const String& Extension, Gwen::Event::Handler* pHandler, Event::Handler::FunctionStr fnCallback )
|
||||
{
|
||||
char Filestring[256];
|
||||
String returnstring;
|
||||
|
||||
char FilterBuffer[512];
|
||||
{
|
||||
memset( FilterBuffer, 0, sizeof(FilterBuffer) );
|
||||
memcpy( FilterBuffer, Extension.c_str(), GwenUtil_Min( Extension.size(), 512 ) );
|
||||
for (int i=0; i<512; i++)
|
||||
{
|
||||
if ( FilterBuffer[i] == '|' )
|
||||
FilterBuffer[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
OPENFILENAMEA opf;
|
||||
opf.hwndOwner = 0;
|
||||
opf.lpstrFilter = FilterBuffer;
|
||||
opf.lpstrCustomFilter = 0;
|
||||
opf.nMaxCustFilter = 0L;
|
||||
opf.nFilterIndex = 1L;
|
||||
opf.lpstrFile = Filestring;
|
||||
opf.lpstrFile[0] = '\0';
|
||||
opf.nMaxFile = 256;
|
||||
opf.lpstrFileTitle = 0;
|
||||
opf.nMaxFileTitle=50;
|
||||
opf.lpstrInitialDir = StartPath.c_str();
|
||||
opf.lpstrTitle = Name.c_str();
|
||||
opf.nFileOffset = 0;
|
||||
opf.nFileExtension = 0;
|
||||
opf.lpstrDefExt = "*.*";
|
||||
opf.lpfnHook = NULL;
|
||||
opf.lCustData = 0;
|
||||
opf.Flags = (OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR) & ~OFN_ALLOWMULTISELECT;
|
||||
opf.lStructSize = sizeof(OPENFILENAME);
|
||||
|
||||
if ( GetOpenFileNameA( &opf ) )
|
||||
{
|
||||
if ( pHandler && fnCallback )
|
||||
{
|
||||
(pHandler->*fnCallback)( opf.lpstrFile );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( pHandler && fnCallback )
|
||||
{
|
||||
(pHandler->*fnCallback)( "" );
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Gwen::Platform::FileSave( const String& Name, const String& StartPath, const String& Extension, Gwen::Event::Handler* pHandler, Gwen::Event::Handler::FunctionStr fnCallback )
|
||||
{
|
||||
char Filestring[256];
|
||||
String returnstring;
|
||||
|
||||
char FilterBuffer[512];
|
||||
{
|
||||
memset( FilterBuffer, 0, sizeof(FilterBuffer) );
|
||||
memcpy( FilterBuffer, Extension.c_str(), GwenUtil_Min( Extension.size(), 512 ) );
|
||||
for (int i=0; i<512; i++)
|
||||
{
|
||||
if ( FilterBuffer[i] == '|' )
|
||||
FilterBuffer[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
OPENFILENAMEA opf;
|
||||
opf.hwndOwner = 0;
|
||||
opf.lpstrFilter = FilterBuffer;
|
||||
opf.lpstrCustomFilter = 0;
|
||||
opf.nMaxCustFilter = 0L;
|
||||
opf.nFilterIndex = 1L;
|
||||
opf.lpstrFile = Filestring;
|
||||
opf.lpstrFile[0] = '\0';
|
||||
opf.nMaxFile = 256;
|
||||
opf.lpstrFileTitle = 0;
|
||||
opf.nMaxFileTitle=50;
|
||||
opf.lpstrInitialDir = StartPath.c_str();
|
||||
opf.lpstrTitle = Name.c_str();
|
||||
opf.nFileOffset = 0;
|
||||
opf.nFileExtension = 0;
|
||||
opf.lpstrDefExt = "*.*";
|
||||
opf.lpfnHook = NULL;
|
||||
opf.lCustData = 0;
|
||||
opf.Flags = (OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR) & ~OFN_ALLOWMULTISELECT;
|
||||
opf.lStructSize = sizeof(OPENFILENAME);
|
||||
|
||||
if ( GetSaveFileNameA( &opf ) )
|
||||
{
|
||||
if ( pHandler && fnCallback )
|
||||
{
|
||||
(pHandler->*fnCallback)( opf.lpstrFile );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( pHandler && fnCallback )
|
||||
{
|
||||
(pHandler->*fnCallback)( "" );
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif // WIN32
|
||||
Reference in New Issue
Block a user