X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/76b49cf49ba9ee9f3eeec9730cb4bc4569ab17f1..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/msw/dragimag.cpp diff --git a/src/msw/dragimag.cpp b/src/msw/dragimag.cpp index 75d271d05c..067d67608d 100644 --- a/src/msw/dragimag.cpp +++ b/src/msw/dragimag.cpp @@ -27,6 +27,7 @@ #if wxUSE_DRAGIMAGE #ifndef WX_PRECOMP + #include "wx/msw/wrapcctl.h" // include "properly" #include #include "wx/window.h" #include "wx/dcclient.h" @@ -36,10 +37,10 @@ #include "wx/intl.h" #include "wx/log.h" #include "wx/frame.h" + #include "wx/image.h" #endif #include "wx/msw/private.h" -#include "wx/image.h" #include "wx/msw/dragimag.h" #include "wx/msw/private.h" @@ -48,9 +49,6 @@ #include "wx/msw/wince/missing.h" #endif // __WXWINCE__ -// include "properly" -#include "wx/msw/wrapcctl.h" - // Wine doesn't have this yet #ifndef ListView_CreateDragImage #define ListView_CreateDragImage(hwnd, i, lpptUpLeft) \ @@ -94,10 +92,48 @@ void wxDragImage::Init() #if !wxUSE_SIMPLER_DRAGIMAGE m_hCursorImageList = 0; #endif - m_window = (wxWindow*) NULL; + m_window = NULL; m_fullScreen = false; } +#if WXWIN_COMPATIBILITY_2_8 +wxDragImage::wxDragImage(const wxBitmap& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot)) +{ + Init(); + + Create(image, cursor); +} + +wxDragImage::wxDragImage(const wxIcon& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot)) +{ + Init(); + + Create(image, cursor); +} + +wxDragImage::wxDragImage(const wxString& str, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot)) +{ + Init(); + + Create(str, cursor); +} + +bool wxDragImage::Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot)) +{ + return Create(image, cursor); +} + +bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot)) +{ + return Create(image, cursor); +} + +bool wxDragImage::Create(const wxString& str, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot)) +{ + return Create(str, cursor); +} +#endif // WXWIN_COMPATIBILITY_2_8 + // Attributes //////////////////////////////////////////////////////////////////////////// @@ -184,9 +220,8 @@ bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor) else flags = ILC_COLOR32; #endif - bool mask = true; - if ( mask ) - flags |= ILC_MASK; + + flags |= ILC_MASK; m_hImageList = (WXHIMAGELIST) ImageList_Create(image.GetWidth(), image.GetHeight(), flags, 1, 1); @@ -208,7 +243,7 @@ bool wxDragImage::Create(const wxString& str, const wxCursor& cursor) { wxFont font(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); - long w = 0, h = 0; + wxCoord w = 0, h = 0; wxScreenDC dc; dc.SetFont(font); dc.GetTextExtent(str, & w, & h); @@ -221,7 +256,7 @@ bool wxDragImage::Create(const wxString& str, const wxCursor& cursor) dc2.SetBackground(* wxWHITE_BRUSH); dc2.Clear(); - dc2.SetBackgroundMode(wxTRANSPARENT); + dc2.SetBackgroundMode(wxBRUSHSTYLE_TRANSPARENT); dc2.SetTextForeground(* wxLIGHT_GREY); dc2.DrawText(str, 0, 0); dc2.DrawText(str, 1, 0); @@ -253,7 +288,13 @@ bool wxDragImage::Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id) ImageList_Destroy(GetHimageList()); m_hImageList = (WXHIMAGELIST) TreeView_CreateDragImage(GetHwndOf(&treeCtrl), (HTREEITEM) id.m_pItem); - return m_hImageList != 0; + if ( !m_hImageList ) + { + // fall back on just the item text if there is no image + return Create(treeCtrl.GetItemText(id)); + } + + return true; } #endif @@ -264,8 +305,17 @@ bool wxDragImage::Create(const wxListCtrl& listCtrl, long id) if ( m_hImageList ) ImageList_Destroy(GetHimageList()); POINT pt; - pt.x = 0; pt.y = 0; - m_hImageList = (WXHIMAGELIST) ListView_CreateDragImage((HWND) listCtrl.GetHWND(), id, & pt); + pt.x = + pt.y = 0; + m_hImageList = (WXHIMAGELIST) + ListView_CreateDragImage(GetHwndOf(&listCtrl), id, &pt); + + if ( !m_hImageList ) + { + // as for wxTreeCtrl, fall back on dragging just the item text + return Create(listCtrl.GetItemText(id)); + } + return true; } #endif @@ -284,12 +334,12 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullS if (!ret) { - wxFAIL_MSG( _T("BeginDrag failed.") ); + wxFAIL_MSG( wxT("BeginDrag failed.") ); return false; } - if (m_cursor.Ok()) + if (m_cursor.IsOk()) { #if wxUSE_SIMPLER_DRAGIMAGE m_oldCursor = window->GetCursor(); @@ -340,7 +390,7 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullS } #if !wxUSE_SIMPLER_DRAGIMAGE - if (m_cursor.Ok()) + if (m_cursor.IsOk()) ::ShowCursor(FALSE); #endif @@ -363,7 +413,7 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, wxWindow* wxSize sz = fullScreenRect->GetSize(); - if (fullScreenRect->GetParent() && !fullScreenRect->IsKindOf(CLASSINFO(wxFrame))) + if (fullScreenRect->GetParent() && !wxDynamicCast(fullScreenRect, wxFrame)) fullScreenRect->GetParent()->ClientToScreen(& x, & y); rect.x = x; rect.y = y; @@ -385,13 +435,13 @@ bool wxDragImage::EndDrag() } #if wxUSE_SIMPLER_DRAGIMAGE - if (m_cursor.Ok() && m_oldCursor.Ok()) + if (m_cursor.IsOk() && m_oldCursor.IsOk()) m_window->SetCursor(m_oldCursor); #else ::ShowCursor(TRUE); #endif - m_window = (wxWindow*) NULL; + m_window = NULL; return true; }