| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: dragimag.h
- // Purpose: wxDragImage sample
- // Author: Julian Smart
- // Modified by:
- // Created: 28/2/2000
- // Copyright: (c) Julian Smart
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_DRAGIMAGSAMPLE_
- #define _WX_DRAGIMAGSAMPLE_
- // derived classes
- class MyFrame;
- class MyApp;
- class MyCanvas;
- class DragShape;
- // MyFrame
- class MyFrame: public wxFrame
- {
- public:
- MyFrame();
- void OnAbout( wxCommandEvent &event );
- void OnQuit( wxCommandEvent &event );
- MyCanvas* GetCanvas() const { return m_canvas; }
- void SetCanvas(MyCanvas* canvas) { m_canvas = canvas; }
- private:
- MyCanvas* m_canvas;
- wxDECLARE_DYNAMIC_CLASS(MyFrame);
- wxDECLARE_EVENT_TABLE();
- };
- // MyApp
- class MyApp: public wxApp
- {
- public:
- MyApp();
- virtual bool OnInit();
- virtual int OnExit();
- //// Operations
- // Tile the bitmap
- bool TileBitmap(const wxRect& rect, wxDC& dc, wxBitmap& bitmap);
- //// Accessors
- wxBitmap& GetBackgroundBitmap() const { return (wxBitmap&) m_background; }
- bool GetUseScreen() const { return m_useScreen; }
- void SetUseScreen(bool useScreen) { m_useScreen = useScreen; }
- void OnUseScreen(wxCommandEvent& event);
- protected:
- wxBitmap m_background;
- bool m_useScreen;
- DECLARE_EVENT_TABLE()
- };
- DECLARE_APP(MyApp)
- #define TEST_USE_SCREEN 100
- // MyCanvas
- // Dragging modes
- #define TEST_DRAG_NONE 0
- #define TEST_DRAG_START 1
- #define TEST_DRAG_DRAGGING 2
- class MyCanvas: public wxScrolledWindow
- {
- public:
- MyCanvas( wxWindow *parent, wxWindowID, const wxPoint &pos, const wxSize &size );
- ~MyCanvas();
- void OnPaint( wxPaintEvent &event );
- void OnEraseBackground(wxEraseEvent& event);
- void OnMouseEvent(wxMouseEvent& event);
- void DrawShapes(wxDC& dc);
- void EraseShape(DragShape* shape, wxDC& dc);
- void ClearShapes();
- DragShape* FindShape(const wxPoint& pt) const;
- wxList& GetDisplayList() { return m_displayList; }
- protected:
- private:
- wxList m_displayList; // A list of DragShapes
- int m_dragMode;
- DragShape* m_draggedShape;
- DragShape* m_currentlyHighlighted; // The shape that's being highlighted
- wxPoint m_dragStartPos;
- wxDragImage* m_dragImage;
- wxDECLARE_ABSTRACT_CLASS(MyCanvas);
- wxDECLARE_EVENT_TABLE();
- };
- // Ways to drag a shape
- #define SHAPE_DRAG_BITMAP 1
- #define SHAPE_DRAG_TEXT 2
- #define SHAPE_DRAG_ICON 3
- // Shape
- class DragShape: public wxObject
- {
- public:
- DragShape(const wxBitmap& bitmap);
- ~DragShape(){};
- //// Operations
- bool HitTest(const wxPoint& pt) const;
- bool Draw(wxDC& dc, bool highlight = false);
- //// Accessors
- wxPoint GetPosition() const { return m_pos; }
- void SetPosition(const wxPoint& pos) { m_pos = pos; }
- wxRect GetRect() const { return wxRect(m_pos.x, m_pos.y, m_bitmap.GetWidth(), m_bitmap.GetHeight()); }
- wxBitmap& GetBitmap() const { return (wxBitmap&) m_bitmap; }
- void SetBitmap(const wxBitmap& bitmap) { m_bitmap = bitmap; }
- int GetDragMethod() const { return m_dragMethod; }
- void SetDragMethod(int method) { m_dragMethod = method; }
- bool IsShown() const { return m_show; }
- void SetShow(bool show) { m_show = show; }
- protected:
- wxPoint m_pos;
- wxBitmap m_bitmap;
- int m_dragMethod;
- bool m_show;
- };
- // MyDragImage
- // A derived class is required since we're overriding UpdateBackingFromWindow,
- // for compatibility with Mac OS X (Core Graphics) which does not support blitting
- // from a window.
- class MyDragImage: public wxDragImage
- {
- public:
- MyDragImage(MyCanvas* canvas): m_canvas(canvas) {}
- MyDragImage(MyCanvas* canvas, const wxBitmap& image, const wxCursor& cursor = wxNullCursor):
- wxDragImage(image, cursor), m_canvas(canvas)
- {
- }
- MyDragImage(MyCanvas* canvas, const wxIcon& image, const wxCursor& cursor = wxNullCursor):
- wxDragImage(image, cursor), m_canvas(canvas)
- {
- }
- MyDragImage(MyCanvas* canvas, const wxString& str, const wxCursor& cursor = wxNullCursor):
- wxDragImage(str, cursor), m_canvas(canvas)
- {
- }
- // On some platforms, notably Mac OS X with Core Graphics, we can't blit from
- // a window, so we need to draw the background explicitly.
- virtual bool UpdateBackingFromWindow(wxDC& windowDC, wxMemoryDC& destDC, const wxRect& sourceRect,
- const wxRect& destRect) const;
- protected:
- MyCanvas* m_canvas;
- };
- #endif
- // _WX_DRAGIMAGSAMPLE_
|