veandco / go-sdl2

SDL2 binding for Go
https://godoc.org/github.com/veandco/go-sdl2
BSD 3-Clause "New" or "Revised" License
2.17k stars 219 forks source link

(suggestion) Convert sdl.Rect Fields from int32 to int #600

Open Priff13 opened 1 month ago

Priff13 commented 1 month ago

Would you mind converting the sdl.Rect field types from int32 to int? This would help code readability when defining new rectangles.

veeableful commented 1 month ago

Hi @Priff13, it was done to keep compatibility with SDL2’s native C integers. Would you happen to have a suggestion on how to make the fields int and keep them compatible?

Priff13 commented 1 month ago

Hi @Priff13, it was done to keep compatibility with SDL2’s native C integers. Would you happen to have a suggestion on how to make the fields int and keep them compatible?

@veeableful, the way that I would go about it is like this: I would convert the struct types to int, but keep the old struct, like this:

type Rect struct {
    X, Y, W, H int
}

type rect_internal struct {
    X, Y, W, H int32
}

I see that the function func (a *Rect) cptr() *C.SDL_Rect is the primary function that is used when interacting with C, so I would adjust it to work like this:

func (a *Rect) cptr() *C.SDL_Rect {
    b := &rect_internal{ X: int32(*a.X), Y: int32(*a.Y), W: int32(*a.W), H: int32(*a.H) }
    return (*C.SDL_Rect)(unsafe.Pointer(b))
}

In the rest of the cases where sdl.Rect is used, all that would need to be done is convert the fields to or from int32.

It's not an insignificant amount of changes, but I believe that it would be overall beneficial for the developer experience.

PS: Applying the same changes to sdl.Point would be greatly appreciated.

veeableful commented 1 month ago

Thanks @Priff13. I think I will have to postpone it due to the amount of effort that it would require for me to maintain by myself but if you would like to create a pull request, it would be greatly appreciated!