19,17 → 19,16 |
|
MODULE Scroll; |
|
IMPORT G := Graph, K := KolibriOS, U := Utils; |
IMPORT G := Graph, K := KolibriOS; |
|
CONST |
|
ScrollIPC* = 0; |
Delay* = 40; |
|
TYPE |
|
tScroll* = RECORD |
vertical, Inc*, Dec*, mouse: BOOLEAN; |
vertical, Inc*, Dec*, mouse*: BOOLEAN; |
top*, left*, |
width*, height*: INTEGER; (* read only *) |
btnSize, sliderSize: INTEGER; |
39,24 → 38,21 |
|
|
PROCEDURE create* (vertical: BOOLEAN; width, height: INTEGER; btnSize, sliderSize: INTEGER; VAR scroll: tScroll); |
VAR |
res: tScroll; |
BEGIN |
res.vertical := vertical; |
res.Inc := FALSE; |
res.Dec := FALSE; |
res.Slider := -1; |
res.mouse := FALSE; |
res.left := 0; |
res.top := 0; |
res.width := width; |
res.height := height; |
res.btnSize := btnSize; |
res.sliderSize := sliderSize; |
res.pos := 0; |
res.maxVal := 0; |
res.canvas := G.CreateCanvas(width, height); |
scroll := res |
scroll.vertical := vertical; |
scroll.Inc := FALSE; |
scroll.Dec := FALSE; |
scroll.Slider := -1; |
scroll.mouse := FALSE; |
scroll.left := 0; |
scroll.top := 0; |
scroll.width := width; |
scroll.height := height; |
scroll.btnSize := btnSize; |
scroll.sliderSize := sliderSize; |
scroll.pos := 0; |
scroll.maxVal := 0; |
scroll.canvas := G.CreateCanvas(width, height) |
END create; |
|
|
300,6 → 296,11 |
END MouseMove; |
|
|
PROCEDURE between (a, b, c: INTEGER): BOOLEAN; |
RETURN (a <= b) & (b <= c) |
END between; |
|
|
PROCEDURE SendIPC*; |
BEGIN |
K.SendIPC(K.ThreadID(), ScrollIPC) |
310,11 → 311,10 |
VAR |
c, size: INTEGER; |
BEGIN |
IF ~scroll.mouse THEN |
DEC(x, scroll.left); |
DEC(y, scroll.top); |
scroll.mouse := TRUE; |
IF U.between(1, x, scroll.width - 2) & U.between(1, y, scroll.height - 2) THEN |
IF between(1, x, scroll.width - 2) & between(1, y, scroll.height - 2) THEN |
IF scroll.vertical THEN |
c := y; |
size := scroll.height |
322,13 → 322,15 |
c := x; |
size := scroll.width |
END; |
IF U.between(scroll.btnSize + scroll.pos - 1, c, scroll.btnSize + scroll.pos + scroll.sliderSize - 1) THEN |
IF between(scroll.btnSize + scroll.pos - 1, c, scroll.btnSize + scroll.pos + scroll.sliderSize - 1) THEN |
scroll.pos0 := scroll.pos; |
scroll.Slider := c |
ELSIF U.between(0, c, scroll.btnSize - 1) THEN |
ELSE |
IF between(0, c, scroll.btnSize - 1) THEN |
scroll.Dec := TRUE; |
SendIPC |
ELSIF U.between(size - scroll.btnSize, c, size - 1) THEN |
ELSE |
IF between(size - scroll.btnSize, c, size - 1) THEN |
scroll.Inc := TRUE; |
SendIPC |
ELSE |
339,6 → 341,7 |
END |
END |
END |
END |
END MouseDown; |
|
|