~eliasnaur/gio

e9bce02b24f0dc14560189a811e579240a92f0f7 — Egon Elbre 1 year, 4 months ago aa2a948
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>
2 files changed, 26 insertions(+), 0 deletions(-)

M unit/unit.go
M unit/unit_test.go
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)
		}
	}
}