-
Notifications
You must be signed in to change notification settings - Fork 0
/
fx.go
executable file
·85 lines (81 loc) · 1.48 KB
/
fx.go
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package pixel
/*
func Scroll(buffer Image, xstep, ystep int) {
if xstep == 0 {
if ystep > 0 {
for n := 0; n < ystep; n++ {
ScrollDown(buffer)
}
return
}
for n := 0; n < -ystep; n++ {
ScrollUp(buffer)
}
return
}
var (
sx, y, dx, dy, ex, ey int
cx, cy int
b = buffer.Bounds()
)
if xstep < 0 {
sx = 0
ex = b.Dx() + xstep
dx = 1
cx = b.Dx() - 1
} else {
sx = b.Dx() - 1
ex = xstep - 1
dx = -1
}
if ystep < 0 {
y = 0
ey = b.Dy() + ystep
dy = 1
cy = b.Dy() - 1
} else {
y = b.Dy() - 1
ey = ystep - 1
dy = -1
}
log.Printf("scroll: clearx: %d, cleary: %d", cx, cy)
for ; y != ey; y += dy {
for x := sx; x != ex; x += dx {
if x == cx || y == cy {
buffer.Set(x, y, color.Black)
} else {
buffer.Set(x, y, buffer.At(x-xstep, y-ystep))
}
}
}
}
*/
func ScrollUp(b Image) {
switch b := b.(type) {
case *Bitmap:
copy(b.Pix, b.Pix[b.Stride:])
l := len(b.Pix)
zeroRange(b.Pix, l-b.Stride, l)
case *RGB565:
copy(b.Pix, b.Pix[b.Stride:])
l := len(b.Pix)
zeroRange(b.Pix, l-b.Stride, l)
case *RGB888:
copy(b.Pix, b.Pix[b.Stride:])
l := len(b.Pix)
zeroRange(b.Pix, l-b.Stride, l)
}
}
func ScrollDown(b Image) {
switch b := b.(type) {
case *Bitmap:
copy(b.Pix[b.Stride:], b.Pix)
zeroRange(b.Pix, 0, b.Stride)
case *RGB565:
copy(b.Pix[b.Stride:], b.Pix)
zeroRange(b.Pix, 0, b.Stride)
case *RGB888:
copy(b.Pix[b.Stride:], b.Pix)
zeroRange(b.Pix, 0, b.Stride)
}
}