seekia/imported/goeffects/rect.go

47 lines
1.1 KiB
Go

package goeffects
// Package copied from https://github.com/markdaws/go-effects
import (
"fmt"
"image"
)
// Rect used for image bounds
type Rect struct {
X int
Y int
Width int
Height int
}
// String returns a debug string
func (r Rect) String() string {
return fmt.Sprintf("X:%d, Y:%d, Width:%d, Height:%d", r.X, r.Y, r.Width, r.Height)
}
// Intersect returns the intersection between two rectangles
func (r Rect) Intersect(r2 Rect) Rect {
x := max(r.X, r2.X)
num1 := min((r.X+r.Width), (r2.X+r2.Width))
y := max(r.Y, r2.Y)
num2 := min((r.Y+r.Height), (r2.Y+r2.Height))
if num1 >= x && num2 >= y {
return Rect{X: x, Y: y, Width: (num1 - x), Height: (num2 - y)}
}
return Rect{}
}
// IsEmpty returns true if this is an empty rectangle
func (r Rect) IsEmpty() bool {
return r.Width == 0 || r.Height == 0
}
// ToImageRect returns an image.Rectangle instance initialized from this Rect
func (r Rect) ToImageRect() image.Rectangle {
return image.Rectangle{
Min: image.Point{X: r.X, Y: r.Y},
Max: image.Point{X: r.X + r.Width, Y: r.Y + r.Height},
}
}