1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Fyne

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
geometry.go 4.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Jonathan Hall Отправлено 09.09.2024 22:41 00390a8
package fyne
var (
_ Vector2 = (*Delta)(nil)
_ Vector2 = (*Position)(nil)
_ Vector2 = (*Size)(nil)
)
// Vector2 marks geometry types that can operate as a coordinate vector.
type Vector2 interface {
Components() (float32, float32)
IsZero() bool
}
// Delta is a generic X, Y coordinate, size or movement representation.
type Delta struct {
DX, DY float32
}
// NewDelta returns a newly allocated [Delta] representing a movement in the X and Y axis.
func NewDelta(dx float32, dy float32) Delta {
return Delta{DX: dx, DY: dy}
}
// Components returns the X and Y elements of v.
func (v Delta) Components() (float32, float32) {
return v.DX, v.DY
}
// IsZero returns whether the Position is at the zero-point.
func (v Delta) IsZero() bool {
return v.DX == 0.0 && v.DY == 0.0
}
// Position describes a generic X, Y coordinate relative to a parent [Canvas]
// or [CanvasObject].
type Position struct {
X float32 // The position from the parent's left edge
Y float32 // The position from the parent's top edge
}
// NewPos returns a newly allocated [Position] representing the specified coordinates.
func NewPos(x float32, y float32) Position {
return Position{x, y}
}
// NewSquareOffsetPos returns a newly allocated [Position] with the same x and y position.
//
// Since: 2.4
func NewSquareOffsetPos(length float32) Position {
return Position{length, length}
}
// Add returns a new [Position] that is the result of offsetting the current
// position by p2 X and Y.
func (p Position) Add(v Vector2) Position {
// NOTE: Do not simplify to `return p.AddXY(v.Components())`, it prevents inlining.
x, y := v.Components()
return Position{p.X + x, p.Y + y}
}
// AddXY returns a new [Position] by adding x and y to the current one.
func (p Position) AddXY(x, y float32) Position {
return Position{p.X + x, p.Y + y}
}
// Components returns the X and Y elements of p.
func (p Position) Components() (float32, float32) {
return p.X, p.Y
}
// IsZero returns whether the Position is at the zero-point.
func (p Position) IsZero() bool {
return p.X == 0.0 && p.Y == 0.0
}
// Subtract returns a new [Position] that is the result of offsetting the current
// position by p2 -X and -Y.
func (p Position) Subtract(v Vector2) Position {
// NOTE: Do not simplify to `return p.SubtractXY(v.Components())`, it prevents inlining.
x, y := v.Components()
return Position{p.X - x, p.Y - y}
}
// SubtractXY returns a new [Position] by subtracting x and y from the current one.
func (p Position) SubtractXY(x, y float32) Position {
return Position{p.X - x, p.Y - y}
}
// Size describes something with width and height.
type Size struct {
Width float32 // The number of units along the X axis.
Height float32 // The number of units along the Y axis.
}
// NewSize returns a newly allocated Size of the specified dimensions.
func NewSize(w float32, h float32) Size {
return Size{w, h}
}
// NewSquareSize returns a newly allocated Size with the same width and height.
//
// Since: 2.4
func NewSquareSize(side float32) Size {
return Size{side, side}
}
// Add returns a new Size that is the result of increasing the current size by
// s2 Width and Height.
func (s Size) Add(v Vector2) Size {
// NOTE: Do not simplify to `return s.AddXY(v.Components())`, it prevents inlining.
w, h := v.Components()
return Size{s.Width + w, s.Height + h}
}
// AddWidthHeight returns a new Size by adding width and height to the current one.
func (s Size) AddWidthHeight(width, height float32) Size {
return Size{s.Width + width, s.Height + height}
}
// IsZero returns whether the Size has zero width and zero height.
func (s Size) IsZero() bool {
return s.Width == 0.0 && s.Height == 0.0
}
// Max returns a new [Size] that is the maximum of the current Size and s2.
func (s Size) Max(v Vector2) Size {
x, y := v.Components()
maxW := Max(s.Width, x)
maxH := Max(s.Height, y)
return NewSize(maxW, maxH)
}
// Min returns a new [Size] that is the minimum of s and v.
func (s Size) Min(v Vector2) Size {
x, y := v.Components()
minW := Min(s.Width, x)
minH := Min(s.Height, y)
return NewSize(minW, minH)
}
// Components returns the Width and Height elements of this Size
func (s Size) Components() (float32, float32) {
return s.Width, s.Height
}
// Subtract returns a new Size that is the result of decreasing the current size
// by s2 Width and Height.
func (s Size) Subtract(v Vector2) Size {
// NOTE: Do not simplify to `return s.SubtractXY(v.Components())`, it prevents inlining.
w, h := v.Components()
return Size{s.Width - w, s.Height - h}
}
// SubtractWidthHeight returns a new Size by subtracting width and height from the current one.
func (s Size) SubtractWidthHeight(width, height float32) Size {
return Size{s.Width - width, s.Height - height}
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Fyne.git
git@api.gitlife.ru:oschina-mirror/mirrors-Fyne.git
oschina-mirror
mirrors-Fyne
mirrors-Fyne
master