]>
git.saurik.com Git - wxWidgets.git/blob - samples/dragimag/dragimag.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxDragImage sample
4 // Author: Julian Smart
7 // Copyright: (c) Julian Smart
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_DRAGIMAGSAMPLE_
12 #define _WX_DRAGIMAGSAMPLE_
23 class MyFrame
: public wxFrame
28 void OnAbout( wxCommandEvent
&event
);
29 void OnQuit( wxCommandEvent
&event
);
31 MyCanvas
* GetCanvas() const { return m_canvas
; }
32 void SetCanvas(MyCanvas
* canvas
) { m_canvas
= canvas
; }
37 DECLARE_DYNAMIC_CLASS(MyFrame
)
43 class MyApp
: public wxApp
47 virtual bool OnInit();
53 bool TileBitmap(const wxRect
& rect
, wxDC
& dc
, wxBitmap
& bitmap
);
56 wxBitmap
& GetBackgroundBitmap() const { return (wxBitmap
&) m_background
; }
58 bool GetUseScreen() const { return m_useScreen
; }
59 void SetUseScreen(bool useScreen
) { m_useScreen
= useScreen
; }
61 void OnUseScreen(wxCommandEvent
& event
);
64 wxBitmap m_background
;
72 #define TEST_USE_SCREEN 100
77 #define TEST_DRAG_NONE 0
78 #define TEST_DRAG_START 1
79 #define TEST_DRAG_DRAGGING 2
81 class MyCanvas
: public wxScrolledWindow
84 MyCanvas( wxWindow
*parent
, wxWindowID
, const wxPoint
&pos
, const wxSize
&size
);
87 void OnPaint( wxPaintEvent
&event
);
88 void OnEraseBackground(wxEraseEvent
& event
);
89 void OnMouseEvent(wxMouseEvent
& event
);
91 void DrawShapes(wxDC
& dc
);
92 void EraseShape(DragShape
* shape
, wxDC
& dc
);
94 DragShape
* FindShape(const wxPoint
& pt
) const;
96 wxList
& GetDisplayList() { return m_displayList
; }
101 wxList m_displayList
; // A list of DragShapes
103 DragShape
* m_draggedShape
;
104 DragShape
* m_currentlyHighlighted
; // The shape that's being highlighted
105 wxPoint m_dragStartPos
;
106 wxDragImage
* m_dragImage
;
108 DECLARE_CLASS(MyCanvas
)
109 DECLARE_EVENT_TABLE()
113 // Ways to drag a shape
115 #define SHAPE_DRAG_BITMAP 1
116 #define SHAPE_DRAG_TEXT 2
117 #define SHAPE_DRAG_ICON 3
121 class DragShape
: public wxObject
124 DragShape(const wxBitmap
& bitmap
);
129 bool HitTest(const wxPoint
& pt
) const;
130 bool Draw(wxDC
& dc
, bool highlight
= false);
134 wxPoint
GetPosition() const { return m_pos
; }
135 void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
137 wxRect
GetRect() const { return wxRect(m_pos
.x
, m_pos
.y
, m_bitmap
.GetWidth(), m_bitmap
.GetHeight()); }
139 wxBitmap
& GetBitmap() const { return (wxBitmap
&) m_bitmap
; }
140 void SetBitmap(const wxBitmap
& bitmap
) { m_bitmap
= bitmap
; }
142 int GetDragMethod() const { return m_dragMethod
; }
143 void SetDragMethod(int method
) { m_dragMethod
= method
; }
145 bool IsShown() const { return m_show
; }
146 void SetShow(bool show
) { m_show
= show
; }
156 // A derived class is required since we're overriding UpdateBackingFromWindow,
157 // for compatibility with Mac OS X (Core Graphics) which does not support blitting
160 class MyDragImage
: public wxDragImage
163 MyDragImage(MyCanvas
* canvas
): m_canvas(canvas
) {}
165 MyDragImage(MyCanvas
* canvas
, const wxBitmap
& image
, const wxCursor
& cursor
= wxNullCursor
):
166 wxDragImage(image
, cursor
), m_canvas(canvas
)
170 MyDragImage(MyCanvas
* canvas
, const wxIcon
& image
, const wxCursor
& cursor
= wxNullCursor
):
171 wxDragImage(image
, cursor
), m_canvas(canvas
)
175 MyDragImage(MyCanvas
* canvas
, const wxString
& str
, const wxCursor
& cursor
= wxNullCursor
):
176 wxDragImage(str
, cursor
), m_canvas(canvas
)
180 // On some platforms, notably Mac OS X with Core Graphics, we can't blit from
181 // a window, so we need to draw the background explicitly.
182 virtual bool UpdateBackingFromWindow(wxDC
& windowDC
, wxMemoryDC
& destDC
, const wxRect
& sourceRect
,
183 const wxRect
& destRect
) const;
190 // _WX_DRAGIMAGSAMPLE_