diff --git a/unit/unit.go b/unit/unit.go index 58a43903..1cb46d3d 100644 --- a/unit/unit.go +++ b/unit/unit.go @@ -60,6 +60,16 @@ func (c Metric) SpToDp(v Sp) Dp { return Dp(float32(v) * nonZero(c.PxPerSp) / nonZero(c.PxPerDp)) } +// PxToSp converts v px to sp. +func (c Metric) PxToSp(v int) Sp { + return Sp(float32(v) / nonZero(c.PxPerSp)) +} + +// PxToDp converts v px to dp. +func (c Metric) PxToDp(v int) Dp { + return Dp(float32(v) / nonZero(c.PxPerDp)) +} + func nonZero(v float32) float32 { if v == 0. { return 1 diff --git a/unit/unit_test.go b/unit/unit_test.go index 2a9736e9..513ce0e7 100644 --- a/unit/unit_test.go +++ b/unit/unit_test.go @@ -29,4 +29,20 @@ func TestMetric_DpToSp(t *testing.T) { t.Errorf("SpToDp conversion mismatch %v != %v", exp, got) } } + + { + exp := unit.Dp(5) + got := m.PxToDp(m.Dp(5)) + if got != exp { + t.Errorf("PxToDp conversion mismatch %v != %v", exp, got) + } + } + + { + exp := unit.Sp(5) + got := m.PxToSp(m.Sp(5)) + if got != exp { + t.Errorf("PxToSp conversion mismatch %v != %v", exp, got) + } + } }