Subversion Repositories Kolibri OS

Rev

Rev 9182 | Rev 9200 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9182 Rev 9187
Line 17... Line 17...
17
    along with CEdit. If not, see .
17
    along with CEdit. If not, see .
18
*)
18
*)
Line 19... Line 19...
19
 
19
 
Line 20... Line 20...
20
MODULE Scroll;
20
MODULE Scroll;
Line 21... Line 21...
21
 
21
 
Line 22... Line 22...
22
IMPORT G := Graph, K := KolibriOS;
22
IMPORT G := Graph, K := KolibriOS, U := Utils;
-
 
23
 
Line 23... Line 24...
23
 
24
CONST
Line 24... Line 25...
24
CONST
25
 
25
 
26
	ScrollIPC* = 0;
26
	ScrollIPC* = 0;
27
	Delay* = 40;
27
 
28
 
28
TYPE
29
TYPE
29
 
30
 
30
	tScroll* = RECORD
31
	tScroll* = RECORD
31
		vertical, Inc*, Dec*, mouse*: BOOLEAN;
32
		vertical, Inc*, Dec*, mouse: BOOLEAN;
Line 32... Line 33...
32
		top*, left*,
33
		top*, left*,
-
 
34
		width*, height*: INTEGER; (* read only *)
-
 
35
		btnSize, sliderSize: INTEGER;
33
		width*, height*: INTEGER; (* read only *)
36
		pos, Slider, pos0, maxVal*, value*: INTEGER;
34
		btnSize, sliderSize: INTEGER;
37
		canvas*: G.tCanvas
35
		pos, Slider, pos0, maxVal*, value*: INTEGER;
38
	END;
36
		canvas*: G.tCanvas
39
 
37
	END;
40
 
38
 
41
PROCEDURE create* (vertical: BOOLEAN; width, height: INTEGER; btnSize, sliderSize: INTEGER; VAR scroll: tScroll);
39
 
42
VAR
40
PROCEDURE create* (vertical: BOOLEAN; width, height: INTEGER; btnSize, sliderSize: INTEGER; VAR scroll: tScroll);
43
	res: tScroll;
41
BEGIN
44
BEGIN
42
	scroll.vertical := vertical;
45
	res.vertical := vertical;
43
	scroll.Inc := FALSE;
46
	res.Inc := FALSE;
44
	scroll.Dec := FALSE;
47
	res.Dec := FALSE;
45
	scroll.Slider := -1;
48
	res.Slider := -1;
46
	scroll.mouse := FALSE;
49
	res.mouse := FALSE;
47
	scroll.left := 0;
50
	res.left := 0;
-
 
51
	res.top := 0;
48
	scroll.top := 0;
52
	res.width := width;
Line 49... Line 53...
49
	scroll.width := width;
53
	res.height := height;
50
	scroll.height := height;
54
	res.btnSize := btnSize;
Line 294... Line 298...
294
		paint(scroll)
298
		paint(scroll)
295
	END
299
	END
296
END MouseMove;
300
END MouseMove;
Line 297... Line -...
297
 
-
 
298
 
-
 
299
PROCEDURE between (a, b, c: INTEGER): BOOLEAN;
-
 
300
	RETURN (a <= b) & (b <= c)
-
 
301
END between;
-
 
302
 
301
 
303
 
302
 
304
PROCEDURE SendIPC*;
303
PROCEDURE SendIPC*;
305
BEGIN
304
BEGIN
Line 306... Line 305...
306
	K.SendIPC(K.ThreadID(), ScrollIPC)
305
	K.SendIPC(K.ThreadID(), ScrollIPC)
307
END SendIPC;
306
END SendIPC;
308
 
307
 
309
 
308
 
-
 
309
PROCEDURE MouseDown* (VAR scroll: tScroll; x, y: INTEGER);
310
PROCEDURE MouseDown* (VAR scroll: tScroll; x, y: INTEGER);
310
VAR
311
VAR
311
	c, size: INTEGER;
312
	c, size: INTEGER;
312
BEGIN
313
BEGIN
313
	IF ~scroll.mouse THEN
314
	DEC(x, scroll.left);
314
		DEC(x, scroll.left);
315
	DEC(y, scroll.top);
315
		DEC(y, scroll.top);
316
	scroll.mouse := TRUE;
316
		scroll.mouse := TRUE;
317
	IF between(1, x, scroll.width - 2) & between(1, y, scroll.height - 2) THEN
317
		IF U.between(1, x, scroll.width - 2) & U.between(1, y, scroll.height - 2) THEN
318
		IF scroll.vertical THEN
318
			IF scroll.vertical THEN
319
			c := y;
319
				c := y;
320
			size := scroll.height
320
				size := scroll.height
321
		ELSE
321
			ELSE
322
			c := x;
322
				c := x;
323
			size := scroll.width
323
				size := scroll.width
324
		END;
-
 
325
		IF between(scroll.btnSize + scroll.pos - 1, c, scroll.btnSize + scroll.pos + scroll.sliderSize - 1) THEN
324
			END;
326
			scroll.pos0 := scroll.pos;
325
			IF U.between(scroll.btnSize + scroll.pos - 1, c, scroll.btnSize + scroll.pos + scroll.sliderSize - 1) THEN
327
			scroll.Slider := c
326
				scroll.pos0 := scroll.pos;
328
		ELSE
-
 
329
			IF between(0, c, scroll.btnSize - 1) THEN
327
				scroll.Slider := c
330
				scroll.Dec := TRUE;
328
			ELSIF U.between(0, c, scroll.btnSize - 1) THEN
331
				SendIPC
329
				scroll.Dec := TRUE;
332
			ELSE
330
				SendIPC
333
				IF between(size - scroll.btnSize, c, size - 1) THEN
331
			ELSIF U.between(size - scroll.btnSize, c, size - 1) THEN
334
					scroll.Inc := TRUE;
332
				scroll.Inc := TRUE;
335
					SendIPC
333
				SendIPC
336
				ELSE
334
			ELSE
337
					setPos(scroll, c - scroll.btnSize - scroll.sliderSize DIV 2);
335
				setPos(scroll, c - scroll.btnSize - scroll.sliderSize DIV 2);
338
					scroll.pos0 := scroll.pos;
336
				scroll.pos0 := scroll.pos;
339
					scroll.Slider := c;
337
				scroll.Slider := c;
340
					paint(scroll)
-
 
341
				END
338
				paint(scroll)
Line 342... Line 339...
342
			END
339
			END
343
		END
340
		END