X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a756f210019dd5b51331b7181c816d3882146a30..15d9a04c6877a2f730b679402e6798aaace16e3a:/src/generic/dragimgg.cpp?ds=sidebyside diff --git a/src/generic/dragimgg.cpp b/src/generic/dragimgg.cpp index e7632a737c..9d6ae54d29 100644 --- a/src/generic/dragimgg.cpp +++ b/src/generic/dragimgg.cpp @@ -139,12 +139,12 @@ bool wxGenericDragImage::Create(const wxString& str, const wxCursor& cursor) dc.SetFont(wxNullFont); wxMemoryDC dc2; - dc2.SetFont(font); // Sometimes GetTextExtent isn't accurate enough, so make it longer wxBitmap bitmap((int) ((w+2) * 1.5), (int) h+2); dc2.SelectObject(bitmap); + dc2.SetFont(font); dc2.SetBackground(* wxWHITE_BRUSH); dc2.Clear(); dc2.SetBackgroundMode(wxTRANSPARENT); @@ -164,27 +164,31 @@ bool wxGenericDragImage::Create(const wxString& str, const wxCursor& cursor) #if wxUSE_IMAGE_IN_DRAGIMAGE // Make the bitmap masked - wxImage image(bitmap); + wxImage image = bitmap.ConvertToImage(); image.SetMaskColour(255, 255, 255); - bitmap = image.ConvertToBitmap(); + bitmap = wxBitmap(image); #endif return Create(bitmap, cursor); } +#if wxUSE_TREECTRL // Create a drag image for the given tree control item bool wxGenericDragImage::Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id) { wxString str = treeCtrl.GetItemText(id); return Create(str); } +#endif +#if wxUSE_LISTCTRL // Create a drag image for the given list control item bool wxGenericDragImage::Create(const wxListCtrl& listCtrl, long id) { wxString str = listCtrl.GetItemText(id); return Create(str); } +#endif // Begin drag bool wxGenericDragImage::BeginDrag(const wxPoint& hotspot, @@ -250,7 +254,9 @@ bool wxGenericDragImage::BeginDrag(const wxPoint& hotspot, (*backing) = wxBitmap(clientSize.x, clientSize.y); if (!m_fullScreen) + { m_windowDC = new wxClientDC(window); + } else { m_windowDC = new wxScreenDC; @@ -293,7 +299,13 @@ bool wxGenericDragImage::EndDrag() { if (m_window) { - m_window->ReleaseMouse(); +#ifdef __WXMSW__ + // Under Windows we can be pretty sure this test will give + // the correct results + if (wxWindow::GetCapture() == m_window) +#endif + m_window->ReleaseMouse(); + if (m_cursor.Ok() && m_oldCursor.Ok()) { m_window->SetCursor(m_oldCursor); @@ -370,7 +382,8 @@ bool wxGenericDragImage::Show() bool wxGenericDragImage::UpdateBackingFromWindow(wxDC& windowDC, wxMemoryDC& destDC, const wxRect& sourceRect, const wxRect& destRect) const { - return destDC.Blit(destRect.x, destRect.y, destRect.width, destRect.height, & windowDC, sourceRect.x, sourceRect.y); + return destDC.Blit(destRect.x, destRect.y, destRect.width, destRect.height, & windowDC, + sourceRect.x, sourceRect.y); } bool wxGenericDragImage::Hide()