Files
wxWidgets/samples/dragimag/dragimag.h
catalinr 392e119bbe Fix dragimag sample compilation with modern compiler under MSW
Don't "override" UpdateBackingFromWindow() method of the base class
unless it really exists, which is only the case for the generic
wxDragImage implementation but not the native MSW one.

See https://github.com/wxWidgets/wxWidgets/pull/1671
2019-12-07 14:52:41 +01:00

193 lines
4.7 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// 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() wxOVERRIDE;
virtual int OnExit() wxOVERRIDE;
//// 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;
wxDECLARE_EVENT_TABLE();
};
wxDECLARE_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)
{
}
#if wxUSE_GENERIC_DRAGIMAGE
// 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 wxOVERRIDE;
#endif
protected:
MyCanvas* m_canvas;
};
#endif
// _WX_DRAGIMAGSAMPLE_