units

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 14, 2024 License: BSD-3-Clause Imports: 8 Imported by: 0

Documentation

Overview

Package Units supports full range of CSS-style length units (em, px, dp, etc)

The unit is stored along with a value, and can be converted at a later point into a raw display pixel value using the Context which contains all the necessary reference values to perform the conversion. Typically the unit value is parsed early from a style and then converted later once the context is fully resolved. The Value also holds the converted value (Dots) so it can be used directly without further re-conversion.

'Dots' are used as term for underlying raw display pixels because "Pixel" and the px unit are actually not conventionally used as raw display pixels in the current HiDPI environment. See https://developer.mozilla.org/en/docs/Web/CSS/length: 1 px = 1/96 in Also supporting dp = density-independent pixel = 1/160 in

Index

Constants

View Source
const (
	PxPerInch = 96
	DpPerInch = 160
	MmPerInch = 25.4
	CmPerInch = 2.54
	PtPerInch = 72
	PcPerInch = 6
)

Standard conversion factors. Px is a logical, DPI-independent pixel instead of an actual "dot" raw pixel.

Variables

This section is empty.

Functions

This section is empty.

Types

type Context

type Context struct {

	// DPI is dots-per-inch of the display
	DPI float32

	// FontEm is the size of the font of the element in raw dots (not points)
	FontEm float32

	// FontEx is the height x-height of font in points (size of 'x' glyph)
	FontEx float32

	// FontCh is the ch-size character size of font in points (width of '0' glyph)
	FontCh float32

	// FontRem is the size of the font of the root element in raw dots (not points)
	FontRem float32

	// Vpw is viewport width in dots
	Vpw float32

	// Vph is viewport height in dots
	Vph float32

	// Elw is width of element in dots
	Elw float32

	// Elh is height of element in dots
	Elh float32

	// Paw is width of parent in dots
	Paw float32

	// Pah is height of parent in dots
	Pah float32
}

Context specifies everything about the current context necessary for converting the number into specific display-dependent pixels

func (*Context) Ch

func (uc *Context) Ch(value float32) float32

Ch converts the given ch value to dots. Ch is width of the '0' glyph in the element's font. It falls back to a default of 0.5em.

func (*Context) Cm

func (uc *Context) Cm(value float32) float32

Cm converts the given cm value to dots. Cm is centimeters. 1cm is 1/2.54 in.

func (*Context) Defaults

func (uc *Context) Defaults()

Defaults are generic defaults

func (*Context) Dots

func (uc *Context) Dots(un Units) float32

ToDotsFact returns factor needed to convert given unit into raw pixels (dots in DPI)

func (*Context) DotsToPx

func (uc *Context) DotsToPx(val float32) float32

DotsToPx just converts a value from dots to pixels

func (*Context) Dp

func (uc *Context) Dp(value float32) float32

Dp converts the given dp value to dots. Dp is density-independent pixels. 1dp is 1/160 in.

func (*Context) Eh

func (uc *Context) Eh(value float32) float32

Eh converts the given eh value to dots. Eh is percentage of element height, which is equivalent to CSS % in some contexts.

func (*Context) Em

func (uc *Context) Em(value float32) float32

Em converts the given em value to dots. Em is the font size of the element.

func (*Context) Ew

func (uc *Context) Ew(value float32) float32

Ew converts the given ew value to dots. Ew is percentage of element width, which is equivalent to CSS % in some contexts.

func (*Context) Ex

func (uc *Context) Ex(value float32) float32

Ex converts the given ex value to dots. Ex is x-height of the element's font (size of 'x' glyph). It falls back to a default of 0.5em.

func (*Context) In

func (uc *Context) In(value float32) float32

In converts the given in value to dots. In is inches. 1in is 2.54cm or 96px.

func (*Context) Mm

func (uc *Context) Mm(value float32) float32

Mm converts the given mm value to dots. Mm is millimeters. 1mm is 1/10 cm.

func (*Context) Pc

func (uc *Context) Pc(value float32) float32

Pc converts the given pc value to dots. Pc is picas. 1pc is 1/6 in.

func (*Context) Ph

func (uc *Context) Ph(value float32) float32

Ph converts the given ph value to dots. Ph is percentage of parent height, which is equivalent to CSS % in some contexts.

func (*Context) Pt

func (uc *Context) Pt(value float32) float32

Pt converts the given pt value to dots. Pt is points. 1pt is 1/72 in.

func (*Context) Pw

func (uc *Context) Pw(value float32) float32

Pw converts the given pw value to dots. Pw is percentage of parent width, which is equivalent to CSS % in some contexts.

func (*Context) Px

func (uc *Context) Px(value float32) float32

Px converts the given px value to dots. Px is logical pixels. 1px is 1/96 in. These are not raw display pixels, for which you should use dots.

func (*Context) PxToDots

func (uc *Context) PxToDots(val float32) float32

PxToDots just converts a value from pixels to dots

func (*Context) Q

func (uc *Context) Q(value float32) float32

Q converts the given q value to dots. Q is quarter-millimeters. 1q is 1/40 cm.

func (*Context) Rem

func (uc *Context) Rem(value float32) float32

Rem converts the given rem value to dots. Rem is the font size of the root element, which is always 16dp.

func (*Context) SetFont

func (uc *Context) SetFont(em, ex, ch, rem float32)

SetFont sets the context values for fonts: note these are already in raw DPI dots, not points or anything else

func (*Context) SetSizes

func (uc *Context) SetSizes(vw, vh, ew, eh, pw, ph float32) bool

SetSizes sets the context values for the non-font sizes to the given values; the values are ignored if they are zero. returns true if any are different.

func (*Context) String

func (uc *Context) String() string

func (*Context) ToDots

func (uc *Context) ToDots(val float32, un Units) float32

ToDots converts value in given units into raw display pixels (dots in DPI)

func (*Context) Vh

func (uc *Context) Vh(value float32) float32

Vh converts the given vh value to dots. Vh is percentage of viewport (Scene) height.

func (*Context) Vmax

func (uc *Context) Vmax(value float32) float32

Vmax converts the given vmax value to dots. Vmax is percentage of the larger dimension of the viewport (Scene).

func (*Context) Vmin

func (uc *Context) Vmin(value float32) float32

Vmin converts the given vmin value to dots. Vmin is percentage of the smaller dimension of the viewport (Scene).

func (*Context) Vw

func (uc *Context) Vw(value float32) float32

Vw converts the given vw value to dots. Vw is percentage of viewport (Scene) width.

type Units

type Units int32 //enums:enum -trim-prefix Unit -transform lower

Units is an enum that represents a unit (px, em, etc)

const (
	// UnitDp represents density-independent pixels. 1dp is 1/160 in.
	UnitDp Units = iota

	// UnitPx represents logical pixels. 1px is 1/96 in.
	// These are not raw display pixels, for which you should use dots.
	UnitPx

	// UnitEw represents percentage of element width, which is equivalent to CSS % in some contexts.
	UnitEw

	// UnitEh represents percentage of element height, which is equivalent to CSS % in some contexts.
	UnitEh

	// UnitPw represents percentage of parent width, which is equivalent to CSS % in some contexts.
	UnitPw

	// UnitPh represents percentage of parent height, which is equivalent to CSS % in some contexts.
	UnitPh

	// UnitRem represents the font size of the root element, which is always 16dp.
	UnitRem

	// UnitEm represents the font size of the element.
	UnitEm

	// UnitEx represents x-height of the element's font (size of 'x' glyph).
	// It falls back to a default of 0.5em.
	UnitEx

	// UnitCh represents width of the '0' glyph in the element's font.
	// It falls back to a default of 0.5em.
	UnitCh

	// UnitVw represents percentage of viewport (Scene) width.
	UnitVw

	// UnitVh represents percentage of viewport (Scene) height.
	UnitVh

	// UnitVmin represents percentage of the smaller dimension of the viewport (Scene).
	UnitVmin

	// UnitVmax represents percentage of the larger dimension of the viewport (Scene).
	UnitVmax

	// UnitCm represents centimeters. 1cm is 1/2.54 in.
	UnitCm

	// UnitMm represents millimeters. 1mm is 1/10 cm.
	UnitMm

	// UnitQ represents quarter-millimeters. 1q is 1/40 cm.
	UnitQ

	// UnitIn represents inches. 1in is 2.54cm or 96px.
	UnitIn

	// UnitPc represents picas. 1pc is 1/6 in.
	UnitPc

	// UnitPt represents points. 1pt is 1/72 in.
	UnitPt

	// UnitDot represents real display pixels. They are generally only used internally.
	UnitDot
)
const UnitsN Units = 21

UnitsN is the highest valid value for type Units, plus one.

func UnitsValues

func UnitsValues() []Units

UnitsValues returns all possible values for the type Units.

func (Units) Desc

func (i Units) Desc() string

Desc returns the description of the Units value.

func (Units) Int64

func (i Units) Int64() int64

Int64 returns the Units value as an int64.

func (Units) MarshalText

func (i Units) MarshalText() ([]byte, error)

MarshalText implements the encoding.TextMarshaler interface.

func (*Units) SetInt64

func (i *Units) SetInt64(in int64)

SetInt64 sets the Units value from an int64.

func (*Units) SetString

func (i *Units) SetString(s string) error

SetString sets the Units value from its string representation, and returns an error if the string is invalid.

func (Units) String

func (i Units) String() string

String returns the string representation of this Units value.

func (*Units) UnmarshalText

func (i *Units) UnmarshalText(text []byte) error

UnmarshalText implements the encoding.TextUnmarshaler interface.

func (Units) Values

func (i Units) Values() []enums.Enum

Values returns all possible values for the type Units.

type Value

type Value struct {

	// Value is the value in terms of the specified unit
	Value float32 `label:""`

	// Unit is the unit used for the value
	Unit Units `label:""`

	// Dots is the computed value in raw pixels (dots in DPI)
	Dots float32 `view:"-"`

	// Custom is a custom function that returns the dots of the value.
	// If it is non-nil, it overrides all other fields.
	// Otherwise, the standard ToDots with the other fields is used.
	Custom func(uc *Context) float32 `view:"-" json:"-" xml:"-"`
}

Value and units, and converted value into raw pixels (dots in DPI)

func Ch

func Ch(value float32) Value

Ch returns a new ch value. Ch is width of the '0' glyph in the element's font. It falls back to a default of 0.5em.

func Cm

func Cm(value float32) Value

Cm returns a new cm value. Cm is centimeters. 1cm is 1/2.54 in.

func Custom

func Custom(fun func(uc *Context) float32) Value

Custom returns a new custom value that has the dots of the value returned by the given function.

func Dot

func Dot(val float32) Value

Dot returns a new dots value. Dots are actual real display pixels, which are generally only used internally.

func Dp

func Dp(value float32) Value

Dp returns a new dp value. Dp is density-independent pixels. 1dp is 1/160 in.

func Eh

func Eh(value float32) Value

Eh returns a new eh value. Eh is percentage of element height, which is equivalent to CSS % in some contexts.

func Em

func Em(value float32) Value

Em returns a new em value. Em is the font size of the element.

func Ew

func Ew(value float32) Value

Ew returns a new ew value. Ew is percentage of element width, which is equivalent to CSS % in some contexts.

func Ex

func Ex(value float32) Value

Ex returns a new ex value. Ex is x-height of the element's font (size of 'x' glyph). It falls back to a default of 0.5em.

func In

func In(value float32) Value

In returns a new in value. In is inches. 1in is 2.54cm or 96px.

func Mm

func Mm(value float32) Value

Mm returns a new mm value. Mm is millimeters. 1mm is 1/10 cm.

func New

func New(val float32, un Units) Value

New creates a new value with the given unit type

func Pc

func Pc(value float32) Value

Pc returns a new pc value. Pc is picas. 1pc is 1/6 in.

func Ph

func Ph(value float32) Value

Ph returns a new ph value. Ph is percentage of parent height, which is equivalent to CSS % in some contexts.

func Pt

func Pt(value float32) Value

Pt returns a new pt value. Pt is points. 1pt is 1/72 in.

func Pw

func Pw(value float32) Value

Pw returns a new pw value. Pw is percentage of parent width, which is equivalent to CSS % in some contexts.

func Px

func Px(value float32) Value

Px returns a new px value. Px is logical pixels. 1px is 1/96 in. These are not raw display pixels, for which you should use dots.

func Q

func Q(value float32) Value

Q returns a new q value. Q is quarter-millimeters. 1q is 1/40 cm.

func Rem

func Rem(value float32) Value

Rem returns a new rem value. Rem is the font size of the root element, which is always 16dp.

func StringToValue

func StringToValue(str string) Value

StringToValue converts a string to a value representation.

func Vh

func Vh(value float32) Value

Vh returns a new vh value. Vh is percentage of viewport (Scene) height.

func Vmax

func Vmax(value float32) Value

Vmax returns a new vmax value. Vmax is percentage of the larger dimension of the viewport (Scene).

func Vmin

func Vmin(value float32) Value

Vmin returns a new vmin value. Vmin is percentage of the smaller dimension of the viewport (Scene).

func Vw

func Vw(value float32) Value

Vw returns a new vw value. Vw is percentage of viewport (Scene) width.

func Zero

func Zero() Value

Zero returns a new zero (0) value.

func (*Value) Ch

func (v *Value) Ch(value float32)

Ch sets the value in terms of ch. Ch is width of the '0' glyph in the element's font. It falls back to a default of 0.5em.

func (*Value) Cm

func (v *Value) Cm(value float32)

Cm sets the value in terms of cm. Cm is centimeters. 1cm is 1/2.54 in.

func (*Value) Convert

func (v *Value) Convert(to Units, uc *Context) Value

Convert converts value to the given units, given unit context

func (*Value) Dot

func (v *Value) Dot(val float32)

Dot sets the value directly in terms of dots. Dots are actual real display pixels, which are generally only used internally.

func (*Value) Dp

func (v *Value) Dp(value float32)

Dp sets the value in terms of dp. Dp is density-independent pixels. 1dp is 1/160 in.

func (*Value) Eh

func (v *Value) Eh(value float32)

Eh sets the value in terms of eh. Eh is percentage of element height, which is equivalent to CSS % in some contexts.

func (*Value) Em

func (v *Value) Em(value float32)

Em sets the value in terms of em. Em is the font size of the element.

func (*Value) Ew

func (v *Value) Ew(value float32)

Ew sets the value in terms of ew. Ew is percentage of element width, which is equivalent to CSS % in some contexts.

func (*Value) Ex

func (v *Value) Ex(value float32)

Ex sets the value in terms of ex. Ex is x-height of the element's font (size of 'x' glyph). It falls back to a default of 0.5em.

func (*Value) In

func (v *Value) In(value float32)

In sets the value in terms of in. In is inches. 1in is 2.54cm or 96px.

func (*Value) Mm

func (v *Value) Mm(value float32)

Mm sets the value in terms of mm. Mm is millimeters. 1mm is 1/10 cm.

func (*Value) Pc

func (v *Value) Pc(value float32)

Pc sets the value in terms of pc. Pc is picas. 1pc is 1/6 in.

func (*Value) Ph

func (v *Value) Ph(value float32)

Ph sets the value in terms of ph. Ph is percentage of parent height, which is equivalent to CSS % in some contexts.

func (*Value) Pt

func (v *Value) Pt(value float32)

Pt sets the value in terms of pt. Pt is points. 1pt is 1/72 in.

func (*Value) Pw

func (v *Value) Pw(value float32)

Pw sets the value in terms of pw. Pw is percentage of parent width, which is equivalent to CSS % in some contexts.

func (*Value) Px

func (v *Value) Px(value float32)

Px sets the value in terms of px. Px is logical pixels. 1px is 1/96 in. These are not raw display pixels, for which you should use dots.

func (*Value) Q

func (v *Value) Q(value float32)

Q sets the value in terms of q. Q is quarter-millimeters. 1q is 1/40 cm.

func (*Value) Rem

func (v *Value) Rem(value float32)

Rem sets the value in terms of rem. Rem is the font size of the root element, which is always 16dp.

func (*Value) Set

func (v *Value) Set(val float32, un Units)

Set sets the value and units of an existing value

func (*Value) SetAny added in v0.0.5

func (v *Value) SetAny(iface any, key string) error

SetAny sets value from an interface value representation as from map[string]any key is optional property key for error message -- always logs the error

func (*Value) SetCustom

func (v *Value) SetCustom(fun func(uc *Context) float32)

SetCustom sets the value to be a custom value that has the dots of the value returned by the given function.

func (*Value) SetString

func (v *Value) SetString(str string) error

SetString sets value from a string

func (*Value) String

func (v *Value) String() string

String implements the fmt.Stringer interface.

func (*Value) ToDots

func (v *Value) ToDots(uc *Context) float32

ToDots converts value to raw display pixels (dots as in DPI), setting also the Dots field

func (*Value) ToDotsFixed

func (v *Value) ToDotsFixed(uc *Context) fixed.Int26_6

ToDotsFixed converts value to raw display pixels (dots in DPI) in fixed-point 26.6 format for rendering

func (*Value) Vh

func (v *Value) Vh(value float32)

Vh sets the value in terms of vh. Vh is percentage of viewport (Scene) height.

func (*Value) Vmax

func (v *Value) Vmax(value float32)

Vmax sets the value in terms of vmax. Vmax is percentage of the larger dimension of the viewport (Scene).

func (*Value) Vmin

func (v *Value) Vmin(value float32)

Vmin sets the value in terms of vmin. Vmin is percentage of the smaller dimension of the viewport (Scene).

func (*Value) Vw

func (v *Value) Vw(value float32)

Vw sets the value in terms of vw. Vw is percentage of viewport (Scene) width.

func (*Value) Zero

func (v *Value) Zero()

Zero sets the value to zero (0).

type XY

type XY struct {
	// X is the horizontal axis value
	X Value

	// Y is the vertical axis value
	Y Value
}

XY represents unit Value for X and Y dimensions

func (*XY) Dim

func (xy *XY) Dim(d math32.Dims) Value

Dim returns the value for given dimension

func (*XY) Dots

func (xy *XY) Dots() math32.Vector2

Dots returns the dots values as a math32.Vector2 vector

func (*XY) Set

func (xy *XY) Set(v ...Value)

Set sets the X, Y values according to the given values. no values: set to 0. 1 value: set both to that value. 2 values, set X, Y to the two values respectively.

func (*XY) SetDim

func (xy *XY) SetDim(d math32.Dims, val Value)

SetDim sets the value for given dimension

func (*XY) String

func (xy *XY) String() string

String implements the fmt.Stringer interface.

func (*XY) ToDots

func (xy *XY) ToDots(uc *Context)

ToDots converts value to raw display pixels (dots as in DPI), setting also the Dots field

func (*XY) Zero

func (xy *XY) Zero()

Zero sets values to 0

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL