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) Defaults()
- func (uc *Context) Dots(un Units) float32
- func (uc *Context) DotsToPx(val float32) float32
- func (uc *Context) PxToDots(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)
- func (uc *Context) ToDots(val float32, un Units) 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 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 (v *Value) Convert(to Units, uc *Context) Value
- func (v *Value) Set(val float32, un Units)
- func (v *Value) SetCh(val float32)
- func (v *Value) SetCm(val float32)
- func (v *Value) SetDot(val float32)
- func (v *Value) SetDp(val float32)
- func (v *Value) SetEh(val float32)
- func (v *Value) SetEm(val float32)
- func (v *Value) SetEw(val float32)
- func (v *Value) SetEx(val float32)
- func (v *Value) SetIFace(iface any, key string) error
- func (v *Value) SetIn(val float32)
- func (v *Value) SetMm(val float32)
- func (v *Value) SetPc(val float32)
- func (v *Value) SetPh(val float32)
- func (v *Value) SetPt(val float32)
- func (v *Value) SetPw(val float32)
- func (v *Value) SetPx(val float32)
- func (v *Value) SetQ(val float32)
- func (v *Value) SetRem(val float32)
- func (v *Value) SetString(str string) error
- func (v *Value) SetVh(val float32)
- func (v *Value) SetVmax(val float32)
- func (v *Value) SetVmin(val float32)
- func (v *Value) SetVw(val float32)
- func (v *Value) String() string
- func (v *Value) ToDots(uc *Context) float32
- func (v *Value) ToDotsFixed(uc *Context) fixed.Int26_6
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 point size of the font 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 rem-size of font in points -- root Em size -- typically 12 point FontRem float32 // Vw is viewport width in dots Vw float32 // Vh is viewport height in dots Vh float32 // Ew is width of element in dots Ew float32 // Eh is height of element in dots Eh float32 // Pw is width of parent in dots Pw float32 // Ph is height of parent in dots Ph float32 }
Context specifies everything about the current context necessary for converting the number into specific display-dependent pixels
func (*Context) Dots ¶
ToDotsFact returns factor needed to convert given unit into raw pixels (dots in DPI)
func (*Context) SetFont ¶
SetFont sets the context values for fonts: note these are already in raw DPI dots, not points or anything else
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 -- generally only use 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:"-"` // function to compute dots from units, using arbitrary expressions; if nil, standard ToDots is used DotsFunc func(uc *Context) float32 `view:"-"` }
Value and units, and converted value into raw pixels (dots in DPI)
func StringToValue ¶
StringToValue converts a string to a value representation.
func (*Value) SetCh ¶
SetCh sets the value in terms of UnitCh (width of '0' in the font of the element)
func (*Value) SetDot ¶
SetDot sets the value in terms of [UnitDots] directly (actual raw display pixels)
func (*Value) SetDp ¶
SetDp sets the value in terms of UnitDp (density-independent pixels; 1dp = 1/160 of 1in)
func (*Value) SetEx ¶
SetEx sets the value in terms of UnitEx (height of 'x' in the font of the element)
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) SetPx ¶
SetPx sets the value in terms of UnitPx (1px = 1/96 of 1in; not raw display pixels)
func (*Value) SetVmax ¶
SetVmax sets the value in terms of UnitVmax (percentage of viewport's bigger dimension)
func (*Value) SetVmin ¶
SetVmin sets the value in terms of UnitVmin (percentage of viewport's smaller dimension)