summaryrefslogtreecommitdiff
path: root/src/client/cursor.cpp
blob: 82548b1dd35c718b220dd3c198b78a7462ac03c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
struct Cursor {
	int x;
	int y;
	Window &w;

	Cursor(Window &w) : x(0), y(0), w(w) {}

	char element() {
		return w.view[x + y * w.width];
	}

	void move_left() {
		if (x == 0) {
			if (y != 0) {
				y--;
				x = w.line_ends[y];
			}
		} else {
			x--;
		}
	}

	void move_right() {
		if (element()) {
			if (element() == '\n') {
				x = 0;
				y++;
			} else {
				x++;
			}
		}
	}

	void move_up() {
		if (y != 0) {
			y--;
			if (x > w.line_ends[y]) {
				x = w.line_ends[y];
			}
		}
	}

	void move_down() {
		if (element()) {
			y++;
			if (x > w.line_ends[y]) {
				x = w.line_ends[y];
			}
		}
	}

	void update() {
		w.set_cursor(x, y);
	}
};