]> git.saurik.com Git - wxWidgets.git/blame - src/generic/caret.cpp
more new files
[wxWidgets.git] / src / generic / caret.cpp
CommitLineData
0290598f
VZ
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$
8// Copyright: (c) wxWindows team
9// Licence: wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20#if 0 //def __GNUG__
21 #pragma implementation "caret.h"
22#endif
23
24// For compilers that support precompilation, includes "wx.h".
25#include "wx/wxprec.h"
26
27#ifdef __BORLANDC__
28 #pragma hdrstop
29#endif
30
31#ifndef WX_PRECOMP
32 #include "wx/wx.h"
33#endif //WX_PRECOMP
34
35#include "wx/caret.h"
36
37// ----------------------------------------------------------------------------
38// global variables for this module
39// ----------------------------------------------------------------------------
40
41// the blink time (common to all carets for MSW compatibility)
42static int gs_blinkTime = 500; // in milliseconds
43
44// ============================================================================
45// implementation
46// ============================================================================
47
48// ----------------------------------------------------------------------------
49// wxCaret static functions and data
50// ----------------------------------------------------------------------------
51
52
53int wxCaretBase::GetBlinkTime()
54{
55 return gs_blinkTime;
56}
57
58void wxCaretBase::SetBlinkTime(int milliseconds)
59{
60 gs_blinkTime = milliseconds;
61}
62
63// ----------------------------------------------------------------------------
64// initialization and destruction
65// ----------------------------------------------------------------------------
66
67void wxCaret::InitGeneric()
68{
69}
70
71wxCaret::~wxCaret()
72{
73 if ( IsVisible() )
74 {
75 // stop blinking
76 m_timer.Stop();
77 }
78}
79
80// ----------------------------------------------------------------------------
81// showing/hiding/moving the caret (base class interface)
82// ----------------------------------------------------------------------------
83
84void wxCaret::DoShow()
85{
86 m_timer.Start(GetBlinkTime());
87
88 m_blinkedOut = TRUE;
89 Blink();
90}
91
92void wxCaret::DoHide()
93{
94 m_timer.Stop();
95
96 if ( !m_blinkedOut )
97 {
98 Blink();
99 }
100}
101
102void wxCaret::DoMove()
103{
104 if ( IsVisible() && !m_blinkedOut )
105 {
106 Blink();
107 }
108 //else: will be shown at the correct location next time it blinks
109}
110
111// ----------------------------------------------------------------------------
112// drawing the caret
113// ----------------------------------------------------------------------------
114
115void wxCaret::Blink()
116{
117 m_blinkedOut = !m_blinkedOut;
118
119 wxClientDC dc(GetWindow());
120 if ( !m_blinkedOut )
121 {
122 DoDraw(&dc);
123 }
124 else
125 {
126 // FIXME can't be less efficient than this... (+1 needed!)
127 wxRect rect(m_x, m_y, m_width + 1, m_height + 1);
128 GetWindow()->Refresh(FALSE, &rect);
129 }
130}
131
132void wxCaret::DoDraw(wxDC *dc)
133{
134 dc->SetPen( *wxBLACK_PEN );
135 dc->DrawLine( m_x, m_y, m_x+m_width, m_y );
136 dc->DrawLine( m_x, m_y+m_height, m_x+m_width, m_y+m_height );
137 dc->DrawLine( m_x+(m_width/2), m_y, m_x+(m_width/2), m_y+m_height );
138// dc->DrawLine( m_x+(m_width/2)+1, m_y, m_x+(m_width/2)+1, m_y+m_height );
139}