overlay implementation
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41875 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -963,5 +963,66 @@ private:
|
|||||||
DECLARE_NO_COPY_CLASS(wxDCClipper)
|
DECLARE_NO_COPY_CLASS(wxDCClipper)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// creates an overlay over an existing window, allowing for manipulations like
|
||||||
|
// rubberbanding etc. this API is not stable yet, not to be used outside wx
|
||||||
|
// internal code
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class wxOverlayImpl ;
|
||||||
|
class wxWindowDC ;
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxOverlay
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
wxOverlay();
|
||||||
|
~wxOverlay();
|
||||||
|
|
||||||
|
// clears the overlay without restoring the former state
|
||||||
|
// to be done eg when the window content has been changed and repainted
|
||||||
|
void Reset();
|
||||||
|
|
||||||
|
private :
|
||||||
|
friend class WXDLLEXPORT wxDCOverlay;
|
||||||
|
|
||||||
|
// returns true if it has been setup
|
||||||
|
bool IsOk();
|
||||||
|
|
||||||
|
void Init( wxWindowDC* dc, int x , int y , int width , int height );
|
||||||
|
|
||||||
|
void BeginDrawing( wxWindowDC* dc);
|
||||||
|
|
||||||
|
void EndDrawing( wxWindowDC* dc);
|
||||||
|
|
||||||
|
void Clear( wxWindowDC* dc);
|
||||||
|
|
||||||
|
wxOverlayImpl* m_impl;
|
||||||
|
|
||||||
|
bool m_inDrawing;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxDCOverlay
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
// connects this overlay to the corresponding drawing dc, if the overlay is not initialized yet
|
||||||
|
// this call will do so
|
||||||
|
wxDCOverlay(wxOverlay &overlay, wxWindowDC *dc, int x , int y , int width , int height);
|
||||||
|
|
||||||
|
// convenience wrapper that behaves the same using the entire area of the dc
|
||||||
|
wxDCOverlay(wxOverlay &overlay, wxWindowDC *dc);
|
||||||
|
|
||||||
|
// removes the connection between the overlay and the dc
|
||||||
|
virtual ~wxDCOverlay();
|
||||||
|
|
||||||
|
// clears the layer, restoring the state at the last init
|
||||||
|
void Clear();
|
||||||
|
private :
|
||||||
|
void Init(wxWindowDC *dc, int x , int y , int width , int height);
|
||||||
|
|
||||||
|
wxOverlay& m_overlay;
|
||||||
|
|
||||||
|
wxWindowDC* m_dc;
|
||||||
|
} ;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// _WX_DC_H_BASE_
|
// _WX_DC_H_BASE_
|
||||||
|
@@ -26,6 +26,18 @@ private:
|
|||||||
wxCaret *m_caret;
|
wxCaret *m_caret;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef wxUSE_OVERLAY
|
||||||
|
#if defined(wxMAC_USE_CORE_GRAPHICS) && wxMAC_USE_CORE_GRAPHICS
|
||||||
|
#define wxUSE_OVERLAY 1
|
||||||
|
#else
|
||||||
|
#define wxUSE_OVERLAY 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if wxUSE_OVERLAY
|
||||||
|
#include "wx/dc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
class WXDLLIMPEXP_CORE wxCaret : public wxCaretBase
|
class WXDLLIMPEXP_CORE wxCaret : public wxCaretBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -70,11 +82,16 @@ private:
|
|||||||
// GTK specific initialization
|
// GTK specific initialization
|
||||||
void InitGeneric();
|
void InitGeneric();
|
||||||
|
|
||||||
|
#if wxUSE_OVERLAY
|
||||||
|
// the overlay for displaying the caret
|
||||||
|
wxOverlay m_overlay;
|
||||||
|
#else
|
||||||
// the bitmap holding the part of window hidden by the caret when it was
|
// the bitmap holding the part of window hidden by the caret when it was
|
||||||
// at (m_xOld, m_yOld)
|
// at (m_xOld, m_yOld)
|
||||||
wxBitmap m_bmpUnderCaret;
|
wxBitmap m_bmpUnderCaret;
|
||||||
int m_xOld,
|
int m_xOld,
|
||||||
m_yOld;
|
m_yOld;
|
||||||
|
#endif
|
||||||
|
|
||||||
wxCaretTimer m_timer;
|
wxCaretTimer m_timer;
|
||||||
bool m_blinkedOut, // true => caret hidden right now
|
bool m_blinkedOut, // true => caret hidden right now
|
||||||
|
Reference in New Issue
Block a user