@@ -7,6 +7,7 @@ import android.util.SparseArray
77import android.util.SparseIntArray
88import android.util.TypedValue
99import android.util.TypedValue.*
10+ import android.view.ViewGroup.LayoutParams
1011import android.widget.TextView
1112import java.io.Serializable
1213import java.util.*
@@ -21,12 +22,17 @@ abstract class Size : Serializable {
2122 @JvmStatic
2223 fun from (size : Float , unit : Unit ): Size = SimpleSize (size, unit)
2324
25+ @JvmStatic
26+ fun from (size : Int , unit : Unit ): Size = from(size.toFloat(), unit)
27+
28+ @JvmStatic
29+ fun from (size : Double , unit : Unit ): Size = from(size.toFloat(), unit)
30+
2431 @JvmStatic
2532 fun from (dimensionRes : Int ): Size = DimensionResourceSize (dimensionRes)
2633
2734 @JvmStatic
2835 fun fromAttribute (dimensionAttr : Int ): Size = AttrThemeSize (dimensionAttr)
29-
3036 }
3137
3238 abstract fun getSize (context : Context , unit : Unit ): Float
@@ -50,7 +56,7 @@ abstract class Size : Serializable {
5056 return - 1
5157 }
5258
53- protected fun getFactor (displayMetrics : DisplayMetrics , unit : Unit ): Float {
59+ private fun getFactor (displayMetrics : DisplayMetrics , unit : Unit ): Float {
5460 return displayMetrics.run {
5561 when (unit) {
5662 Unit .PX -> 1.0f
@@ -63,16 +69,9 @@ abstract class Size : Serializable {
6369 }
6470 }
6571
66- protected fun getFactor (displayMetrics : DisplayMetrics , oldUnit : Unit , newUnit : Unit ): Float {
67- if (oldUnit == newUnit) {
68- return 1f
69- }
70- return getFactor(displayMetrics, newUnit) / getFactor(displayMetrics, oldUnit)
71- }
72-
73- protected fun getFactor (context : Context , oldUnit : Unit , newUnit : Unit ): Float {
72+ private fun getFactor (context : Context , oldUnit : Unit , newUnit : Unit ): Float {
7473 return context.resources.displayMetrics.run {
75- getFactor(this , newUnit ) / getFactor(this , oldUnit )
74+ getFactor(this , oldUnit ) / getFactor(this , newUnit )
7675 }
7776 }
7877
@@ -94,9 +93,7 @@ abstract class Size : Serializable {
9493 fun from (typedValueUnit : Int ): Unit? {
9594 return values().firstOrNull { typedValueUnit == it.typedValueUnit }
9695 }
97-
9896 }
99-
10097 }
10198
10299 private class SimpleSize (private val size : Float , private val unit : Unit ) : Size() {
@@ -110,25 +107,20 @@ abstract class Size : Serializable {
110107
111108 private class DimensionResourceSize (private val sizeRes : Int ) : Size() {
112109
113- override fun getSize (context : Context , unit : Unit ) = context.resources.run {
114- getRawSize(context).applyFactor(context, Unit .PX , unit)
115- }
110+ override fun getSize (context : Context , unit : Unit ) = getRawSize(context).applyFactor(context, Unit .PX , unit)
116111
117112 override fun getRawSize (context : Context ) = context.resources.getDimension(sizeRes)
118-
119113 }
120114
121115 class AttrThemeSize (private val attrInt : Int ) : Size() {
122116
123117 companion object {
124118
125119 private val cache = WeakHashMap <Resources .Theme , SparseArray <Float >>()
126-
127120 }
128121
129- override fun getSize (context : Context , unit : Unit ): Float = context.resources. run {
122+ override fun getSize (context : Context , unit : Unit ): Float =
130123 getRawSize(context).applyFactor(context, Unit .PX , unit)
131- }
132124
133125 override fun getRawSize (context : Context ): Float {
134126 val theme = context.theme
@@ -158,11 +150,35 @@ abstract class Size : Serializable {
158150 if (theme.resolveAttribute(attrInt, this , true )) getDimension(metrics) else 0f
159151 }
160152 }
161-
162153 }
163-
164154}
165155
166- fun TextView.setTextSize (size : Size ) {
167- setTextSize(COMPLEX_UNIT_PX , size.getSize(context, Size .Unit .PX ))
168- }
156+ fun TextView.setTextSize (size : Size ) = setTextSize(COMPLEX_UNIT_PX , size.getSize(context, Size .Unit .PX ))
157+
158+
159+ val Int .px
160+ get() = Size .from(toFloat(), Size .Unit .PX )
161+
162+ val Float .px
163+ get() = Size .from(this , Size .Unit .PX )
164+
165+ val Double .px
166+ get() = Size .from(toFloat(), Size .Unit .PX )
167+
168+ val Int .dp
169+ get() = Size .from(toFloat(), Size .Unit .DP )
170+
171+ val Float .dp
172+ get() = Size .from(this , Size .Unit .DP )
173+
174+ val Double .dp
175+ get() = Size .from(toFloat(), Size .Unit .DP )
176+
177+ val Int .sp
178+ get() = Size .from(toFloat(), Size .Unit .SP )
179+
180+ val Float .sp
181+ get() = Size .from(this , Size .Unit .SP )
182+
183+ val Double .sp
184+ get() = Size .from(toFloat(), Size .Unit .SP )
0 commit comments