Fixed some wxDragImage bugs
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9711 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
1af9e5c56d
commit
aa2d25a57a
@ -92,7 +92,7 @@ have a mask.}
|
||||
|
||||
\docparam{cursor}{Optional cursor to combine with the image.}
|
||||
|
||||
\docparam{hotspot}{Optional position of the hotspot in the given cursor. This parameter is deprecated.}
|
||||
\docparam{hotspot}{This parameter is deprecated.}
|
||||
|
||||
\docparam{treeCtrl}{Tree control for constructing a tree drag image.}
|
||||
|
||||
@ -183,8 +183,7 @@ Call this to move the image to a new position. The image will only be shown if
|
||||
\helpref{wxDragImage::Show}{wxdragimageshow} has been called previously (for example
|
||||
at the start of the drag).
|
||||
|
||||
{\it pt} is the position in window coordinates (or screen coordinates if no
|
||||
window was specified to BeginDrag.
|
||||
{\it pt} is the position in client coordinates (relative to the window specified in BeginDrag).
|
||||
|
||||
You can move the image either when the image is hidden or shown, but in general dragging
|
||||
will be smoother if you move the image when it is shown.
|
||||
|
@ -97,35 +97,71 @@ public:
|
||||
// Ctors & dtor
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
wxGenericDragImage(const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0))
|
||||
wxGenericDragImage(const wxCursor& cursor = wxNullCursor)
|
||||
{
|
||||
Init();
|
||||
Create(cursor, hotspot);
|
||||
Create(cursor);
|
||||
}
|
||||
wxGenericDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0))
|
||||
|
||||
// Deprecated version of the above
|
||||
wxGenericDragImage(const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
Init();
|
||||
Create(cursor, cursorHotspot);
|
||||
}
|
||||
|
||||
wxGenericDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(image, cursor, hotspot);
|
||||
Create(image, cursor);
|
||||
}
|
||||
wxGenericDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0))
|
||||
|
||||
// Deprecated version of the above
|
||||
wxGenericDragImage(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(image, cursor, hotspot);
|
||||
Create(image, cursor, cursorHotspot);
|
||||
}
|
||||
wxGenericDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0))
|
||||
|
||||
wxGenericDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(str, cursor, hotspot);
|
||||
Create(image, cursor);
|
||||
}
|
||||
|
||||
// Deprecated version of the above
|
||||
wxGenericDragImage(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(image, cursor, cursorHotspot);
|
||||
}
|
||||
|
||||
wxGenericDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(str, cursor);
|
||||
}
|
||||
|
||||
// Deprecated version of the above
|
||||
wxGenericDragImage(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(str, cursor, cursorHotspot);
|
||||
}
|
||||
|
||||
wxGenericDragImage(const wxTreeCtrl& treeCtrl, wxTreeItemId& id)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(treeCtrl, id);
|
||||
}
|
||||
|
||||
wxGenericDragImage(const wxListCtrl& listCtrl, long id)
|
||||
{
|
||||
Init();
|
||||
@ -145,16 +181,36 @@ public:
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Create a drag image with a virtual image (need to override DoDrawImage, GetImageRect)
|
||||
bool Create(const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
|
||||
bool Create(const wxCursor& cursor = wxNullCursor);
|
||||
bool Create(const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot))
|
||||
{
|
||||
wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
|
||||
return Create(cursor);
|
||||
}
|
||||
|
||||
// Create a drag image from a bitmap and optional cursor
|
||||
bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
|
||||
bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor);
|
||||
bool Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
|
||||
return Create(image, cursor);
|
||||
}
|
||||
|
||||
// Create a drag image from an icon and optional cursor
|
||||
bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
|
||||
bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor);
|
||||
bool Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
|
||||
return Create(image, cursor);
|
||||
}
|
||||
|
||||
// Create a drag image from a string and optional cursor
|
||||
bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
|
||||
bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor);
|
||||
bool Create(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
|
||||
return Create(str, cursor);
|
||||
}
|
||||
|
||||
// Create a drag image for the given tree control item
|
||||
bool Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id);
|
||||
@ -211,7 +267,7 @@ protected:
|
||||
wxIcon m_icon;
|
||||
wxCursor m_cursor;
|
||||
wxCursor m_oldCursor;
|
||||
wxPoint m_hotspot;
|
||||
// wxPoint m_hotspot;
|
||||
wxPoint m_offset; // The hostpot value passed to BeginDrag
|
||||
wxPoint m_position;
|
||||
bool m_isDirty;
|
||||
|
@ -23,9 +23,8 @@
|
||||
#include "wx/treectrl.h"
|
||||
#include "wx/listctrl.h"
|
||||
|
||||
// If 1, use a simple wxCursor instead of ImageList_SetDragCursorImage,
|
||||
// and some other simplifications
|
||||
#define wxUSE_SIMPLER_DRAGIMAGE 1
|
||||
// If 1, use a simple wxCursor instead of ImageList_SetDragCursorImage
|
||||
#define wxUSE_SIMPLER_DRAGIMAGE 0
|
||||
|
||||
/*
|
||||
To use this class, create a wxDragImage when you start dragging, for example:
|
||||
@ -110,36 +109,65 @@ public:
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
wxDragImage();
|
||||
wxDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0))
|
||||
wxDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(image, cursor);
|
||||
}
|
||||
|
||||
// Deprecated form of the above
|
||||
wxDragImage(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(image, cursor, cursorHotspot);
|
||||
}
|
||||
wxDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0))
|
||||
|
||||
wxDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(image, cursor);
|
||||
}
|
||||
|
||||
// Deprecated form of the above
|
||||
wxDragImage(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(image, cursor, cursorHotspot);
|
||||
}
|
||||
wxDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0))
|
||||
|
||||
wxDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(str, cursor);
|
||||
}
|
||||
|
||||
// Deprecated form of the above
|
||||
wxDragImage(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(str, cursor, cursorHotspot);
|
||||
}
|
||||
|
||||
wxDragImage(const wxTreeCtrl& treeCtrl, wxTreeItemId& id)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(treeCtrl, id);
|
||||
}
|
||||
|
||||
wxDragImage(const wxListCtrl& listCtrl, long id)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(listCtrl, id);
|
||||
}
|
||||
|
||||
~wxDragImage();
|
||||
|
||||
// Attributes
|
||||
@ -149,13 +177,28 @@ public:
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Create a drag image from a bitmap and optional cursor
|
||||
bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0));
|
||||
bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor);
|
||||
bool Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot))
|
||||
{
|
||||
wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
|
||||
return Create(image, cursor);
|
||||
}
|
||||
|
||||
// Create a drag image from an icon and optional cursor
|
||||
bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0));
|
||||
bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor);
|
||||
bool Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot))
|
||||
{
|
||||
wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
|
||||
return Create(image, cursor);
|
||||
}
|
||||
|
||||
// Create a drag image from a string and optional cursor
|
||||
bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0));
|
||||
bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor);
|
||||
bool Create(const wxString& str, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot))
|
||||
{
|
||||
wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
|
||||
return Create(str, cursor);
|
||||
}
|
||||
|
||||
// Create a drag image for the given tree control item
|
||||
bool Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id);
|
||||
@ -209,7 +252,7 @@ protected:
|
||||
#endif
|
||||
|
||||
wxCursor m_cursor;
|
||||
wxPoint m_cursorHotspot;
|
||||
// wxPoint m_cursorHotspot; // Obsolete
|
||||
wxPoint m_position;
|
||||
wxWindow* m_window;
|
||||
wxRect m_boundingRect;
|
||||
|
@ -25,7 +25,7 @@
|
||||
// Under Windows, change this to 1
|
||||
// to use wxGenericDragImage
|
||||
|
||||
#define wxUSE_GENERIC_DRAGIMAGE 0
|
||||
#define wxUSE_GENERIC_DRAGIMAGE 1
|
||||
|
||||
#if wxUSE_GENERIC_DRAGIMAGE
|
||||
#include "wx/generic/dragimgg.h"
|
||||
@ -131,10 +131,8 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
|
||||
if (!m_draggedShape || !m_dragImage)
|
||||
return;
|
||||
|
||||
wxPoint newPos(m_draggedShape->GetPosition().x + (event.GetPosition().x - m_dragStartPos.x),
|
||||
m_draggedShape->GetPosition().y + (event.GetPosition().y - m_dragStartPos.y));
|
||||
|
||||
m_draggedShape->SetPosition(newPos);
|
||||
m_draggedShape->SetPosition(m_draggedShape->GetPosition()
|
||||
+ event.GetPosition() - m_dragStartPos);
|
||||
|
||||
m_dragImage->Hide();
|
||||
m_dragImage->EndDrag();
|
||||
@ -165,9 +163,6 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
|
||||
if (dx <= tolerance && dy <= tolerance)
|
||||
return;
|
||||
|
||||
wxPoint newPos(m_draggedShape->GetPosition().x + (event.GetPosition().x - m_dragStartPos.x),
|
||||
m_draggedShape->GetPosition().y + (event.GetPosition().y - m_dragStartPos.y));
|
||||
|
||||
// Start the drag.
|
||||
m_dragMode = TEST_DRAG_DRAGGING;
|
||||
|
||||
@ -184,20 +179,16 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
|
||||
{
|
||||
case SHAPE_DRAG_BITMAP:
|
||||
{
|
||||
wxPoint hotSpot(event.GetPosition().x - newPos.x, event.GetPosition().y - newPos.y);
|
||||
m_dragImage = new wxDragImage(m_draggedShape->GetBitmap(), wxCursor(wxCURSOR_HAND), hotSpot);
|
||||
m_dragImage = new wxDragImage(m_draggedShape->GetBitmap(), wxCursor(wxCURSOR_HAND));
|
||||
break;
|
||||
}
|
||||
case SHAPE_DRAG_TEXT:
|
||||
{
|
||||
wxPoint hotSpot(event.GetPosition().x - newPos.x, event.GetPosition().y - newPos.y);
|
||||
m_dragImage = new wxDragImage("Dragging some test text", wxCursor(wxCURSOR_HAND), hotSpot);
|
||||
m_dragImage = new wxDragImage("Dragging some test text", wxCursor(wxCURSOR_HAND));
|
||||
break;
|
||||
}
|
||||
case SHAPE_DRAG_ICON:
|
||||
{
|
||||
wxPoint hotSpot(event.GetPosition().x - newPos.x, event.GetPosition().y - newPos.y);
|
||||
|
||||
// Can anyone explain why this test is necessary,
|
||||
// to prevent a gcc error?
|
||||
#ifdef __WXMOTIF__
|
||||
@ -206,36 +197,33 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
|
||||
wxIcon icon(wxICON(dragicon));
|
||||
#endif
|
||||
|
||||
m_dragImage = new wxDragImage(icon, wxCursor(wxCURSOR_HAND), hotSpot);
|
||||
m_dragImage = new wxDragImage(icon, wxCursor(wxCURSOR_HAND));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool fullScreen = FALSE;
|
||||
if (wxGetApp().GetUseScreen())
|
||||
{
|
||||
newPos = ClientToScreen(newPos);
|
||||
fullScreen = TRUE;
|
||||
}
|
||||
bool fullScreen = wxGetApp().GetUseScreen();
|
||||
|
||||
bool retValue;
|
||||
// The offset between the top-left of the shape image and the current shape position
|
||||
wxPoint beginDragHotSpot = m_dragStartPos - m_draggedShape->GetPosition();
|
||||
|
||||
// Now we do this inside the implementation: always assume
|
||||
// coordinates relative to the capture window (client coordinates)
|
||||
|
||||
if (fullScreen)
|
||||
// This line uses the whole screen...
|
||||
retValue = m_dragImage->BeginDrag(wxPoint(0, 0), this, TRUE);
|
||||
// while this line restricts dragging to the parent frame.
|
||||
// retValue = m_dragImage->BeginDrag(wxPoint(0, 0), this, GetParent());
|
||||
else
|
||||
retValue = m_dragImage->BeginDrag(wxPoint(0, 0), this);
|
||||
|
||||
if (!retValue)
|
||||
//if (fullScreen)
|
||||
// beginDragHotSpot -= ClientToScreen(wxPoint(0, 0));
|
||||
|
||||
if (!m_dragImage->BeginDrag(beginDragHotSpot, this, fullScreen))
|
||||
{
|
||||
delete m_dragImage;
|
||||
m_dragImage = (wxDragImage*) NULL;
|
||||
m_dragMode = TEST_DRAG_NONE;
|
||||
|
||||
} else
|
||||
{
|
||||
m_dragImage->Move(event.GetPosition());
|
||||
m_dragImage->Show();
|
||||
}
|
||||
m_dragImage->Move(newPos);
|
||||
m_dragImage->Show();
|
||||
}
|
||||
else if (m_dragMode == TEST_DRAG_DRAGGING)
|
||||
{
|
||||
@ -272,16 +260,8 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
|
||||
m_currentlyHighlighted->Draw(clientDC, wxINVERT);
|
||||
}
|
||||
|
||||
wxPoint newPos(m_draggedShape->GetPosition().x + (event.GetPosition().x - m_dragStartPos.x),
|
||||
m_draggedShape->GetPosition().y + (event.GetPosition().y - m_dragStartPos.y));
|
||||
|
||||
if (wxGetApp().GetUseScreen())
|
||||
{
|
||||
newPos = ClientToScreen(newPos);
|
||||
}
|
||||
|
||||
// Move and show the image again
|
||||
m_dragImage->Move(newPos);
|
||||
m_dragImage->Move(event.GetPosition());
|
||||
|
||||
if (mustUnhighlightOld || mustHighlightNew)
|
||||
m_dragImage->Show();
|
||||
|
@ -94,42 +94,39 @@ void wxGenericDragImage::Init()
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Create a drag image with a virtual image (need to override DoDrawImage, GetImageRect)
|
||||
bool wxGenericDragImage::Create(const wxCursor& cursor, const wxPoint& hotspot)
|
||||
bool wxGenericDragImage::Create(const wxCursor& cursor)
|
||||
{
|
||||
m_cursor = cursor;
|
||||
m_hotspot = hotspot;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Create a drag image from a bitmap and optional cursor
|
||||
bool wxGenericDragImage::Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& hotspot)
|
||||
bool wxGenericDragImage::Create(const wxBitmap& image, const wxCursor& cursor)
|
||||
{
|
||||
// We don't have to combine the cursor explicitly since we simply show the cursor
|
||||
// as we drag. This currently will only work within one window.
|
||||
|
||||
m_cursor = cursor;
|
||||
m_hotspot = hotspot;
|
||||
m_bitmap = image;
|
||||
|
||||
return TRUE ;
|
||||
}
|
||||
|
||||
// Create a drag image from an icon and optional cursor
|
||||
bool wxGenericDragImage::Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& hotspot)
|
||||
bool wxGenericDragImage::Create(const wxIcon& image, const wxCursor& cursor)
|
||||
{
|
||||
// We don't have to combine the cursor explicitly since we simply show the cursor
|
||||
// as we drag. This currently will only work within one window.
|
||||
|
||||
m_cursor = cursor;
|
||||
m_hotspot = hotspot;
|
||||
m_icon = image;
|
||||
|
||||
return TRUE ;
|
||||
}
|
||||
|
||||
// Create a drag image from a string and optional cursor
|
||||
bool wxGenericDragImage::Create(const wxString& str, const wxCursor& cursor, const wxPoint& hotspot)
|
||||
bool wxGenericDragImage::Create(const wxString& str, const wxCursor& cursor)
|
||||
{
|
||||
wxFont font(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
|
||||
|
||||
@ -170,7 +167,7 @@ bool wxGenericDragImage::Create(const wxString& str, const wxCursor& cursor, con
|
||||
bitmap = image.ConvertToBitmap();
|
||||
#endif
|
||||
|
||||
return Create(bitmap, cursor, hotspot);
|
||||
return Create(bitmap, cursor);
|
||||
}
|
||||
|
||||
// Create a drag image for the given tree control item
|
||||
@ -319,15 +316,19 @@ bool wxGenericDragImage::Move(const wxPoint& pt)
|
||||
{
|
||||
wxASSERT_MSG( (m_windowDC != (wxDC*) NULL), wxT("No window DC in wxGenericDragImage::Move()") );
|
||||
|
||||
wxPoint pt2(pt);
|
||||
if (m_fullScreen)
|
||||
pt2 = m_window->ClientToScreen(pt);
|
||||
|
||||
// Erase at old position, then show at the current position
|
||||
wxPoint oldPos = m_position;
|
||||
|
||||
bool eraseOldImage = (m_isDirty && m_isShown);
|
||||
|
||||
if (m_isShown)
|
||||
RedrawImage(oldPos - m_offset, pt - m_offset, eraseOldImage, TRUE);
|
||||
RedrawImage(oldPos - m_offset, pt2 - m_offset, eraseOldImage, TRUE);
|
||||
|
||||
m_position = pt;
|
||||
m_position = pt2;
|
||||
|
||||
if (m_isShown)
|
||||
m_isDirty = TRUE;
|
||||
|
@ -102,7 +102,7 @@ void wxDragImage::Init()
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Create a drag image from a bitmap and optional cursor
|
||||
bool wxDragImage::Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
bool wxDragImage::Create(const wxBitmap& image, const wxCursor& cursor)
|
||||
{
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy(GetHimageList());
|
||||
@ -146,13 +146,12 @@ bool wxDragImage::Create(const wxBitmap& image, const wxCursor& cursor, const wx
|
||||
wxLogError(_("Couldn't add an image to the image list."));
|
||||
}
|
||||
m_cursor = cursor; // Can only combine with drag image after calling BeginDrag.
|
||||
m_cursorHotspot = cursorHotspot;
|
||||
|
||||
return (index != -1) ;
|
||||
}
|
||||
|
||||
// Create a drag image from an icon and optional cursor
|
||||
bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor)
|
||||
{
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy(GetHimageList());
|
||||
@ -184,13 +183,12 @@ bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor, const wxPo
|
||||
}
|
||||
|
||||
m_cursor = cursor; // Can only combine with drag image after calling BeginDrag.
|
||||
m_cursorHotspot = cursorHotspot;
|
||||
|
||||
return (index != -1) ;
|
||||
}
|
||||
|
||||
// Create a drag image from a string and optional cursor
|
||||
bool wxDragImage::Create(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot)
|
||||
bool wxDragImage::Create(const wxString& str, const wxCursor& cursor)
|
||||
{
|
||||
wxFont font(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
|
||||
|
||||
@ -226,7 +224,7 @@ bool wxDragImage::Create(const wxString& str, const wxCursor& cursor, const wxPo
|
||||
image.SetMaskColour(255, 255, 255);
|
||||
bitmap = image.ConvertToBitmap();
|
||||
|
||||
return Create(bitmap, cursor, cursorHotspot);
|
||||
return Create(bitmap, cursor);
|
||||
}
|
||||
|
||||
// Create a drag image for the given tree control item
|
||||
@ -260,6 +258,7 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullS
|
||||
m_boundingRect = * rect;
|
||||
|
||||
bool ret = (ImageList_BeginDrag(GetHimageList(), 0, hotspot.x, hotspot.y) != 0);
|
||||
//bool ret = (ImageList_BeginDrag(GetHimageList(), 0, 0, 0) != 0);
|
||||
|
||||
if (!ret)
|
||||
{
|
||||
@ -282,6 +281,21 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullS
|
||||
m_hCursorImageList = (WXHIMAGELIST) ImageList_Create(cxCursor, cyCursor, ILC_MASK, 1, 1);
|
||||
}
|
||||
|
||||
// See if we can find the cursor hotspot
|
||||
wxPoint curHotSpot(hotspot);
|
||||
|
||||
#if 0
|
||||
ICONINFO iconInfo;
|
||||
if (::GetIconInfo((HICON) (HCURSOR) m_cursor.GetHCURSOR(), & iconInfo) != 0)
|
||||
{
|
||||
curHotSpot.x -= iconInfo.xHotspot;
|
||||
curHotSpot.y -= iconInfo.yHotspot;
|
||||
}
|
||||
#endif
|
||||
wxString msg;
|
||||
msg.Printf("Hotspot = %d, %d", curHotSpot.x, curHotSpot.y);
|
||||
wxLogDebug(msg);
|
||||
|
||||
// First add the cursor to the image list
|
||||
HCURSOR hCursor = (HCURSOR) m_cursor.GetHCURSOR();
|
||||
int cursorIndex = ImageList_AddIcon((HIMAGELIST) m_hCursorImageList, (HICON) hCursor);
|
||||
@ -290,18 +304,18 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullS
|
||||
|
||||
if (cursorIndex != -1)
|
||||
{
|
||||
ImageList_SetDragCursorImage((HIMAGELIST) m_hCursorImageList, cursorIndex, m_cursorHotspot.x, m_cursorHotspot.y);
|
||||
ImageList_SetDragCursorImage((HIMAGELIST) m_hCursorImageList, cursorIndex, curHotSpot.x, curHotSpot.y);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
m_window = window;
|
||||
|
||||
#if !wxUSE_SIMPLER_DRAGIMAGE
|
||||
if (m_cursor.Ok())
|
||||
::ShowCursor(FALSE);
|
||||
#endif
|
||||
|
||||
m_window = window;
|
||||
|
||||
::SetCapture(GetHwndOf(window));
|
||||
|
||||
return TRUE;
|
||||
@ -376,6 +390,10 @@ bool wxDragImage::Move(const wxPoint& pt)
|
||||
// Subtract the (negative) values, i.e. add a small increment
|
||||
pt2.x -= rect.left; pt2.y -= rect.top;
|
||||
}
|
||||
else if (m_window && m_fullScreen)
|
||||
{
|
||||
pt2 = m_window->ClientToScreen(pt2);
|
||||
}
|
||||
|
||||
bool ret = (ImageList_DragMove( pt2.x, pt2.y ) != 0);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user