From 1fb1974b5578149b436553cf5f620372a8a6a69e Mon Sep 17 00:00:00 2001 From: Eduardo DAVILA Date: Fri, 3 Aug 2018 17:05:16 +0200 Subject: [PATCH] #3204 crea Feature New Normal branch mingw64 --- src/creaSystem.cxx | 47 ++++++++++++++++++------- src/creaSystem.h | 8 +++++ src/creawxVTKRenderWindowInteractor.cxx | 5 +++ 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/creaSystem.cxx b/src/creaSystem.cxx index 3847f2b..7966999 100644 --- a/src/creaSystem.cxx +++ b/src/creaSystem.cxx @@ -30,11 +30,6 @@ #include #include -#ifdef WIN32 - #include /* GetModuleFileName */ - #include - -#endif /* WIN32 */ #ifdef LINUX #include @@ -78,6 +73,34 @@ namespace crea } #endif + + +#ifdef _WIN32 + +//===================================================================================== +/* http://forums.codeguru.com/showthread.php?336106-WCHAR*-to-CHAR* +|| ::DESCRIPTION:: +|| This function will convert a WCHAR string to a CHAR string. +|| +|| Param 1 :: Pointer to a buffer that will contain the converted string. Ensure this +|| buffer is large enough; if not, buffer overrun errors will occur. +|| Param 2 :: Constant pointer to a source WCHAR string to be converted to CHAR +*/ +void System::wtoc(const WCHAR* Source,CHAR* Dest) +{ + int i = 0; + while(Source[i] != '\0') + { + Dest[i] = (CHAR)Source[i]; + ++i; + } // while +} + + +#endif + + + int System::GetAppPath(char *pname, size_t pathsize) { #ifdef LINUX @@ -101,8 +124,8 @@ int System::GetAppPath(char *pname, size_t pathsize) //2018-07-06 mingw64 wchar_t pname2[512]; long result = GetModuleFileName(NULL, pname2, pathsize); + crea::System::wtoc(pname2,pname); // long result = GetModuleFileName(NULL, pname, pathsize); - int ret = wcstombs ( pname, pname2, sizeof(pname) ); if (result > 0) { @@ -220,9 +243,8 @@ std::string System::GetDllAppPath(std::string &nomdll){ //2018-07-06 mingw64 wchar_t currentPath2[512]; GetModuleFileName(hand, currentPath2, _MAX_PATH); - int ret = wcstombs ( currentPath, currentPath2, sizeof(currentPath) ); + crea::System::wtoc(currentPath2,currentPath); // GetModuleFileName(hand, currentPath, _MAX_PATH); - path = currentPath; path = path.substr(0,path.find_last_of("\\")); @@ -245,17 +267,14 @@ std::string System::GetDllAppPath(const char *nomdll){ //2018-07-06 mingw64 wchar_t currentPath2[512]; GetModuleFileName(hand, currentPath2, _MAX_PATH); - int ret = wcstombs ( currentPath, currentPath2, sizeof(currentPath) ); + crea::System::wtoc(currentPath2,currentPath); // GetModuleFileName(hand, currentPath, _MAX_PATH); - path = currentPath; - path = path.substr(0,path.find_last_of("\\")); #endif return path; } - #if defined(_WIN32) #define CREACONTOUR_VALID_FILE_SEPARATOR_CHAR '\\' #else @@ -263,10 +282,12 @@ std::string System::GetDllAppPath(const char *nomdll){ #endif //========================================================================= -std::string System::GetExecutablePath(){ +std::string System::GetExecutablePath() +{ char name[PATH_MAX]; //EED int err = get_app_path(name, PATH_MAX); int err = System::GetAppPath(name,PATH_MAX); +printf("EED creaSystem::GetExecutablePath %s \n",name); if (err) { printf("Could not determine current executable path ? "); diff --git a/src/creaSystem.h b/src/creaSystem.h index 8fc1a34..34572ce 100644 --- a/src/creaSystem.h +++ b/src/creaSystem.h @@ -156,6 +156,11 @@ // Version #include +#ifdef WIN32 + #include /* GetModuleFileName */ + #include +#endif /* WIN32 */ + namespace crea { #define CREA_STRINGIFY(A) #A @@ -232,6 +237,9 @@ namespace crea { /// returns true iff the program has a tty static int HasTTY(); +#ifdef WIN32 + CREA_EXPORT static void wtoc(const WCHAR* Source,CHAR* Dest); +#endif /* WIN32 */ CREA_EXPORT static int GetAppPath(char *pname, size_t pathsize); CREA_EXPORT static std::string GetDllAppPath(std::string &nomdll); CREA_EXPORT static std::string GetDllAppPath(const char *nomdll); diff --git a/src/creawxVTKRenderWindowInteractor.cxx b/src/creawxVTKRenderWindowInteractor.cxx index a614f24..62cd9da 100644 --- a/src/creawxVTKRenderWindowInteractor.cxx +++ b/src/creawxVTKRenderWindowInteractor.cxx @@ -77,6 +77,7 @@ #endif #endif + //======================================================================= // LG : NAMESPACE IS NECESSARY TO AVOID CONFLICTING SYMBOLS IN DYN LIBS namespace crea @@ -504,7 +505,11 @@ void wxVTKRenderWindowInteractor::OnPaint(wxPaintEvent& WXUNUSED(event)) if(!Handle) { Handle = GetHandleHack(); + + RenderWindow->SetWindowId(reinterpret_cast(Handle)); + + // Cocoa // this->GetNSView() <-> DisplayId // this->GetTopLevel()->GetNSWindow() <-> WindowId -- 2.47.1