unit: add PxToDp and PxToSp

PxToDp and PxToSp are useful when you are trying to calculate
text-size or widget size based on dynamically sized container.

Signed-off-by: Egon Elbre <egonelbre@gmail.com>
This commit is contained in:
Egon Elbre
2022-12-28 14:13:15 +02:00
committed by Elias Naur
parent aa2a948b86
commit e9bce02b24
2 changed files with 26 additions and 0 deletions
+10
View File
@@ -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
+16
View File
@@ -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)
}
}
}