]> git.lizzy.rs Git - irrlicht.git/blobdiff - source/Irrlicht/COSOperator.cpp
Resolve conflicts with master
[irrlicht.git] / source / Irrlicht / COSOperator.cpp
index 7824e677f1395489204fc89b278222b4f7692682..132232feb5875262e7bd8911fd150c9adec87ea6 100644 (file)
@@ -5,9 +5,7 @@
 #include "COSOperator.h"\r
 \r
 #ifdef _IRR_WINDOWS_API_\r
-#ifndef _IRR_XBOX_PLATFORM_\r
 #include <windows.h>\r
-#endif\r
 #else\r
 #include <string.h>\r
 #include <unistd.h>\r
 #endif\r
 #endif\r
 \r
-#if defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
+#include <SDL_clipboard.h>\r
+#include <SDL_version.h>\r
+#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
 #include "CIrrDeviceLinux.h"\r
 #endif\r
 #if defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
 \r
 #include "fast_atof.h"\r
 \r
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
+static bool sdl_supports_primary_selection = [] {\r
+#if SDL_VERSION_ATLEAST(2, 25, 0)\r
+       SDL_version linked_version;\r
+       SDL_GetVersion(&linked_version);\r
+       return (linked_version.major == 2 && linked_version.minor >= 25)\r
+                       || linked_version.major > 2;\r
+#else\r
+       return false;\r
+#endif\r
+}();\r
+#endif\r
+\r
 namespace irr\r
 {\r
 \r
@@ -56,14 +70,14 @@ const core::stringc& COSOperator::getOperatingSystemVersion() const
 \r
 \r
 //! copies text to the clipboard\r
-//! \param text: text in utf-8\r
 void COSOperator::copyToClipboard(const c8 *text) const\r
 {\r
        if (strlen(text)==0)\r
                return;\r
 \r
-// Windows version\r
-#if defined(_IRR_XBOX_PLATFORM_)\r
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
+       SDL_SetClipboardText(text);\r
+\r
 #elif defined(_IRR_WINDOWS_API_)\r
        if (!OpenClipboard(NULL) || text == 0)\r
                return;\r
@@ -101,18 +115,39 @@ void COSOperator::copyToClipboard(const c8 *text) const
 #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
     if ( IrrDeviceLinux )\r
         IrrDeviceLinux->copyToClipboard(text);\r
-#else\r
+#endif\r
+}\r
+\r
+\r
+//! copies text to the primary selection\r
+void COSOperator::copyToPrimarySelection(const c8 *text) const\r
+{\r
+       if (strlen(text)==0)\r
+               return;\r
 \r
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
+#if SDL_VERSION_ATLEAST(2, 25, 0)\r
+       if (sdl_supports_primary_selection)\r
+               SDL_SetPrimarySelectionText(text);\r
+#endif\r
+\r
+#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
+    if ( IrrDeviceLinux )\r
+        IrrDeviceLinux->copyToPrimarySelection(text);\r
 #endif\r
 }\r
 \r
 \r
 //! gets text from the clipboard\r
-//! \return Returns 0 if no string is in there, otherwise an utf-8 string.\r
 const c8* COSOperator::getTextFromClipboard() const\r
 {\r
-#if defined(_IRR_XBOX_PLATFORM_)\r
-               return 0;\r
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
+       static char *text = nullptr;\r
+       if (text)\r
+               SDL_free(text);\r
+       text = SDL_GetClipboardText();\r
+       return text;\r
+\r
 #elif defined(_IRR_WINDOWS_API_)\r
        if (!OpenClipboard(NULL))\r
                return 0;\r
@@ -154,9 +189,36 @@ const c8* COSOperator::getTextFromClipboard() const
 }\r
 \r
 \r
+//! gets text from the primary selection\r
+const c8* COSOperator::getTextFromPrimarySelection() const\r
+{\r
+#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
+#if SDL_VERSION_ATLEAST(2, 25, 0)\r
+       if (sdl_supports_primary_selection) {\r
+               static char *text = nullptr;\r
+               if (text)\r
+                       SDL_free(text);\r
+               text = SDL_GetPrimarySelectionText();\r
+               return text;\r
+       }\r
+#endif\r
+       return 0;\r
+\r
+#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
+    if ( IrrDeviceLinux )\r
+        return IrrDeviceLinux->getTextFromPrimarySelection();\r
+    return 0;\r
+\r
+#else\r
+\r
+       return 0;\r
+#endif\r
+}\r
+\r
+\r
 bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const\r
 {\r
-#if defined(_IRR_WINDOWS_API_) && !defined (_IRR_XBOX_PLATFORM_)\r
+#if defined(_IRR_WINDOWS_API_)\r
 \r
        MEMORYSTATUSEX MemoryStatusEx;\r
        MemoryStatusEx.dwLength = sizeof(MEMORYSTATUSEX);\r
@@ -170,24 +232,19 @@ bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const
                *Avail = (u32)(MemoryStatusEx.ullAvailPhys>>10);\r
        return true;\r
 \r
-#elif defined(_IRR_POSIX_API_) && !defined(__FreeBSD__)\r
-#if defined(_SC_PHYS_PAGES) && defined(_SC_AVPHYS_PAGES)\r
+#elif defined(_IRR_POSIX_API_) && defined(_SC_PHYS_PAGES) && defined(_SC_AVPHYS_PAGES)\r
         long ps = sysconf(_SC_PAGESIZE);\r
         long pp = sysconf(_SC_PHYS_PAGES);\r
         long ap = sysconf(_SC_AVPHYS_PAGES);\r
 \r
-       if ((ps==-1)||(pp==-1)||(ap==-1))\r
+       if (ps == -1 || (Total && pp == -1) || (Avail && ap == -1))\r
                return false;\r
 \r
        if (Total)\r
-               *Total = (u32)((ps*(long long)pp)>>10);\r
+               *Total = (u32)((pp>>10)*ps);\r
        if (Avail)\r
-               *Avail = (u32)((ps*(long long)ap)>>10);\r
+               *Avail = (u32)((ap>>10)*ps);\r
        return true;\r
-#else\r
-       // TODO: implement for non-availability of symbols/features\r
-       return false;\r
-#endif\r
 #elif defined(_IRR_OSX_PLATFORM_)\r
        int mib[2];\r
        int64_t physical_memory;\r
@@ -198,6 +255,11 @@ bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const
        mib[1] = HW_MEMSIZE;\r
        length = sizeof(int64_t);\r
        sysctl(mib, 2, &physical_memory, &length, NULL, 0);\r
+\r
+       if (Total)\r
+               *Total = (u32)(physical_memory>>10);\r
+       if (Avail)\r
+               *Avail = (u32)(physical_memory>>10); // we don't know better\r
        return true;\r
 #else\r
        // TODO: implement for others\r