| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- package fyne
- var _ Vector2 = (*Delta)(nil)
- var _ Vector2 = (*Position)(nil)
- var _ 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 this Delta.
- 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 this Position
- 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 the current Size and s2.
- 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}
- }
|