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
- type Context
- func (uc *Context) Ch(val float32) float32
- func (uc *Context) Cm(val float32) float32
- func (uc *Context) Defaults()
- func (uc *Context) Dots(un Units) float32
- func (uc *Context) DotsToPx(val float32) float32
- func (uc *Context) Dp(val float32) float32
- func (uc *Context) Eh(val float32) float32
- func (uc *Context) Em(val float32) float32
- func (uc *Context) Ew(val float32) float32
- func (uc *Context) Ex(val float32) float32
- func (uc *Context) In(val float32) float32
- func (uc *Context) Mm(val float32) float32
- func (uc *Context) Pc(val float32) float32
- func (uc *Context) Ph(val float32) float32
- func (uc *Context) Pt(val float32) float32
- func (uc *Context) Pw(val float32) float32
- func (uc *Context) Px(val float32) float32
- func (uc *Context) PxToDots(val float32) float32
- func (uc *Context) Q(val float32) float32
- func (uc *Context) Rem(val float32) float32
- func (uc *Context) Set(em, ex, ch, rem, vw, vh, ew, eh, pw, ph float32)
- func (uc *Context) SetFont(em, ex, ch, rem float32)
- func (uc *Context) SetSizes(vw, vh, ew, eh, pw, ph float32) bool
- func (uc *Context) String() string
- func (uc *Context) ToDots(val float32, un Units) float32
- func (uc *Context) Vh(val float32) float32
- func (uc *Context) Vmax(val float32) float32
- func (uc *Context) Vmin(val float32) float32
- func (uc *Context) Vw(val float32) float32
- type Units
- func (i Units) Desc() string
- func (i Units) Int64() int64
- func (i Units) IsValid() bool
- func (i Units) MarshalText() ([]byte, error)
- func (i *Units) SetInt64(in int64)
- func (i *Units) SetString(s string) error
- func (i Units) String() string
- func (i *Units) UnmarshalText(text []byte) error
- func (i Units) Values() []enums.Enum
- type Value
- func Ch(val float32) Value
- func Cm(val float32) Value
- func Custom(fun func(uc *Context) float32) Value
- func Dot(val float32) Value
- func Dp(val float32) Value
- func Eh(val float32) Value
- func Em(val float32) Value
- func Ew(val float32) Value
- func Ex(val float32) Value
- func In(val float32) Value
- func Mm(val float32) Value
- func New(val float32, un Units) Value
- func Pc(val float32) Value
- func Ph(val float32) Value
- func Pt(val float32) Value
- func Pw(val float32) Value
- func Px(val float32) Value
- func Q(val float32) Value
- func Rem(val float32) Value
- func StringToValue(str string) Value
- func Vh(val float32) Value
- func Vmax(val float32) Value
- func Vmin(val float32) Value
- func Vw(val float32) Value
- func Zero() Value
- func (v *Value) Ch(val float32)
- func (v *Value) Cm(val float32)
- func (v *Value) Convert(to Units, uc *Context) Value
- func (v *Value) Dot(val float32)
- func (v *Value) Dp(val float32)
- func (v *Value) Eh(val float32)
- func (v *Value) Em(val float32)
- func (v *Value) Ew(val float32)
- func (v *Value) Ex(val float32)
- func (v *Value) In(val float32)
- func (v *Value) Mm(val float32)
- func (v *Value) Pc(val float32)
- func (v *Value) Ph(val float32)
- func (v *Value) Pt(val float32)
- func (v *Value) Pw(val float32)
- func (v *Value) Px(val float32)
- func (v *Value) Q(val float32)
- func (v *Value) Rem(val float32)
- func (v *Value) Set(val float32, un Units)
- func (v *Value) SetCustom(fun func(uc *Context) float32)
- func (v *Value) SetIFace(iface any, key string) error
- func (v *Value) SetString(str string) error
- func (v *Value) String() string
- func (v *Value) ToDots(uc *Context) float32
- func (v *Value) ToDotsFixed(uc *Context) fixed.Int26_6
- func (v *Value) Vh(val float32)
- func (v *Value) Vmax(val float32)
- func (v *Value) Vmin(val float32)
- func (v *Value) Vw(val float32)
- func (v *Value) Zero()
- type XY
Constants ¶
const ( PxPerInch = 96.0 DpPerInch = 160.0 MmPerInch = 25.4 CmPerInch = 2.54 PtPerInch = 72.0 PcPerInch = 6.0 )
standard conversion factors -- Px = DPI-independent pixel instead of 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 ¶ added in v0.0.14
Ch converts the given ch value to dots. Ch is width of the '0' glyph in the element's font -- fallback to 0.5em by default.
func (*Context) Cm ¶ added in v0.0.14
Cm converts the given cm value to dots. Cm is centimeters -- 1cm = 96px/2.54.
func (*Context) Dots ¶
ToDotsFact returns factor needed to convert given unit into raw pixels (dots in DPI)
func (*Context) Dp ¶ added in v0.0.14
Dp converts the given dp value to dots. Dp is density-independent pixels -- 1dp = 1/160th of 1in.
func (*Context) Eh ¶
Eh converts the given eh value to dots. Eh is percentage of element height (equivalent to CSS % in some contexts).
func (*Context) Em ¶ added in v0.0.14
Em converts the given em value to dots. Em is font size of the element -- fallback to 12pt by default.
func (*Context) Ew ¶
Ew converts the given ew value to dots. Ew is percentage of element width (equivalent to CSS % in some contexts).
func (*Context) Ex ¶ added in v0.0.14
Ex converts the given ex value to dots. Ex is x-height of the element's font (size of 'x' glyph) -- fallback to 0.5em by default.
func (*Context) In ¶ added in v0.0.14
In converts the given in value to dots. In is inches -- 1in = 2.54cm = 96px.
func (*Context) Mm ¶ added in v0.0.14
Mm converts the given mm value to dots. Mm is millimeters -- 1mm = 1/10th of cm.
func (*Context) Pc ¶ added in v0.0.14
Pc converts the given pc value to dots. Pc is picas -- 1pc = 1/6th of 1in.
func (*Context) Ph ¶
Ph converts the given ph value to dots. Ph is percentage of parent height (equivalent to CSS % in some contexts).
func (*Context) Pt ¶ added in v0.0.14
Pt converts the given pt value to dots. Pt is points -- 1pt = 1/72th of 1in.
func (*Context) Pw ¶
Pw converts the given pw value to dots. Pw is percentage of parent width (equivalent to CSS % in some contexts).
func (*Context) Px ¶ added in v0.0.14
Px converts the given px value to dots. Px is pixels -- 1px = 1/96th of 1in -- these are NOT raw display pixels.
func (*Context) Q ¶ added in v0.0.14
Q converts the given q value to dots. Q is quarter-millimeters -- 1q = 1/40th of cm.
func (*Context) Rem ¶ added in v0.0.14
Rem converts the given rem value to dots. Rem is font size of the root element -- defaults to 12pt scaled by DPI factor.
func (*Context) SetFont ¶
SetFont sets the context values for fonts: note these are already in raw DPI dots, not points or anything else
func (*Context) SetSizes ¶
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) Vmax ¶ added in v0.0.14
Vmax converts the given vmax value to dots. Vmax is 1% of the viewport's larger dimension.
type Units ¶
type Units int32 //enums:enum -trim-prefix Unit -transform lower
Units is an enum that represents a unit (px, em, etc)
const ( // UnitPx = pixels -- 1px = 1/96th of 1in -- these are NOT raw display pixels UnitPx Units = iota // UnitDp = density-independent pixels -- 1dp = 1/160th of 1in UnitDp // UnitEw = percentage of element width (equivalent to CSS % in some contexts) UnitEw // UnitEh = percentage of element height (equivalent to CSS % in some contexts) UnitEh // UnitPw = percentage of parent width (equivalent to CSS % in some contexts) UnitPw // UnitPh = percentage of parent height (equivalent to CSS % in some contexts) UnitPh // UnitRem = font size of the root element -- defaults to 12pt scaled by DPI factor UnitRem // UnitEm = font size of the element -- fallback to 12pt by default UnitEm // UnitEx = x-height of the element's font (size of 'x' glyph) -- fallback to 0.5em by default UnitEx // UnitCh = width of the '0' glyph in the element's font -- fallback to 0.5em by default UnitCh // UnitVw = 1% of the viewport's width UnitVw // UnitVh = 1% of the viewport's height UnitVh // UnitVmin = 1% of the viewport's smaller dimension UnitVmin // UnitVmax = 1% of the viewport's larger dimension UnitVmax // UnitCm = centimeters -- 1cm = 96px/2.54 UnitCm // UnitMm = millimeters -- 1mm = 1/10th of cm UnitMm // UnitQ = quarter-millimeters -- 1q = 1/40th of cm UnitQ // UnitIn = inches -- 1in = 2.54cm = 96px UnitIn // UnitPc = picas -- 1pc = 1/6th of 1in UnitPc // UnitPt = points -- 1pt = 1/72th of 1in UnitPt // UnitDot = actual real display pixels, which 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) MarshalText ¶
MarshalText implements the encoding.TextMarshaler interface.
func (*Units) SetString ¶
SetString sets the Units value from its string representation, and returns an error if the string is invalid.
func (*Units) UnmarshalText ¶
UnmarshalText implements the encoding.TextUnmarshaler interface.
type Value ¶
type Value struct { // the value in terms of the specified unit Val float32 `label:""` // the unit used for the value Un Units `label:""` // the computed value in raw pixels (dots in DPI) Dots float32 `view:"-"` // custom function that returns the dots of the value; // if non-nil, it overrides all other fields; // if nil, standard ToDots with the other fields is used Custom func(uc *Context) float32 `view:"-"` }
Value and units, and converted value into raw pixels (dots in DPI)
func Ch ¶
Ch returns a new ch value. Ch is width of the '0' glyph in the element's font -- fallback to 0.5em by default.
func Custom ¶ added in v0.0.14
Custom returns a new custom value that has the dots of the value returned by the given function.
func Dot ¶
Dot returns a new dots value. Dots are actual real display pixels, which are generally only used internally.
func Eh ¶
Eh returns a new eh value. Eh is percentage of element height (equivalent to CSS % in some contexts).
func Ew ¶
Ew returns a new ew value. Ew is percentage of element width (equivalent to CSS % in some contexts).
func Ex ¶
Ex returns a new ex value. Ex is x-height of the element's font (size of 'x' glyph) -- fallback to 0.5em by default.
func Ph ¶
Ph returns a new ph value. Ph is percentage of parent height (equivalent to CSS % in some contexts).
func Pw ¶
Pw returns a new pw value. Pw is percentage of parent width (equivalent to CSS % in some contexts).
func Px ¶
Px returns a new px value. Px is pixels -- 1px = 1/96th of 1in -- these are NOT raw display pixels.
func Rem ¶
Rem returns a new rem value. Rem is font size of the root element -- defaults to 12pt scaled by DPI factor.
func StringToValue ¶
StringToValue converts a string to a value representation.
func (*Value) Ch ¶ added in v0.0.14
Ch sets the value in terms of ch. Ch is width of the '0' glyph in the element's font -- fallback to 0.5em by default.
func (*Value) Cm ¶ added in v0.0.14
Cm sets the value in terms of cm. Cm is centimeters -- 1cm = 96px/2.54.
func (*Value) Dot ¶ added in v0.0.19
Dot sets the value directly in terms of dots. Dots are actual real display pixels, which are generally only used internally.
func (*Value) Dp ¶ added in v0.0.14
Dp sets the value in terms of dp. Dp is density-independent pixels -- 1dp = 1/160th of 1in.
func (*Value) Eh ¶ added in v0.0.14
Eh sets the value in terms of eh. Eh is percentage of element height (equivalent to CSS % in some contexts).
func (*Value) Em ¶ added in v0.0.14
Em sets the value in terms of em. Em is font size of the element -- fallback to 12pt by default.
func (*Value) Ew ¶ added in v0.0.14
Ew sets the value in terms of ew. Ew is percentage of element width (equivalent to CSS % in some contexts).
func (*Value) Ex ¶ added in v0.0.14
Ex sets the value in terms of ex. Ex is x-height of the element's font (size of 'x' glyph) -- fallback to 0.5em by default.
func (*Value) In ¶ added in v0.0.14
In sets the value in terms of in. In is inches -- 1in = 2.54cm = 96px.
func (*Value) Mm ¶ added in v0.0.14
Mm sets the value in terms of mm. Mm is millimeters -- 1mm = 1/10th of cm.
func (*Value) Pc ¶ added in v0.0.14
Pc sets the value in terms of pc. Pc is picas -- 1pc = 1/6th of 1in.
func (*Value) Ph ¶ added in v0.0.14
Ph sets the value in terms of ph. Ph is percentage of parent height (equivalent to CSS % in some contexts).
func (*Value) Pt ¶ added in v0.0.14
Pt sets the value in terms of pt. Pt is points -- 1pt = 1/72th of 1in.
func (*Value) Pw ¶ added in v0.0.14
Pw sets the value in terms of pw. Pw is percentage of parent width (equivalent to CSS % in some contexts).
func (*Value) Px ¶ added in v0.0.14
Px sets the value in terms of px. Px is pixels -- 1px = 1/96th of 1in -- these are NOT raw display pixels.
func (*Value) Q ¶ added in v0.0.14
Q sets the value in terms of q. Q is quarter-millimeters -- 1q = 1/40th of cm.
func (*Value) Rem ¶ added in v0.0.14
Rem sets the value in terms of rem. Rem is font size of the root element -- defaults to 12pt scaled by DPI factor.
func (*Value) SetCustom ¶ added in v0.0.14
SetCustom sets the value to be a custom value that has the dots of the value returned by the given function.
func (*Value) SetIFace ¶
SetIFace 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) ToDots ¶
ToDots converts value to raw display pixels (dots as in DPI), setting also the Dots field
func (*Value) ToDotsFixed ¶
ToDotsFixed converts value to raw display pixels (dots in DPI) in fixed-point 26.6 format for rendering
func (*Value) Vh ¶ added in v0.0.14
Vh sets the value in terms of vh. Vh is 1% of the viewport's height.
func (*Value) Vmax ¶ added in v0.0.14
Vmax sets the value in terms of vmax. Vmax is 1% of the viewport's larger dimension.
func (*Value) Vmin ¶ added in v0.0.14
Vmin sets the value in terms of vmin. Vmin is 1% of the viewport's smaller dimension.
type XY ¶ added in v0.0.19
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) Dots ¶ added in v0.0.19
func (xy *XY) Dots() mat32.Vec2
Dots returns the dots values as a mat32.Vec2 vector
func (*XY) Set ¶ added in v0.0.19
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.