M unit/unit.go => unit/unit.go +10 -0
@@ 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
M unit/unit_test.go => unit/unit_test.go +16 -0
@@ 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)
+ }
+ }
}