aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--win32/PlatWin.cxx47
1 files changed, 17 insertions, 30 deletions
diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx
index fadc7d0f0..147a51c2a 100644
--- a/win32/PlatWin.cxx
+++ b/win32/PlatWin.cxx
@@ -247,7 +247,6 @@ void SetWindowPointer(HWND hWnd, void *ptr) noexcept {
::SetWindowLongPtr(hWnd, 0, reinterpret_cast<LONG_PTR>(ptr));
}
-CRITICAL_SECTION crPlatformLock;
HINSTANCE hinstPlatformRes {};
HCURSOR reverseArrowCursor {};
@@ -2227,35 +2226,24 @@ void FlipBitmap(HBITMAP bitmap, int width, int height) noexcept {
}
}
-HCURSOR GetReverseArrowCursor() noexcept {
- if (reverseArrowCursor)
- return reverseArrowCursor;
-
- ::EnterCriticalSection(&crPlatformLock);
- HCURSOR cursor = reverseArrowCursor;
- if (!cursor) {
- cursor = ::LoadCursor(NULL, IDC_ARROW);
- ICONINFO info;
- if (::GetIconInfo(cursor, &info)) {
- BITMAP bmp;
- if (::GetObject(info.hbmMask, sizeof(bmp), &bmp)) {
- FlipBitmap(info.hbmMask, bmp.bmWidth, bmp.bmHeight);
- if (info.hbmColor)
- FlipBitmap(info.hbmColor, bmp.bmWidth, bmp.bmHeight);
- info.xHotspot = bmp.bmWidth - 1 - info.xHotspot;
-
- reverseArrowCursor = ::CreateIconIndirect(&info);
- if (reverseArrowCursor)
- cursor = reverseArrowCursor;
- }
-
- ::DeleteObject(info.hbmMask);
+void LoadReverseArrowCursor() noexcept {
+ HCURSOR cursor = ::LoadCursor({}, IDC_ARROW);
+ ICONINFO info;
+ if (::GetIconInfo(cursor, &info)) {
+ BITMAP bmp;
+ if (::GetObject(info.hbmMask, sizeof(bmp), &bmp)) {
+ FlipBitmap(info.hbmMask, bmp.bmWidth, bmp.bmHeight);
if (info.hbmColor)
- ::DeleteObject(info.hbmColor);
+ FlipBitmap(info.hbmColor, bmp.bmWidth, bmp.bmHeight);
+ info.xHotspot = bmp.bmWidth - 1 - info.xHotspot;
+
+ reverseArrowCursor = ::CreateIconIndirect(&info);
}
+
+ ::DeleteObject(info.hbmMask);
+ if (info.hbmColor)
+ ::DeleteObject(info.hbmColor);
}
- ::LeaveCriticalSection(&crPlatformLock);
- return cursor;
}
}
@@ -2281,7 +2269,7 @@ void Window::SetCursor(Cursor curs) {
::SetCursor(::LoadCursor(NULL,IDC_HAND));
break;
case cursorReverseArrow:
- ::SetCursor(GetReverseArrowCursor());
+ ::SetCursor(reverseArrowCursor);
break;
case cursorArrow:
case cursorInvalid: // Should not occur, but just in case.
@@ -3331,8 +3319,8 @@ void Platform::Assert(const char *c, const char *file, int line) {
}
void Platform_Initialise(void *hInstance) {
- ::InitializeCriticalSection(&crPlatformLock);
hinstPlatformRes = static_cast<HINSTANCE>(hInstance);
+ LoadReverseArrowCursor();
ListBoxX_Register();
}
@@ -3368,7 +3356,6 @@ void Platform_Finalise(bool fromDllMain) {
if (reverseArrowCursor)
::DestroyCursor(reverseArrowCursor);
ListBoxX_Unregister();
- ::DeleteCriticalSection(&crPlatformLock);
}
}