-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathrect.go
73 lines (57 loc) · 1.41 KB
/
rect.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
package sdl
import (
"unsafe"
)
// #include <SDL.h>
import "C"
type Point struct {
X int32
Y int32
}
func (p *Point) c() *C.SDL_Point {
return (*C.SDL_Point)(unsafe.Pointer(p))
}
type Rect struct {
X, Y int32
W, H int32
}
func (r *Rect) c() *C.SDL_Rect {
return (*C.SDL_Rect)(unsafe.Pointer(r))
}
func (r *Rect) Empty() bool {
return (r == nil) || (r.W <= 0) || (r.H <= 0)
}
func (r *Rect) Equals(r2 *Rect) bool {
return (r != nil) && (r2 != nil) && (r.X == r2.X) && (r.Y == r2.Y) && (r.W == r2.W) && (r.H == r2.H)
}
func (r *Rect) HasIntersection(r2 *Rect) bool {
return C.SDL_HasIntersection(r.c(), r2.c()) == C.SDL_TRUE
}
func (r *Rect) IntersectRect(r2 *Rect) *Rect {
var rect Rect
if C.SDL_IntersectRect(r.c(), r2.c(), rect.c()) == C.SDL_FALSE {
return nil
}
return &rect
}
func (r *Rect) UnionRect(r2 *Rect) *Rect {
var rect Rect
C.SDL_UnionRect(r.c(), r2.c(), rect.c())
return &rect
}
func EnclosePoints(points []Point, clip *Rect) (*Rect, bool) {
var rect Rect
return &rect, C.SDL_EnclosePoints(
(*C.SDL_Point)(unsafe.Pointer(&points[0])),
C.int(len(points)),
clip.c(),
rect.c(),
) == C.SDL_TRUE
}
func (r *Rect) IntersectRectAndLine(x1, y1, x2, y2 *int) bool {
cx1 := (*C.int)(unsafe.Pointer(x1))
cy1 := (*C.int)(unsafe.Pointer(y1))
cx2 := (*C.int)(unsafe.Pointer(x2))
cy2 := (*C.int)(unsafe.Pointer(y2))
return C.SDL_IntersectRectAndLine(r.c(), cx1, cy1, cx2, cy2) == C.SDL_TRUE
}