Fixed crash if the cursor was set too low.
[webos-internals:applications.git] / termplugin / screencursor.hpp
1 class ScreenCursor {
2   public:
3     ScreenCursor(int width,int height)
4     : _width(width), _height(height), _row(0), _col(0)
5     {
6     }
7
8     int row() const { return _row; }
9     int col() const { return _col; }
10
11     void set(int r,int c)
12     {
13       _row = r;
14       _col = c;
15       if (_row<0) {
16         _row = 0;
17       }
18       if (_row>=_height) {
19         _row = _height-1;
20       }
21       if (_col<0) {
22         _col = 0;
23       }
24       if (_col>_width) {
25         // the cursor can be one character off the screen to the right
26         _col = _width;
27       }
28     }
29
30     void moveHome()
31     {
32       _row = 0;
33       _col = 0;
34     }
35
36     void moveUp()
37     {
38       --_row;
39       if (_row<0) {
40         _row = 0;
41       }
42     }
43
44     void moveRight()
45     {
46       ++_col;
47       if (_col>_width) {
48         // it is ok for the cursor to be past the screen
49         // as long as we don't write there.
50         _col = _width;
51       }
52     }
53
54     void backSpace()
55     {
56       --_col;
57       if (_col<0) {
58         _col = _width+_col;
59         moveUp();
60       }
61     }
62
63     void moveLeft()
64     {
65       --_col;
66       if (_col<0) {
67         _col = 0;
68       }
69     }
70
71     void carriageReturn()
72     {
73       _col = 0;
74     }
75
76     void moveDown()
77     {
78       ++_row;
79       if (_row==_height) {
80         _row = _height-1;
81       }
82     }
83
84     void lineFeed()
85     {
86       moveDown();
87     }
88
89     void newLine()
90     {
91       carriageReturn();
92       lineFeed();
93     }
94
95     bool atTop() const
96     {
97       return _row==0;
98     }
99
100     bool atBottom() const
101     {
102       return _row == _height-1;
103     }
104
105     bool atRight() const
106     {
107       return _col >= _width-1;
108     }
109
110     bool atLeft() const
111     {
112       return _col == 0;
113     }
114
115   private:
116     int _width;
117     int _height;
118     int _row;
119     int _col;
120 };