Create wxCURSOR_RIGHT_ARROW on the fly from normal arrow cursor under MSW.
This allows to avoid having another cursor resource and also makes this cursor nicer as rightarr.cur looks rather out of place under modern Windows systems. Closes #14991. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73491 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -648,6 +648,7 @@ wxMSW:
|
||||
- Fix appearance of multiline coloured wxCheckBox (Catalin Raceanu).
|
||||
- Allow creating wxCursor from ANI files (Catalin Raceanu).
|
||||
- Add wxIcon::CreateFromHICON() (troelsk).
|
||||
- Improve wxCURSOR_RIGHT_ARROW appearance (DoltAlya).
|
||||
|
||||
wxOSX/Cocoa:
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 326 B |
@@ -50,7 +50,6 @@ WXCURSOR_PBRUSH CURSOR DISCARDABLE "wx/msw/pbrush.cur"
|
||||
WXCURSOR_PLEFT CURSOR DISCARDABLE "wx/msw/pntleft.cur"
|
||||
WXCURSOR_PRIGHT CURSOR DISCARDABLE "wx/msw/pntright.cur"
|
||||
WXCURSOR_BLANK CURSOR DISCARDABLE "wx/msw/blank.cur"
|
||||
WXCURSOR_RIGHT_ARROW CURSOR DISCARDABLE "wx/msw/rightarr.cur"
|
||||
WXCURSOR_CROSS CURSOR DISCARDABLE "wx/msw/cross.cur"
|
||||
|
||||
|
||||
|
@@ -276,6 +276,45 @@ wxCursor::wxCursor(const wxString& filename,
|
||||
}
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
void ReverseBitmap(HBITMAP bitmap, int width, int height)
|
||||
{
|
||||
MemoryHDC hdc;
|
||||
SelectInHDC selBitmap(hdc, bitmap);
|
||||
::StretchBlt(hdc, width - 1, 0, -width, height,
|
||||
hdc, 0, 0, width, height, SRCCOPY);
|
||||
}
|
||||
|
||||
HCURSOR CreateReverseCursor(HCURSOR cursor)
|
||||
{
|
||||
ICONINFO info;
|
||||
if ( !::GetIconInfo(cursor, &info) )
|
||||
return NULL;
|
||||
|
||||
HCURSOR cursorRev = NULL;
|
||||
|
||||
BITMAP bmp;
|
||||
if ( ::GetObject(info.hbmMask, sizeof(bmp), &bmp) )
|
||||
{
|
||||
ReverseBitmap(info.hbmMask, bmp.bmWidth, bmp.bmHeight);
|
||||
if ( info.hbmColor )
|
||||
ReverseBitmap(info.hbmColor, bmp.bmWidth, bmp.bmHeight);
|
||||
info.xHotspot = (DWORD)bmp.bmWidth - 1 - info.xHotspot;
|
||||
|
||||
cursorRev = ::CreateIconIndirect(&info);
|
||||
}
|
||||
|
||||
::DeleteObject(info.hbmMask);
|
||||
if ( info.hbmColor )
|
||||
::DeleteObject(info.hbmColor);
|
||||
|
||||
return cursorRev;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
// Cursors by stock number
|
||||
void wxCursor::InitFromStock(wxStockCursor idCursor)
|
||||
{
|
||||
@@ -340,6 +379,16 @@ void wxCursor::InitFromStock(wxStockCursor idCursor)
|
||||
deleteLater = true;
|
||||
}
|
||||
|
||||
if ( !hcursor && idCursor == wxCURSOR_RIGHT_ARROW)
|
||||
{
|
||||
hcursor = ::LoadCursor(NULL, IDC_ARROW);
|
||||
if ( hcursor )
|
||||
{
|
||||
hcursor = CreateReverseCursor(hcursor);
|
||||
deleteLater = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !hcursor )
|
||||
{
|
||||
if ( !stdCursor.isStd )
|
||||
|
Reference in New Issue
Block a user