Files
odin-sdl3-static-linking/sdl3/sdl3_rect.odin
2025-12-15 12:37:50 -05:00

61 lines
2.1 KiB
Odin

package sdl3
import "core:c"
Point :: distinct [2]c.int
FPoint :: distinct [2]f32
Rect :: struct {
x, y: c.int,
w, h: c.int,
}
FRect :: struct {
x, y: f32,
w, h: f32,
}
RectToFRect :: #force_inline proc "c" (rect: Rect, frect: ^FRect) {
frect.x = f32(rect.x)
frect.y = f32(rect.y)
frect.w = f32(rect.w)
frect.h = f32(rect.h)
}
@(require_results)
PointInRect :: proc "c" (p: Point, r: Rect) -> bool {
return ( (p.x >= r.x) && (p.x < (r.x + r.w)) &&
(p.y >= r.y) && (p.y < (r.y + r.h)) )
}
@(require_results)
PointInRectFloat :: proc "c" (p: FPoint, r: FRect) -> bool {
return ( (p.x >= r.x) && (p.x <= (r.x + r.w)) &&
(p.y >= r.y) && (p.y <= (r.y + r.h)) )
}
@(require_results)
RectEmpty :: proc "c" (r: Rect) -> bool {
return r.w <= 0 || r.h <= 0
}
@(require_results)
RectEqual :: proc "c" (a, b: Rect) -> bool {
return a == b
}
@(default_calling_convention="c", link_prefix="SDL_", require_results)
foreign lib {
HasRectIntersection :: proc(#by_ptr A, B: Rect) -> bool ---
GetRectIntersection :: proc(#by_ptr A, B: Rect, result: ^Rect) -> bool ---
GetRectUnion :: proc(#by_ptr A, B: Rect, result: ^Rect) -> bool ---
GetRectEnclosingPoints :: proc(points: [^]Point, count: c.int, #by_ptr clip: Rect, result: ^Rect) -> bool ---
GetRectAndLineIntersection :: proc(#by_ptr rect: Rect, X1, Y1, X2, Y2: ^c.int) -> bool ---
HasRectIntersectionFloat :: proc(#by_ptr A, B: FRect) -> bool ---
GetRectIntersectionFloat :: proc(#by_ptr A, B: FRect, result: ^FRect) -> bool ---
GetRectUnionFloat :: proc(#by_ptr A, B: FRect, result: ^FRect) -> bool ---
GetRectEnclosingPointsFloat :: proc(points: [^]FPoint, count: c.int, #by_ptr clip: FRect, result: ^FRect) -> bool ---
GetRectAndLineIntersectionFloat :: proc(#by_ptr rect: FRect, X1, Y1, X2, Y2: ^f32) -> bool ---
}