From c133706890c13466ae9ef79f79859288d7737b7f Mon Sep 17 00:00:00 2001 From: Henrique Santiago Date: Sun, 20 Mar 2011 17:23:13 -0300 Subject: [PATCH 1/2] app name as variable --- src/framework/platform.h | 4 ++-- src/framework/win32platform.cpp | 28 +++++++++++++++------------- src/framework/x11platform.cpp | 8 +++++--- src/main.cpp | 10 +++++----- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/framework/platform.h b/src/framework/platform.h index 054f81c6..55758337 100644 --- a/src/framework/platform.h +++ b/src/framework/platform.h @@ -29,7 +29,7 @@ namespace Platform { - void init(); + void init(const char *appName); void terminate(); /// Poll platform input/window events @@ -69,7 +69,7 @@ namespace Platform void swapBuffers(); /// Get the app user directory, the place to save files configurations files - const char *getAppUserDir(const char *appName); + const char *getAppUserDir(); } #endif // PLATFORM_H diff --git a/src/framework/win32platform.cpp b/src/framework/win32platform.cpp index db05102f..8cc8a4ab 100644 --- a/src/framework/win32platform.cpp +++ b/src/framework/win32platform.cpp @@ -36,14 +36,16 @@ struct Win32PlatformPrivate { HDC hdc; HGLRC hrc; + const char *appName; int x, y; int width, height; int minWidth, minHeight; bool maximized; } win32; -void Platform::init() +void Platform::init(const char *appName) { + win32.appName = appName; win32.instance = GetModuleHandle(NULL); WNDCLASSA wc; @@ -56,7 +58,7 @@ void Platform::init() wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Load The Arrow Pointer wc.hbrBackground = NULL; // No Background Required For GL wc.lpszMenuName = NULL; // We Don't Want A Menu - wc.lpszClassName = "OTClient"; // Set The Class Name + wc.lpszClassName = win32.appName; // Set The Class Name if(!RegisterClassA(&wc)) fatal("Failed to register the window class."); @@ -70,7 +72,7 @@ void Platform::terminate() } if(win32.instance) { - if(!UnregisterClassA("OTClient", win32.instance)) + if(!UnregisterClassA(win32.appName, win32.instance)) error("Unregister class failed."); win32.instance = NULL; @@ -112,15 +114,15 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i //AdjustWindowRectEx(&windowRect, dwStyle, FALSE, dwExStyle); win32.window = CreateWindowExA(dwExStyle, // Extended Style For The Window - "OTClient", // Class Name - "OTClient", // Window Title + win32.appName, // Class Name + win32.appName, // Window Title dwStyle, // Required Window Style - x, // Window X Position - y, // Window Y Position - width, // Calculate Window Width - height, // Calculate Window Height - NULL, // No Parent Window - NULL, // No Menu + x, // Window X Position + y, // Window Y Position + width, // Calculate Window Width + height, // Calculate Window Height + NULL, // No Parent Window + NULL, // No Menu win32.instance, // Instance NULL); @@ -294,10 +296,10 @@ bool Platform::isWindowMaximized() return win32.maximized; } -const char *Platform::getAppUserDir(const char *appName) +const char *Platform::getAppUserDir() { std::stringstream sdir; - sdir << PHYSFS_getUserDir() << "/." << appName << "/"; + sdir << PHYSFS_getUserDir() << "/." << win32.appName << "/"; if((mkdir(sdir.str().c_str()) != 0) && (errno != EEXIST)) error("Couldn't create directory for saving configuration file. (%s)", sdir.str().c_str()); return sdir.str().c_str(); diff --git a/src/framework/x11platform.cpp b/src/framework/x11platform.cpp index fcdc8610..636b35fe 100644 --- a/src/framework/x11platform.cpp +++ b/src/framework/x11platform.cpp @@ -53,14 +53,16 @@ struct X11PlatformPrivate { Atom atomUTF8String; bool visible; bool focused; + const char *appName; int width; int height; std::string clipboardText; std::map keyMap; } x11; -void Platform::init() +void Platform::init(const char *appName) { + x11.appName = appName; x11.display = NULL; x11.visual = NULL; x11.glxContext = NULL; @@ -732,10 +734,10 @@ bool Platform::isWindowMaximized() return false; } -const char *Platform::getAppUserDir(const char *appName) +const char *Platform::getAppUserDir() { std::stringstream sdir; - sdir << PHYSFS_getUserDir() << "/." << appName << "/"; + sdir << PHYSFS_getUserDir() << "/." << x11.appName << "/"; if((mkdir(sdir.str().c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) && (errno != EEXIST)) error("Couldn't create directory for saving configuration file. (%s)", sdir.str().c_str()); return sdir.str().c_str(); diff --git a/src/main.cpp b/src/main.cpp index 5b91a04d..eec361fe 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -71,10 +71,13 @@ int main(int argc, const char *argv[]) signal(SIGTERM, signal_handler); signal(SIGINT, signal_handler); + // init platform stuff + Platform::init("OTClient"); + // init resources g_resources.init(argv[0]); - if(g_resources.setWriteDir(Platform::getAppUserDir("OTClient"))) - g_resources.addToSearchPath(Platform::getAppUserDir("OTClient")); + if(g_resources.setWriteDir(Platform::getAppUserDir())) + g_resources.addToSearchPath(Platform::getAppUserDir()); g_resources.addToSearchPath("data"); // before loading configurations set the default ones @@ -86,9 +89,6 @@ int main(int argc, const char *argv[]) notice("OTClient 0.1.0"); - // init platform stuff - Platform::init(); - // create the window Platform::createWindow(g_config.getInteger("window x"), g_config.getInteger("window y"), g_config.getInteger("window width"), g_config.getInteger("window height"), From c864a2cb08054fa9d26623bca2e89c28a0fe1717 Mon Sep 17 00:00:00 2001 From: Henrique Santiago Date: Sun, 20 Mar 2011 18:08:57 -0300 Subject: [PATCH 2/2] clipboard fix --- src/framework/platform.h | 4 ++-- src/framework/win32platform.cpp | 23 +++++++++++++++++++++++ src/framework/x11platform.cpp | 4 ++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/framework/platform.h b/src/framework/platform.h index 55758337..33c17b77 100644 --- a/src/framework/platform.h +++ b/src/framework/platform.h @@ -57,8 +57,8 @@ namespace Platform /// Check if GL extension is supported bool isExtensionSupported(const char *ext); - const char *getTextFromClipboard(); - void copyToClipboard(const char *text); + const char *getClipboardText(); + void setClipboardText(const char *text); void hideMouseCursor(); void showMouseCursor(); diff --git a/src/framework/win32platform.cpp b/src/framework/win32platform.cpp index 8cc8a4ab..89b64cb3 100644 --- a/src/framework/win32platform.cpp +++ b/src/framework/win32platform.cpp @@ -244,6 +244,29 @@ bool Platform::isExtensionSupported(const char *ext) return false; } +const char *Platform::getClipboardText() +{ + const char *text = ""; + if(OpenClipboard(NULL)) { + text = (const char*)GetClipboardData(CF_TEXT); + CloseClipboard(); + } + return text; +} + +void Platform::setClipboardText(const char *text) +{ + int textLenght = strlen(text); + HANDLE hData = new HANDLE[textLenght + 1]; + memcpy(hData, text, textLenght + 1); + + if(OpenClipboard(NULL)) { + EmptyClipboard(); + SetClipboardData(CF_TEXT, hData); + CloseClipboard(); + } +} + void Platform::hideMouseCursor() { ShowCursor(false); diff --git a/src/framework/x11platform.cpp b/src/framework/x11platform.cpp index 636b35fe..7711028d 100644 --- a/src/framework/x11platform.cpp +++ b/src/framework/x11platform.cpp @@ -601,7 +601,7 @@ bool Platform::isExtensionSupported(const char *ext) return false; } -const char *Platform::getTextFromClipboard() +const char *Platform::getClipboardText() { Window ownerWindow = XGetSelectionOwner(x11.display, x11.atomClipboard); if(ownerWindow == x11.window) @@ -650,7 +650,7 @@ const char *Platform::getTextFromClipboard() return clipboard.c_str(); } -void Platform::copyToClipboard(const char *text) +void Platform::setClipboardText(const char *text) { x11.clipboardText = text; XSetSelectionOwner(x11.display, x11.atomClipboard, x11.window, CurrentTime);