X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/11e2dfd37dcac4e8c155807de8e1ba222c3e83fb..790ba06b28f232abc42c4ed784df4b86bfbfe5e6:/samples/dragimag/dragimag.cpp diff --git a/samples/dragimag/dragimag.cpp b/samples/dragimag/dragimag.cpp index 2ef5db853c..e803877a1e 100644 --- a/samples/dragimag/dragimag.cpp +++ b/samples/dragimag/dragimag.cpp @@ -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,58 +179,51 @@ 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__ - wxIcon icon(dragicon_xpm); + wxIcon icon(dragicon_xpm); #else - wxIcon icon(wxICON(dragicon)); + 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();