X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cfb76a19a4aeb25f245196ff5d4cae8a33fa6802..66c2bf7b1d9326fb650acfaae22ec50528cfbf7c:/include/wx/caret.h?ds=sidebyside diff --git a/include/wx/caret.h b/include/wx/caret.h index 9e0f3d3ea8..e6e9728ff8 100644 --- a/include/wx/caret.h +++ b/include/wx/caret.h @@ -1,27 +1,26 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: caret.h +// Name: wx/caret.h // Purpose: wxCaretBase class - the interface of wxCaret // Author: Vadim Zeitlin // Modified by: // Created: 23.05.99 -// RCS-ID: $Id$ -// Copyright: (c) wxWindows team +// Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifndef _WX_CARET_H_BASE_ #define _WX_CARET_H_BASE_ -#ifdef __GNUG__ -#pragma interface "caret.h" -#endif +#include "wx/defs.h" + +#if wxUSE_CARET // --------------------------------------------------------------------------- // forward declarations // --------------------------------------------------------------------------- -class WXDLLEXPORT wxWindow; -class WXDLLEXPORT wxWindowBase; +class WXDLLIMPEXP_FWD_CORE wxWindow; +class WXDLLIMPEXP_FWD_CORE wxWindowBase; // ---------------------------------------------------------------------------- // headers we have to include @@ -34,7 +33,7 @@ class WXDLLEXPORT wxWindowBase; // appear. It can be either a solid block or a custom bitmap (TODO) // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxCaretBase +class WXDLLIMPEXP_CORE wxCaretBase { public: // ctors @@ -57,6 +56,9 @@ public: (void)Create(window, size); } + // a virtual dtor has been provided since this class has virtual members + virtual ~wxCaretBase() { } + // Create() functions - same as ctor but returns the success code // -------------------------------------------------------------- @@ -114,7 +116,7 @@ public: // show/hide the caret (should be called by wxWindow when needed): // Show() must be called as many times as Hide() + 1 to make the caret // visible - virtual void Show(bool show = TRUE) + virtual void Show(bool show = true) { if ( show ) { @@ -127,7 +129,7 @@ public: DoHide(); } } - virtual void Hide() { Show(FALSE); } + virtual void Hide() { Show(false); } // blink time is measured in milliseconds and is the time elapsed // between 2 inversions of the caret (blink time of the caret is common @@ -144,7 +146,7 @@ public: virtual void OnKillFocus() { } protected: - // these functions may be overriden in the derived classes, but they + // these functions may be overridden in the derived classes, but they // should call the base class version first virtual bool DoCreate(wxWindowBase *window, int width, int height) { @@ -152,7 +154,7 @@ protected: m_width = width; m_height = height; - return TRUE; + return true; } // pure virtuals to implement in the derived class @@ -164,7 +166,7 @@ protected: // the common initialization void Init() { - m_window = (wxWindowBase *)NULL; + m_window = NULL; m_x = m_y = 0; m_width = m_height = 0; m_countVisible = 0; @@ -183,7 +185,7 @@ protected: int m_countVisible; private: - DECLARE_NO_COPY_CLASS(wxCaretBase); + wxDECLARE_NO_COPY_CLASS(wxCaretBase); }; // --------------------------------------------------------------------------- @@ -196,5 +198,54 @@ private: #include "wx/generic/caret.h" #endif // platform -#endif // _WX_CARET_H_BASE_ +// ---------------------------------------------------------------------------- +// wxCaretSuspend: a simple class which hides the caret in its ctor and +// restores it in the dtor, this should be used when drawing on the screen to +// avoid overdrawing the caret +// ---------------------------------------------------------------------------- + +#ifdef wxHAS_CARET_USING_OVERLAYS +// we don't need to hide the caret if it's rendered using overlays +class WXDLLIMPEXP_CORE wxCaretSuspend +{ +public: + wxCaretSuspend(wxWindow *WXUNUSED(win)) {} + + wxDECLARE_NO_COPY_CLASS(wxCaretSuspend); +}; + +#else // !wxHAS_CARET_USING_OVERLAYS + +class WXDLLIMPEXP_CORE wxCaretSuspend +{ +public: + wxCaretSuspend(wxWindow *win) + { + m_caret = win->GetCaret(); + m_show = false; + if ( m_caret && m_caret->IsVisible() ) + { + m_caret->Hide(); + m_show = true; + } + } + + ~wxCaretSuspend() + { + if ( m_caret && m_show ) + m_caret->Show(); + } + +private: + wxCaret *m_caret; + bool m_show; + + wxDECLARE_NO_COPY_CLASS(wxCaretSuspend); +}; + +#endif // wxHAS_CARET_USING_OVERLAYS/!wxHAS_CARET_USING_OVERLAYS + +#endif // wxUSE_CARET + +#endif // _WX_CARET_H_BASE_