#include "wx/settings.h"
#include "wx/intl.h"
#include "wx/log.h"
+ #include "wx/image.h"
#endif
#define wxUSE_IMAGE_IN_DRAGIMAGE 1
-#if wxUSE_IMAGE_IN_DRAGIMAGE
-#include "wx/image.h"
-#endif
-
#include "wx/generic/dragimgg.h"
// ----------------------------------------------------------------------------
{
m_isDirty = false;
m_isShown = false;
- m_windowDC = (wxDC*) NULL;
- m_window = (wxWindow*) NULL;
+ m_windowDC = NULL;
+ m_window = NULL;
m_fullScreen = false;
- m_pBackingBitmap = (wxBitmap*) NULL;
+#ifdef wxHAS_NATIVE_OVERLAY
+ m_dcOverlay = NULL;
+#else
+ m_pBackingBitmap = NULL;
+#endif
}
#if WXWIN_COMPATIBILITY_2_6
{
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);
dc2.SetFont(font);
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);
bool fullScreen,
wxRect* rect)
{
- wxASSERT_MSG( (window != 0), wxT("Window must not be null in BeginDrag."));
+ wxCHECK_MSG( window, false, wxT("Window must not be null in BeginDrag."));
// The image should be offset by this amount
m_offset = hotspot;
m_isDirty = false;
m_isDirty = false;
- if (window)
+ if (m_cursor.Ok())
{
- window->CaptureMouse();
-
- if (m_cursor.Ok())
- {
- m_oldCursor = window->GetCursor();
- window->SetCursor(m_cursor);
- }
+ m_oldCursor = window->GetCursor();
+ window->SetCursor(m_cursor);
}
+ window->CaptureMouse();
+
// Make a copy of the window so we can repair damage done as the image is
// dragged.
}
}
+#ifndef wxHAS_NATIVE_OVERLAY
wxBitmap* backing = (m_pBackingBitmap ? m_pBackingBitmap : (wxBitmap*) & m_backingBitmap);
if (!backing->Ok() || (backing->GetWidth() < clientSize.x || backing->GetHeight() < clientSize.y))
(*backing) = wxBitmap(clientSize.x, clientSize.y);
+#endif // !wxHAS_NATIVE_OVERLAY
if (!m_fullScreen)
{
if (m_windowDC)
{
+#ifdef wxHAS_NATIVE_OVERLAY
+ m_overlay.Reset();
+#else
m_windowDC->DestroyClippingRegion();
- delete m_windowDC;
- m_windowDC = (wxDC*) NULL;
+#endif
+ wxDELETE(m_windowDC);
}
+#ifndef wxHAS_NATIVE_OVERLAY
m_repairBitmap = wxNullBitmap;
+#endif
return true;
}
// is non-NULL, or in screen coordinates if NULL.
bool wxGenericDragImage::Move(const wxPoint& pt)
{
- wxASSERT_MSG( (m_windowDC != (wxDC*) NULL), wxT("No window DC in wxGenericDragImage::Move()") );
+ wxASSERT_MSG( (m_windowDC != NULL), wxT("No window DC in wxGenericDragImage::Move()") );
wxPoint pt2(pt);
if (m_fullScreen)
bool wxGenericDragImage::Show()
{
- wxASSERT_MSG( (m_windowDC != (wxDC*) NULL), wxT("No window DC in wxGenericDragImage::Show()") );
+ wxASSERT_MSG( (m_windowDC != NULL), wxT("No window DC in wxGenericDragImage::Show()") );
// Show at the current position
// This is where we restore the backing bitmap, in case
// something has changed on the window.
+#ifndef wxHAS_NATIVE_OVERLAY
wxBitmap* backing = (m_pBackingBitmap ? m_pBackingBitmap : (wxBitmap*) & m_backingBitmap);
wxMemoryDC memDC;
memDC.SelectObject(* backing);
//memDC.Blit(0, 0, m_boundingRect.width, m_boundingRect.height, m_windowDC, m_boundingRect.x, m_boundingRect.y);
memDC.SelectObject(wxNullBitmap);
+#endif // !wxHAS_NATIVE_OVERLAY
RedrawImage(m_position - m_offset, m_position - m_offset, false, true);
}
bool wxGenericDragImage::Hide()
{
- wxASSERT_MSG( (m_windowDC != (wxDC*) NULL), wxT("No window DC in wxGenericDragImage::Hide()") );
+ wxASSERT_MSG( (m_windowDC != NULL), wxT("No window DC in wxGenericDragImage::Hide()") );
// Repair the old position
}
// More efficient: erase and redraw simultaneously if possible
-bool wxGenericDragImage::RedrawImage(const wxPoint& oldPos, const wxPoint& newPos,
+bool wxGenericDragImage::RedrawImage(const wxPoint& oldPos,
+ const wxPoint& newPos,
bool eraseOld, bool drawNew)
{
if (!m_windowDC)
return false;
+#ifdef wxHAS_NATIVE_OVERLAY
+ wxUnusedVar(oldPos);
+
+ wxDCOverlay dcoverlay( m_overlay, (wxWindowDC*) m_windowDC ) ;
+ if ( eraseOld )
+ dcoverlay.Clear() ;
+ if (drawNew)
+ DoDrawImage(*m_windowDC, newPos);
+#else // !wxHAS_NATIVE_OVERLAY
wxBitmap* backing = (m_pBackingBitmap ? m_pBackingBitmap : (wxBitmap*) & m_backingBitmap);
if (!backing->Ok())
return false;
memDCTemp.SelectObject(wxNullBitmap);
memDC.SelectObject(wxNullBitmap);
+#endif // wxHAS_NATIVE_OVERLAY/!wxHAS_NATIVE_OVERLAY
return true;
}