1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: generic/caret.h 3 // Purpose: generic wxCaret class 4 // Author: Vadim Zeitlin (original code by Robert Roebling) 5 // Modified by: 6 // Created: 25.05.99 7 // RCS-ID: $Id: caret.h 42397 2006-10-25 12:12:56Z VS $ 8 // Copyright: (c) wxWidgets team 9 // Licence: wxWindows licence 10 /////////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_CARET_H_ 13 #define _WX_CARET_H_ 14 15 #include "wx/timer.h" 16 #include "wx/dc.h" 17 #include "wx/overlay.h" 18 19 #ifdef wxHAS_NATIVE_OVERLAY 20 #define wxHAS_CARET_USING_OVERLAYS 21 #endif 22 23 class WXDLLIMPEXP_CORE wxCaret; 24 25 class WXDLLEXPORT wxCaretTimer : public wxTimer 26 { 27 public: 28 wxCaretTimer(wxCaret *caret); 29 virtual void Notify(); 30 31 private: 32 wxCaret *m_caret; 33 }; 34 35 class WXDLLIMPEXP_CORE wxCaret : public wxCaretBase 36 { 37 public: 38 // ctors 39 // ----- 40 // default - use Create() wxCaret()41 wxCaret() : m_timer(this) { InitGeneric(); } 42 // creates a block caret associated with the given window wxCaret(wxWindowBase * window,int width,int height)43 wxCaret(wxWindowBase *window, int width, int height) 44 : wxCaretBase(window, width, height), m_timer(this) { InitGeneric(); } wxCaret(wxWindowBase * window,const wxSize & size)45 wxCaret(wxWindowBase *window, const wxSize& size) 46 : wxCaretBase(window, size), m_timer(this) { InitGeneric(); } 47 48 virtual ~wxCaret(); 49 50 // implementation 51 // -------------- 52 53 // called by wxWindow (not using the event tables) 54 virtual void OnSetFocus(); 55 virtual void OnKillFocus(); 56 57 // called by wxCaretTimer 58 void OnTimer(); 59 60 protected: 61 virtual void DoShow(); 62 virtual void DoHide(); 63 virtual void DoMove(); 64 virtual void DoSize(); 65 66 // blink the caret once 67 void Blink(); 68 69 // refresh the caret 70 void Refresh(); 71 72 // draw the caret on the given DC 73 void DoDraw(wxDC *dc); 74 75 private: 76 // GTK specific initialization 77 void InitGeneric(); 78 79 #ifdef wxHAS_CARET_USING_OVERLAYS 80 // the overlay for displaying the caret 81 wxOverlay m_overlay; 82 #else 83 // the bitmap holding the part of window hidden by the caret when it was 84 // at (m_xOld, m_yOld) 85 wxBitmap m_bmpUnderCaret; 86 int m_xOld, 87 m_yOld; 88 #endif 89 90 wxCaretTimer m_timer; 91 bool m_blinkedOut, // true => caret hidden right now 92 m_hasFocus; // true => our window has focus 93 }; 94 95 #endif // _WX_CARET_H_ 96