self.shapes = []
self.dragImage = None
self.dragShape = None
+ self.hiliteShape = None
self.SetCursor(wxStockCursor(wxCURSOR_ARROW))
self.bg_bmp = images.getBackgroundBitmap()
# Make a shape from an image and mask. This one will demo
# dragging outside the window
bmp = images.getTestStarBitmap()
- #mask = wxMaskColour(bmp, wxWHITE)
- #bmp.SetMask(mask)
shape = DragShape(bmp)
shape.pos = wxPoint(5, 5)
shape.fullscreen = true
self.dragImage.EndDrag()
self.dragImage = None
- # reposition and draw the shape
- pt = evt.GetPosition()
- newPos = wxPoint(self.dragShape.pos.x + (pt.x - self.dragStartPos.x),
- self.dragShape.pos.y + (pt.y - self.dragStartPos.y))
-
dc = wxClientDC(self)
- self.dragShape.pos = newPos
+ if self.hiliteShape:
+ self.hiliteShape.Draw(dc)
+ self.hiliteShape = None
+
+ # reposition and draw the shape
+ self.dragShape.pos = self.dragShape.pos + evt.GetPosition() - self.dragStartPos
self.dragShape.shown = true
self.dragShape.Draw(dc)
self.dragShape = None
if self.dragShape and not self.dragImage:
# only start the drag after having moved a couple pixels
- tolerance = 4
+ tolerance = 2
pt = evt.GetPosition()
dx = abs(pt.x - self.dragStartPos.x)
dy = abs(pt.y - self.dragStartPos.y)
if dx <= tolerance and dy <= tolerance:
return
+ # erase the shape since it will be drawn independently now
+ dc = wxClientDC(self)
+ self.dragShape.shown = false
+ self.EraseShape(self.dragShape, dc)
+
+
if self.dragShape.text:
self.dragImage = wxDragString(self.dragShape.text,
wxStockCursor(wxCURSOR_HAND))
self.dragImage = wxDragImage(self.dragShape.bmp,
wxStockCursor(wxCURSOR_HAND))
- newPos = wxPoint(self.dragShape.pos.x + (pt.x - self.dragStartPos.x),
- self.dragShape.pos.y + (pt.y - self.dragStartPos.y))
+ hotspot = self.dragStartPos - self.dragShape.pos
+ self.dragImage.BeginDrag(hotspot, self, self.dragShape.fullscreen)
- if self.dragShape.fullscreen:
- newPos = self.ClientToScreen(newPos)
- self.dragImage.BeginDrag((0,0), self, true)
- else:
- self.dragImage.BeginDrag((0,0), self)
-
-
- # erase the shape since it will be drawn independently now
- dc = wxClientDC(self)
- self.dragShape.shown = false
- self.EraseShape(self.dragShape, dc)
-
- self.dragImage.Move(newPos)
+ self.dragImage.Move(pt)
self.dragImage.Show()
- # if we have shape and image then move it.
+ # if we have shape and image then move it, posibly highlighting another shape.
elif self.dragShape and self.dragImage:
- pt = evt.GetPosition()
- newPos = wxPoint(self.dragShape.pos.x + (pt.x - self.dragStartPos.x),
- self.dragShape.pos.y + (pt.y - self.dragStartPos.y))
- if self.dragShape.fullscreen:
- newPos = self.ClientToScreen(newPos)
-
- self.dragImage.Move(newPos)
+ onShape = self.FindShape(evt.GetPosition())
+ unhiliteOld = false
+ hiliteNew = false
+
+ # figure out what to hilite and what to unhilite
+ if self.hiliteShape:
+ if onShape is None or self.hiliteShape is not onShape:
+ unhiliteOld = true
+
+ if onShape and onShape is not self.hiliteShape and onShape.shown:
+ hiliteNew = TRUE
+
+ # if needed, hide the drag image so we can update the window
+ if unhiliteOld or hiliteNew:
+ self.dragImage.Hide()
+
+ if unhiliteOld:
+ dc = wxClientDC(self)
+ self.hiliteShape.Draw(dc)
+ self.hiliteShape = None
+
+ if hiliteNew:
+ dc = wxClientDC(self)
+ self.hiliteShape = onShape
+ self.hiliteShape.Draw(dc, wxINVERT)
+
+ # now move it and show it again if needed
+ self.dragImage.Move(evt.GetPosition())
+ if unhiliteOld or hiliteNew:
+ self.dragImage.Show()
#----------------------------------------------------------------------
%{
#include <wx/generic/dragimgg.h>
-static wxPoint wxPyNullPoint;
%}
%name (wxDragImage) class wxGenericDragImage : public wxObject
public:
wxGenericDragImage(const wxBitmap& image,
- const wxCursor& cursor = wxNullCursor,
- const wxPoint& hotspot = wxPyNullPoint);
+ const wxCursor& cursor = wxNullCursor);
~wxGenericDragImage();
+ void SetBackingBitmap(wxBitmap* bitmap);
bool BeginDrag(const wxPoint& hotspot, wxWindow* window,
bool fullScreen = FALSE, wxRect* rect = NULL);
// Alternate Constructors
%new wxGenericDragImage* wxDragIcon(const wxIcon& image,
- const wxCursor& cursor = wxNullCursor,
- const wxPoint& hotspot = wxPyNullPoint);
+ const wxCursor& cursor = wxNullCursor);
%new wxGenericDragImage* wxDragString(const wxString& str,
- const wxCursor& cursor = wxNullCursor,
- const wxPoint& hotspot = wxPyNullPoint);
+ const wxCursor& cursor = wxNullCursor);
%new wxGenericDragImage* wxDragTreeItem(const wxTreeCtrl& treeCtrl, wxTreeItemId& id);
%{
wxGenericDragImage* wxDragIcon(const wxIcon& image,
- const wxCursor& cursor,
- const wxPoint& hotspot) {
- return new wxGenericDragImage(image, cursor, hotspot);
+ const wxCursor& cursor) {
+ return new wxGenericDragImage(image, cursor);
}
wxGenericDragImage* wxDragString(const wxString& str,
- const wxCursor& cursor,
- const wxPoint& hotspot) {
- return new wxGenericDragImage(str, cursor, hotspot);
+ const wxCursor& cursor) {
+ return new wxGenericDragImage(str, cursor);
}
wxGenericDragImage* wxDragTreeItem(const wxTreeCtrl& treeCtrl, wxTreeItemId& id) {
#include <wx/generic/dragimgg.h>
-static wxPoint wxPyNullPoint;
wxGenericDragImage* wxDragIcon(const wxIcon& image,
- const wxCursor& cursor,
- const wxPoint& hotspot) {
- return new wxGenericDragImage(image, cursor, hotspot);
+ const wxCursor& cursor) {
+ return new wxGenericDragImage(image, cursor);
}
wxGenericDragImage* wxDragString(const wxString& str,
- const wxCursor& cursor,
- const wxPoint& hotspot) {
- return new wxGenericDragImage(str, cursor, hotspot);
+ const wxCursor& cursor) {
+ return new wxGenericDragImage(str, cursor);
}
wxGenericDragImage* wxDragTreeItem(const wxTreeCtrl& treeCtrl, wxTreeItemId& id) {
wxGenericDragImage * _result;
wxIcon * _arg0;
wxCursor * _arg1 = (wxCursor *) &wxNullCursor;
- wxPoint * _arg2 = (wxPoint *) &wxPyNullPoint;
PyObject * _argo0 = 0;
PyObject * _argo1 = 0;
- wxPoint temp;
- PyObject * _obj2 = 0;
- char *_kwnames[] = { "image","cursor","hotspot", NULL };
+ char *_kwnames[] = { "image","cursor", NULL };
char _ptemp[128];
self = self;
- if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|OO:wxDragIcon",_kwnames,&_argo0,&_argo1,&_obj2))
+ if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|O:wxDragIcon",_kwnames,&_argo0,&_argo1))
return NULL;
if (_argo0) {
if (_argo0 == Py_None) { _arg0 = NULL; }
return NULL;
}
}
- if (_obj2)
-{
- _arg2 = &temp;
- if (! wxPoint_helper(_obj2, &_arg2))
- return NULL;
-}
{
wxPy_BEGIN_ALLOW_THREADS;
- _result = (wxGenericDragImage *)wxDragIcon(*_arg0,*_arg1,*_arg2);
+ _result = (wxGenericDragImage *)wxDragIcon(*_arg0,*_arg1);
wxPy_END_ALLOW_THREADS;
} if (_result) {
wxGenericDragImage * _result;
wxString * _arg0;
wxCursor * _arg1 = (wxCursor *) &wxNullCursor;
- wxPoint * _arg2 = (wxPoint *) &wxPyNullPoint;
PyObject * _obj0 = 0;
PyObject * _argo1 = 0;
- wxPoint temp;
- PyObject * _obj2 = 0;
- char *_kwnames[] = { "str","cursor","hotspot", NULL };
+ char *_kwnames[] = { "str","cursor", NULL };
char _ptemp[128];
self = self;
- if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|OO:wxDragString",_kwnames,&_obj0,&_argo1,&_obj2))
+ if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|O:wxDragString",_kwnames,&_obj0,&_argo1))
return NULL;
{
#if PYTHON_API_VERSION >= 1009
return NULL;
}
}
- if (_obj2)
-{
- _arg2 = &temp;
- if (! wxPoint_helper(_obj2, &_arg2))
- return NULL;
-}
{
wxPy_BEGIN_ALLOW_THREADS;
- _result = (wxGenericDragImage *)wxDragString(*_arg0,*_arg1,*_arg2);
+ _result = (wxGenericDragImage *)wxDragString(*_arg0,*_arg1);
wxPy_END_ALLOW_THREADS;
} if (_result) {
return (void *) dest;
}
-#define new_wxDragImage(_swigarg0,_swigarg1,_swigarg2) (new wxGenericDragImage(_swigarg0,_swigarg1,_swigarg2))
+#define new_wxDragImage(_swigarg0,_swigarg1) (new wxGenericDragImage(_swigarg0,_swigarg1))
static PyObject *_wrap_new_wxDragImage(PyObject *self, PyObject *args, PyObject *kwargs) {
PyObject * _resultobj;
wxGenericDragImage * _result;
wxBitmap * _arg0;
wxCursor * _arg1 = (wxCursor *) &wxNullCursor;
- wxPoint * _arg2 = (wxPoint *) &wxPyNullPoint;
PyObject * _argo0 = 0;
PyObject * _argo1 = 0;
- wxPoint temp;
- PyObject * _obj2 = 0;
- char *_kwnames[] = { "image","cursor","hotspot", NULL };
+ char *_kwnames[] = { "image","cursor", NULL };
char _ptemp[128];
self = self;
- if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|OO:new_wxDragImage",_kwnames,&_argo0,&_argo1,&_obj2))
+ if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|O:new_wxDragImage",_kwnames,&_argo0,&_argo1))
return NULL;
if (_argo0) {
if (_argo0 == Py_None) { _arg0 = NULL; }
return NULL;
}
}
- if (_obj2)
-{
- _arg2 = &temp;
- if (! wxPoint_helper(_obj2, &_arg2))
- return NULL;
-}
{
wxPy_BEGIN_ALLOW_THREADS;
- _result = (wxGenericDragImage *)new_wxDragImage(*_arg0,*_arg1,*_arg2);
+ _result = (wxGenericDragImage *)new_wxDragImage(*_arg0,*_arg1);
wxPy_END_ALLOW_THREADS;
} if (_result) {
return _resultobj;
}
+#define wxDragImage_SetBackingBitmap(_swigobj,_swigarg0) (_swigobj->SetBackingBitmap(_swigarg0))
+static PyObject *_wrap_wxDragImage_SetBackingBitmap(PyObject *self, PyObject *args, PyObject *kwargs) {
+ PyObject * _resultobj;
+ wxGenericDragImage * _arg0;
+ wxBitmap * _arg1;
+ PyObject * _argo0 = 0;
+ PyObject * _argo1 = 0;
+ char *_kwnames[] = { "self","bitmap", NULL };
+
+ self = self;
+ if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxDragImage_SetBackingBitmap",_kwnames,&_argo0,&_argo1))
+ return NULL;
+ if (_argo0) {
+ if (_argo0 == Py_None) { _arg0 = NULL; }
+ else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxGenericDragImage_p")) {
+ PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxDragImage_SetBackingBitmap. Expected _wxGenericDragImage_p.");
+ return NULL;
+ }
+ }
+ if (_argo1) {
+ if (_argo1 == Py_None) { _arg1 = NULL; }
+ else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxBitmap_p")) {
+ PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxDragImage_SetBackingBitmap. Expected _wxBitmap_p.");
+ return NULL;
+ }
+ }
+{
+ wxPy_BEGIN_ALLOW_THREADS;
+ wxDragImage_SetBackingBitmap(_arg0,_arg1);
+
+ wxPy_END_ALLOW_THREADS;
+} Py_INCREF(Py_None);
+ _resultobj = Py_None;
+ return _resultobj;
+}
+
#define wxDragImage_BeginDrag(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3) (_swigobj->BeginDrag(_swigarg0,_swigarg1,_swigarg2,_swigarg3))
static PyObject *_wrap_wxDragImage_BeginDrag(PyObject *self, PyObject *args, PyObject *kwargs) {
PyObject * _resultobj;
{ "wxDragImage_EndDrag", (PyCFunction) _wrap_wxDragImage_EndDrag, METH_VARARGS | METH_KEYWORDS },
{ "wxDragImage_BeginDrag2", (PyCFunction) _wrap_wxDragImage_BeginDrag2, METH_VARARGS | METH_KEYWORDS },
{ "wxDragImage_BeginDrag", (PyCFunction) _wrap_wxDragImage_BeginDrag, METH_VARARGS | METH_KEYWORDS },
+ { "wxDragImage_SetBackingBitmap", (PyCFunction) _wrap_wxDragImage_SetBackingBitmap, METH_VARARGS | METH_KEYWORDS },
{ "delete_wxDragImage", (PyCFunction) _wrap_delete_wxDragImage, METH_VARARGS | METH_KEYWORDS },
{ "new_wxDragImage", (PyCFunction) _wrap_new_wxDragImage, METH_VARARGS | METH_KEYWORDS },
{ "new_wxPyTipProvider", (PyCFunction) _wrap_new_wxPyTipProvider, METH_VARARGS | METH_KEYWORDS },