48 lines
1.1 KiB
Go
48 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},
|
||
|
}
|
||
|
}
|