[go: nahoru, domu]

Refactor DrawScope size to be
an instance of Size instead of PxSize

In order to support merging of CanvasScope
and DrawScope, which both have their own
concept of size, migrate DrawScope to
use Size instead of PxSize especially
if we are moving away from the Px
classes anyway.

Bug: 154835459
Test: re-run all tests
Change-Id: I291444edc91043d961d7a05d88301aa7a03435ee
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmark.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmark.kt
index 24f23d8..cd36940 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmark.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmark.kt
@@ -26,10 +26,10 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawBehind
 import androidx.ui.foundation.Box
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.layout.fillMaxSize
-import androidx.ui.unit.toRect
 import org.junit.FixMethodOrder
 import org.junit.Ignore
 import org.junit.Test
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
index f83bd27..ade564a 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
@@ -20,6 +20,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawBehind
 import androidx.ui.foundation.Box
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.layout.Column
@@ -27,7 +28,6 @@
 import androidx.ui.layout.fillMaxHeight
 import androidx.ui.layout.fillMaxSize
 import androidx.ui.layout.fillMaxWidth
-import androidx.ui.unit.toRect
 
 private fun background(paint: Paint) =
     Modifier.drawBehind { drawRect(size.toRect(), paint) }
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
index 5ccb7ab..bc58362 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
@@ -23,6 +23,7 @@
 import androidx.ui.core.drawBehind
 import androidx.ui.foundation.Box
 import androidx.ui.foundation.Text
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.layout.Column
@@ -31,7 +32,6 @@
 import androidx.ui.layout.fillMaxSize
 import androidx.ui.layout.fillMaxWidth
 import androidx.ui.text.TextStyle
-import androidx.ui.unit.toRect
 import kotlin.random.Random
 
 private fun background(paint: Paint) =
diff --git a/ui/ui-core/api/0.1.0-dev11.txt b/ui/ui-core/api/0.1.0-dev11.txt
index f88a992..8826b33 100644
--- a/ui/ui-core/api/0.1.0-dev11.txt
+++ b/ui/ui-core/api/0.1.0-dev11.txt
@@ -259,6 +259,7 @@
   }
 
   public final class ContentScaleKt {
+    method public static float scale-iWWM28M(androidx.ui.core.ContentScale, long srcSize, long dstSize);
   }
 
   public interface CustomEvent {
@@ -352,9 +353,9 @@
 
   public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.unit.PxSize getSize();
+    method public long getSize();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    property public abstract androidx.ui.unit.PxSize size;
+    property public abstract long size;
   }
 
   public final class DrawShadowKt {
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index f88a992..8826b33 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -259,6 +259,7 @@
   }
 
   public final class ContentScaleKt {
+    method public static float scale-iWWM28M(androidx.ui.core.ContentScale, long srcSize, long dstSize);
   }
 
   public interface CustomEvent {
@@ -352,9 +353,9 @@
 
   public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.unit.PxSize getSize();
+    method public long getSize();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    property public abstract androidx.ui.unit.PxSize size;
+    property public abstract long size;
   }
 
   public final class DrawShadowKt {
diff --git a/ui/ui-core/api/public_plus_experimental_0.1.0-dev11.txt b/ui/ui-core/api/public_plus_experimental_0.1.0-dev11.txt
index e8a7553..a5fd02b 100644
--- a/ui/ui-core/api/public_plus_experimental_0.1.0-dev11.txt
+++ b/ui/ui-core/api/public_plus_experimental_0.1.0-dev11.txt
@@ -259,6 +259,7 @@
   }
 
   public final class ContentScaleKt {
+    method public static float scale-iWWM28M(androidx.ui.core.ContentScale, long srcSize, long dstSize);
   }
 
   public interface CustomEvent {
@@ -353,9 +354,9 @@
 
   public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.unit.PxSize getSize();
+    method public long getSize();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    property public abstract androidx.ui.unit.PxSize size;
+    property public abstract long size;
   }
 
   public final class DrawShadowKt {
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index e8a7553..a5fd02b 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -259,6 +259,7 @@
   }
 
   public final class ContentScaleKt {
+    method public static float scale-iWWM28M(androidx.ui.core.ContentScale, long srcSize, long dstSize);
   }
 
   public interface CustomEvent {
@@ -353,9 +354,9 @@
 
   public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.unit.PxSize getSize();
+    method public long getSize();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    property public abstract androidx.ui.unit.PxSize size;
+    property public abstract long size;
   }
 
   public final class DrawShadowKt {
diff --git a/ui/ui-core/api/restricted_0.1.0-dev11.txt b/ui/ui-core/api/restricted_0.1.0-dev11.txt
index a74ec03..8dfbd96 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev11.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev11.txt
@@ -265,6 +265,7 @@
   }
 
   public final class ContentScaleKt {
+    method public static float scale-iWWM28M(androidx.ui.core.ContentScale, long srcSize, long dstSize);
   }
 
   public interface CustomEvent {
@@ -359,9 +360,9 @@
 
   public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.unit.PxSize getSize();
+    method public long getSize();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    property public abstract androidx.ui.unit.PxSize size;
+    property public abstract long size;
   }
 
   public final class DrawShadowKt {
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index a74ec03..8dfbd96 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -265,6 +265,7 @@
   }
 
   public final class ContentScaleKt {
+    method public static float scale-iWWM28M(androidx.ui.core.ContentScale, long srcSize, long dstSize);
   }
 
   public interface CustomEvent {
@@ -359,9 +360,9 @@
 
   public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.unit.PxSize getSize();
+    method public long getSize();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    property public abstract androidx.ui.unit.PxSize size;
+    property public abstract long size;
   }
 
   public final class DrawShadowKt {
diff --git a/ui/ui-core/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt b/ui/ui-core/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt
index 243c434..71d2382 100644
--- a/ui/ui-core/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt
+++ b/ui/ui-core/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt
@@ -33,6 +33,7 @@
 import androidx.ui.foundation.Box
 import androidx.ui.foundation.drawBackground
 import androidx.ui.foundation.drawBorder
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.withSave
 import androidx.ui.layout.Column
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
index 29e09ad..3b911fd 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
@@ -66,6 +66,7 @@
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Rect
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Paint
@@ -85,7 +86,6 @@
 import androidx.ui.unit.max
 import androidx.ui.unit.min
 import androidx.ui.unit.px
-import androidx.ui.unit.toRect
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertNull
@@ -351,7 +351,7 @@
                         paint.color = model.outerColor
                         drawRect(size.toRect(), paint)
                         nativeCanvas.save()
-                        val offset = size.width.value / 3
+                        val offset = size.width / 3
                         // clip drawing to the inner rectangle
                         clipRect(Rect(offset, offset, offset * 2, offset * 2))
                         drawContent()
@@ -359,8 +359,8 @@
                         // Fill bottom half with innerColor -- should be clipped
                         paint.color = model.innerColor
                         val paintRect = Rect(
-                            0f, size.height.value / 2f,
-                            size.width.value, size.height.value
+                            0f, size.height / 2f,
+                            size.width, size.height
                         )
                         drawRect(paintRect, paint)
                         // restore the canvas
@@ -374,8 +374,8 @@
                     val paint = Paint()
                     paint.color = model.innerColor
                     val paintRect = Rect(
-                        0f, 0f, size.width.value,
-                        size.height.value / 2f
+                        0f, 0f, size.width,
+                        size.height / 2f
                     )
                     drawRect(paintRect, paint)
                 }
@@ -1740,8 +1740,8 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 val drawnContent = Modifier.drawBehind {
-                    assertEquals(100.px, size.width)
-                    assertEquals(100.px, size.height)
+                    assertEquals(100.0f, size.width)
+                    assertEquals(100.0f, size.height)
                     latch.countDown()
                 }
                 AtLeastSize(100.ipx, PaddingModifier(10.ipx) + drawnContent) {
@@ -1760,8 +1760,8 @@
                     100.ipx,
                     PaddingModifier(10.ipx).drawLayer()
                         .drawBehind {
-                            assertEquals(100.px, size.width)
-                            assertEquals(100.px, size.height)
+                            assertEquals(100.0f, size.width)
+                            assertEquals(100.0f, size.height)
                             latch.countDown()
                         }
                 ) {
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/ClipTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/ClipTest.kt
index 254af21..3bb889d 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/ClipTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/ClipTest.kt
@@ -372,8 +372,8 @@
                 Rect(
                     -100f,
                     -100f,
-                    size.width.value + 100f,
-                    size.height.value + 100f
+                    size.width + 100f,
+                    size.height + 100f
                 ), Paint().apply {
                     this.color = Color.Cyan
                 })
@@ -450,8 +450,8 @@
                 Rect(
                     -100f,
                     -100f,
-                    size.width.value + 100f,
-                    size.height.value + 100f
+                    size.width + 100f,
+                    size.height + 100f
                 ), Paint().apply {
                     this.color = color
                 })
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/DrawReorderingTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/DrawReorderingTest.kt
index f3d64fb..8ac5098 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/DrawReorderingTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/DrawReorderingTest.kt
@@ -37,6 +37,7 @@
 import androidx.ui.core.setContent
 import androidx.ui.core.zIndex
 import androidx.ui.framework.test.TestActivity
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.unit.IntPx
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/DrawShadowTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/DrawShadowTest.kt
index 6e67052..b9459aa 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/DrawShadowTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/DrawShadowTest.kt
@@ -30,6 +30,7 @@
 import androidx.ui.core.drawShadow
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Paint
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/LayerTouchTransformTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/LayerTouchTransformTest.kt
index 0ba012a..504dfb2 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/LayerTouchTransformTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/LayerTouchTransformTest.kt
@@ -88,8 +88,8 @@
                     Rect.fromLTWH(
                         0.0f,
                         0.0f,
-                        size.width.value,
-                        size.height.value
+                        size.width,
+                        size.height
                     ),
                     Paint().apply { this.color = Color.Gray }
                 )
@@ -122,8 +122,8 @@
                                     Rect.fromLTWH(
                                         0.0f,
                                         0.0f,
-                                        size.width.value,
-                                        size.height.value
+                                        size.width,
+                                        size.height
                                     ),
                                     paint
                                 )
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/ParentDataModifierTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/ParentDataModifierTest.kt
index af21fd7..2e1c0ce 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/ParentDataModifierTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/ParentDataModifierTest.kt
@@ -27,6 +27,7 @@
 import androidx.ui.core.setContent
 import androidx.ui.core.tag
 import androidx.ui.framework.test.TestActivity
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.unit.ipx
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/WithConstraintsTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/WithConstraintsTest.kt
index 5b88e0f..1f9bd7b 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/core/test/WithConstraintsTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/core/test/WithConstraintsTest.kt
@@ -48,6 +48,7 @@
 import androidx.ui.core.paint
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.graphics.vector.VectorPainter
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/graphics/vector/VectorInvalidationTestCase.kt b/ui/ui-core/src/androidTest/java/androidx/ui/graphics/vector/VectorInvalidationTestCase.kt
index e3596cb..385dc86 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/graphics/vector/VectorInvalidationTestCase.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/graphics/vector/VectorInvalidationTestCase.kt
@@ -66,8 +66,8 @@
             Rect.fromLTWH(
                 0.0f,
                 0.0f,
-                size.width.value,
-                size.height.value
+                size.width,
+                size.height
             ),
             Paint().apply { this.color = Color.White }
         )
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/AndroidOwner.kt b/ui/ui-core/src/main/java/androidx/ui/core/AndroidOwner.kt
index ea77081..9e79d3d 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/AndroidOwner.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/AndroidOwner.kt
@@ -66,6 +66,7 @@
 import androidx.ui.core.texttoolbar.TextToolbar
 import androidx.ui.focus.FocusDetailedState.Active
 import androidx.ui.focus.FocusDetailedState.Inactive
+import androidx.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.input.TextInputService
 import androidx.ui.input.TextInputServiceAndroid
@@ -75,6 +76,7 @@
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntPx
 import androidx.ui.unit.IntPxPosition
+import androidx.ui.unit.Px
 import androidx.ui.unit.PxSize
 import androidx.ui.unit.ipx
 import androidx.ui.unit.max
@@ -530,14 +532,15 @@
                     if (onPaintWithChildren != null) {
                         val ownerData = node.ownerData
                         val receiver: DrawScopeImpl
+                        val size = Size(parentSize.width.value, parentSize.height.value)
                         if (ownerData == null) {
-                            receiver = DrawScopeImpl(node, canvas, parentSize, density)
+                            receiver = DrawScopeImpl(node, canvas, size, density)
                             node.ownerData = receiver
                         } else {
                             receiver = ownerData as DrawScopeImpl
                             receiver.childDrawn = false
                             receiver.canvas = canvas
-                            receiver.size = parentSize
+                            receiver.size = size
                             receiver.currentDensity = density
                         }
                         onPaintWithChildren(receiver, canvas, parentSize)
@@ -862,7 +865,7 @@
     private inner class DrawScopeImpl(
         private val drawNode: DrawNode,
         var canvas: Canvas,
-        override var size: PxSize,
+        override var size: Size,
         var currentDensity: Density
     ) : Canvas by canvas, Density by currentDensity, ContentDrawScope {
         internal var childDrawn = false
@@ -875,8 +878,9 @@
                 throw IllegalStateException("Cannot call drawContent() twice within Draw element")
             }
             childDrawn = true
+            val pxSize = PxSize(Px(size.width), Px(size.height))
             drawNode.visitChildren { child ->
-                callDraw(canvas, child, size)
+                callDraw(canvas, child, pxSize)
             }
         }
     }
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/ContentDrawScope.kt b/ui/ui-core/src/main/java/androidx/ui/core/ContentDrawScope.kt
index 7443440..66522ea 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/ContentDrawScope.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/ContentDrawScope.kt
@@ -15,9 +15,9 @@
  */
 package androidx.ui.core
 
+import androidx.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.unit.Density
-import androidx.ui.unit.PxSize
 
 /**
  * Receiver scope for drawing content into a layout.
@@ -28,7 +28,7 @@
     /**
      * The size of layout being drawn in.
      */
-    val size: PxSize
+    val size: Size
 
     /**
      * The layout direction of the layout being drawn in.
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/ContentScale.kt b/ui/ui-core/src/main/java/androidx/ui/core/ContentScale.kt
index aec6953..c9c182d 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/ContentScale.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/ContentScale.kt
@@ -16,6 +16,8 @@
 
 package androidx.ui.core
 
+import androidx.ui.geometry.Size
+import androidx.ui.unit.Px
 import androidx.ui.unit.PxSize
 import kotlin.math.max
 import kotlin.math.min
@@ -23,6 +25,21 @@
 private const val OriginalScale = 1.0f
 
 /**
+ * Convenience method to compute the scale factor from [Size] parameters
+ */
+fun ContentScale.scale(srcSize: Size, dstSize: Size): Float =
+    scale(
+        PxSize(
+            Px(srcSize.width),
+            Px(srcSize.height)
+        ),
+        PxSize(
+            Px(dstSize.width),
+            Px(dstSize.height)
+        )
+    )
+
+/**
  * Represents a rule to apply to scale a source rectangle to be inscribed into a destination
  */
 interface ContentScale {
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/ModifiedDrawNode.kt b/ui/ui-core/src/main/java/androidx/ui/core/ModifiedDrawNode.kt
index 782316a..0b7284f 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/ModifiedDrawNode.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/ModifiedDrawNode.kt
@@ -30,8 +30,6 @@
 import androidx.ui.graphics.PointMode
 import androidx.ui.graphics.Vertices
 import androidx.ui.graphics.vectormath.Matrix4
-import androidx.ui.unit.PxSize
-import androidx.ui.unit.toPxSize
 
 internal class ModifiedDrawNode(
     wrapped: LayoutNodeWrapper,
@@ -62,8 +60,11 @@
         override val fontScale: Float
             get() = layoutNode.requireOwner().density.fontScale
 
-        override val size: PxSize
-            get() = this@ModifiedDrawNode.measuredSize.toPxSize()
+        override val size: Size
+            get() {
+                val pxSize = this@ModifiedDrawNode.measuredSize
+                return Size(pxSize.width.value.toFloat(), pxSize.height.value.toFloat())
+            }
 
         override val nativeCanvas: NativeCanvas
             get() = canvas!!.nativeCanvas
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/PainterModifier.kt b/ui/ui-core/src/main/java/androidx/ui/core/PainterModifier.kt
index df172d9..a0d7bfd 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/PainterModifier.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/PainterModifier.kt
@@ -18,6 +18,7 @@
 
 import androidx.compose.Composable
 import androidx.compose.remember
+import androidx.ui.geometry.Size
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.DefaultAlpha
 import androidx.ui.graphics.painter.Painter
@@ -213,23 +214,24 @@
     override fun ContentDrawScope.draw() {
         val intrinsicSize = painter.intrinsicSize
         val srcWidth = if (intrinsicSize.width.value != Float.POSITIVE_INFINITY) {
-            intrinsicSize.width
+            intrinsicSize.width.value
         } else {
             size.width
         }
 
         val srcHeight = if (intrinsicSize.height.value != Float.POSITIVE_INFINITY) {
-            intrinsicSize.height
+            intrinsicSize.height.value
         } else {
             size.height
         }
 
-        val scale = contentScale.scale(PxSize(srcWidth, srcHeight), size)
+        val srcSize = Size(srcWidth, srcHeight)
+        val scale = contentScale.scale(srcSize, size)
 
         val alignedPosition = alignment.align(
             IntPxSize(
-                IntPx(ceil(size.width.value - (srcWidth.value * scale)).toInt()),
-                IntPx(ceil(size.height.value - (srcHeight.value * scale)).toInt())
+                IntPx(ceil(size.width - (srcWidth * scale)).toInt()),
+                IntPx(ceil(size.height - (srcHeight * scale)).toInt())
             )
         )
 
@@ -242,7 +244,7 @@
 
         painter.draw(
             canvas = this,
-            size = PxSize(srcWidth, srcHeight),
+            size = PxSize(Px(srcSize.width), Px(srcSize.height)),
             alpha = alpha,
             colorFilter = colorFilter,
             rtl = rtl)
diff --git a/ui/ui-core/src/main/java/androidx/ui/graphics/vector/VectorCompose.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/vector/VectorCompose.kt
index 0775460..3d5c8c9 100644
--- a/ui/ui-core/src/main/java/androidx/ui/graphics/vector/VectorCompose.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/vector/VectorCompose.kt
@@ -27,6 +27,8 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.composed
 import androidx.ui.core.drawBehind
+import androidx.ui.core.scale
+import androidx.ui.geometry.Size
 import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Brush
 import androidx.ui.graphics.Color
@@ -38,7 +40,6 @@
 import androidx.ui.unit.IntPx
 import androidx.ui.unit.IntPxSize
 import androidx.ui.unit.Px
-import androidx.ui.unit.PxSize
 import kotlin.math.ceil
 
 /**
@@ -194,12 +195,12 @@
 
     val vectorWidth = defaultWidth.value
     val vectorHeight = defaultHeight.value
-    val vectorPxSize = PxSize(Px(vectorWidth), Px(vectorHeight))
+    val vectorSize = Size(vectorWidth, vectorHeight)
 
     drawBehind {
-        val parentWidth = size.width.value
-        val parentHeight = size.height.value
-        val scale = contentScale.scale(vectorPxSize, size)
+        val parentWidth = size.width
+        val parentHeight = size.height
+        val scale = contentScale.scale(vectorSize, size)
 
         val alignedPosition = alignment.align(
             IntPxSize(
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/ui/foundation/samples/CanvasSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/ui/foundation/samples/CanvasSamples.kt
index b1cd6e5..61fe47c 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/ui/foundation/samples/CanvasSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/ui/foundation/samples/CanvasSamples.kt
@@ -23,6 +23,7 @@
 import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Canvas2
 import androidx.ui.geometry.Offset
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.graphics.painter.CanvasScope
@@ -30,7 +31,6 @@
 import androidx.ui.graphics.painter.inset
 import androidx.ui.layout.preferredSize
 import androidx.ui.unit.dp
-import androidx.ui.unit.toRect
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/CanvasTest.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/CanvasTest.kt
index 0ff7679..da3aa1a 100644
--- a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/CanvasTest.kt
+++ b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/CanvasTest.kt
@@ -25,6 +25,7 @@
 import androidx.ui.core.TestTag
 import androidx.ui.core.onPositioned
 import androidx.ui.foundation.shape.corner.CircleShape
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.graphics.RectangleShape
@@ -38,11 +39,8 @@
 import androidx.ui.test.setContentAndCollectSizes
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntPxSize
-import androidx.ui.unit.center
 import androidx.ui.unit.dp
 import androidx.ui.unit.px
-import androidx.ui.unit.toOffset
-import androidx.ui.unit.toRect
 import com.google.common.truth.Truth
 import org.junit.Assert.assertTrue
 import org.junit.Rule
@@ -120,7 +118,7 @@
                 ) {
                     drawRect(size.toRect(), Paint().apply { color = Color.Red })
                     drawCircle(
-                        size.center().toOffset(),
+                        size.center(),
                         10f,
                         Paint().apply { color = Color.Blue }
                     )
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/DrawBackground.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/DrawBackground.kt
index 5911fb2..f348621 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/DrawBackground.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/DrawBackground.kt
@@ -22,6 +22,8 @@
 import androidx.ui.core.DrawModifier
 import androidx.ui.core.Modifier
 import androidx.ui.core.composed
+import androidx.ui.geometry.Size
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Brush
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
@@ -30,8 +32,8 @@
 import androidx.ui.graphics.Shape
 import androidx.ui.graphics.SolidColor
 import androidx.ui.graphics.drawOutline
+import androidx.ui.unit.Px
 import androidx.ui.unit.PxSize
-import androidx.ui.unit.toRect
 
 /**
  * Returns a [DrawModifier] that draws [shape] with a solid [color], with the size of the
@@ -127,7 +129,7 @@
 ) : DrawModifier {
 
     // naive cache outline calculation if size is the same
-    private var lastSize: PxSize? = null
+    private var lastSize: Size? = null
     private var lastOutline: Outline? = null
 
     override fun ContentDrawScope.draw() {
@@ -136,7 +138,12 @@
             drawRect(size.toRect(), paint)
         } else {
             val localOutline =
-                if (size == lastSize) lastOutline!! else shape.createOutline(size, this)
+                if (size == lastSize) {
+                    lastOutline!!
+                } else {
+                    val pxSize = PxSize(Px(size.width), Px(size.height))
+                    shape.createOutline(pxSize, this)
+                }
             drawOutline(localOutline, paint)
             lastOutline = localOutline
             lastSize = size
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/DrawBorder.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/DrawBorder.kt
index c5cc489..ca35da9c 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/DrawBorder.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/DrawBorder.kt
@@ -40,6 +40,7 @@
 import androidx.ui.graphics.addOutline
 import androidx.ui.unit.Density
 import androidx.ui.unit.Dp
+import androidx.ui.unit.Px
 import androidx.ui.unit.PxSize
 import androidx.ui.unit.minDimension
 import androidx.ui.unit.px
@@ -172,14 +173,14 @@
         val canvas = this
         with(cache) {
             drawContent()
-            modifierSize = size
+            modifierSize = PxSize(Px(size.width), Px(size.height))
             val outline = modifierSizeOutline(density)
             val borderSize =
                 if (borderWidth == Dp.Hairline) 1f else borderWidth.value * density.density
             brush.applyTo(paint)
             paint.strokeWidth = borderSize
 
-            if (borderSize <= 0 || size.minDimension <= 0.px) {
+            if (borderSize <= 0 || size.minDimension <= 0.0f) {
                 return
             } else if (outline is Outline.Rectangle) {
                 drawRoundRectBorder(borderSize, outline.rect, 0f, canvas, paint)
diff --git a/ui/ui-geometry/api/0.1.0-dev11.txt b/ui/ui-geometry/api/0.1.0-dev11.txt
index 390ba95..a89fec4 100644
--- a/ui/ui-geometry/api/0.1.0-dev11.txt
+++ b/ui/ui-geometry/api/0.1.0-dev11.txt
@@ -222,7 +222,7 @@
     method public static long bottomCenter-RIqb49o(long $this, long origin);
     method public static long bottomLeft-RIqb49o(long $this, long origin);
     method public static long bottomRight-RIqb49o(long $this, long origin);
-    method public static long center-RIqb49o(long $this, long origin);
+    method public static long center-RIqb49o(long $this, long origin = Offset.zero);
     method public static long centerLeft-RIqb49o(long $this, long origin);
     method public static long centerRight-RIqb49o(long $this, long origin);
     method public static long constructor-impl(internal long value);
@@ -265,6 +265,7 @@
 
   public final class SizeKt {
     method public static long Size(float width, float height);
+    method public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/current.txt b/ui/ui-geometry/api/current.txt
index 390ba95..a89fec4 100644
--- a/ui/ui-geometry/api/current.txt
+++ b/ui/ui-geometry/api/current.txt
@@ -222,7 +222,7 @@
     method public static long bottomCenter-RIqb49o(long $this, long origin);
     method public static long bottomLeft-RIqb49o(long $this, long origin);
     method public static long bottomRight-RIqb49o(long $this, long origin);
-    method public static long center-RIqb49o(long $this, long origin);
+    method public static long center-RIqb49o(long $this, long origin = Offset.zero);
     method public static long centerLeft-RIqb49o(long $this, long origin);
     method public static long centerRight-RIqb49o(long $this, long origin);
     method public static long constructor-impl(internal long value);
@@ -265,6 +265,7 @@
 
   public final class SizeKt {
     method public static long Size(float width, float height);
+    method public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev11.txt b/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev11.txt
index 390ba95..a89fec4 100644
--- a/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev11.txt
+++ b/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev11.txt
@@ -222,7 +222,7 @@
     method public static long bottomCenter-RIqb49o(long $this, long origin);
     method public static long bottomLeft-RIqb49o(long $this, long origin);
     method public static long bottomRight-RIqb49o(long $this, long origin);
-    method public static long center-RIqb49o(long $this, long origin);
+    method public static long center-RIqb49o(long $this, long origin = Offset.zero);
     method public static long centerLeft-RIqb49o(long $this, long origin);
     method public static long centerRight-RIqb49o(long $this, long origin);
     method public static long constructor-impl(internal long value);
@@ -265,6 +265,7 @@
 
   public final class SizeKt {
     method public static long Size(float width, float height);
+    method public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/public_plus_experimental_current.txt b/ui/ui-geometry/api/public_plus_experimental_current.txt
index 390ba95..a89fec4 100644
--- a/ui/ui-geometry/api/public_plus_experimental_current.txt
+++ b/ui/ui-geometry/api/public_plus_experimental_current.txt
@@ -222,7 +222,7 @@
     method public static long bottomCenter-RIqb49o(long $this, long origin);
     method public static long bottomLeft-RIqb49o(long $this, long origin);
     method public static long bottomRight-RIqb49o(long $this, long origin);
-    method public static long center-RIqb49o(long $this, long origin);
+    method public static long center-RIqb49o(long $this, long origin = Offset.zero);
     method public static long centerLeft-RIqb49o(long $this, long origin);
     method public static long centerRight-RIqb49o(long $this, long origin);
     method public static long constructor-impl(internal long value);
@@ -265,6 +265,7 @@
 
   public final class SizeKt {
     method public static long Size(float width, float height);
+    method public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/restricted_0.1.0-dev11.txt b/ui/ui-geometry/api/restricted_0.1.0-dev11.txt
index 390ba95..a89fec4 100644
--- a/ui/ui-geometry/api/restricted_0.1.0-dev11.txt
+++ b/ui/ui-geometry/api/restricted_0.1.0-dev11.txt
@@ -222,7 +222,7 @@
     method public static long bottomCenter-RIqb49o(long $this, long origin);
     method public static long bottomLeft-RIqb49o(long $this, long origin);
     method public static long bottomRight-RIqb49o(long $this, long origin);
-    method public static long center-RIqb49o(long $this, long origin);
+    method public static long center-RIqb49o(long $this, long origin = Offset.zero);
     method public static long centerLeft-RIqb49o(long $this, long origin);
     method public static long centerRight-RIqb49o(long $this, long origin);
     method public static long constructor-impl(internal long value);
@@ -265,6 +265,7 @@
 
   public final class SizeKt {
     method public static long Size(float width, float height);
+    method public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/restricted_current.txt b/ui/ui-geometry/api/restricted_current.txt
index 390ba95..a89fec4 100644
--- a/ui/ui-geometry/api/restricted_current.txt
+++ b/ui/ui-geometry/api/restricted_current.txt
@@ -222,7 +222,7 @@
     method public static long bottomCenter-RIqb49o(long $this, long origin);
     method public static long bottomLeft-RIqb49o(long $this, long origin);
     method public static long bottomRight-RIqb49o(long $this, long origin);
-    method public static long center-RIqb49o(long $this, long origin);
+    method public static long center-RIqb49o(long $this, long origin = Offset.zero);
     method public static long centerLeft-RIqb49o(long $this, long origin);
     method public static long centerRight-RIqb49o(long $this, long origin);
     method public static long constructor-impl(internal long value);
@@ -265,6 +265,7 @@
 
   public final class SizeKt {
     method public static long Size(float width, float height);
+    method public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
   }
 
 }
diff --git a/ui/ui-geometry/src/main/java/androidx/ui/geometry/Size.kt b/ui/ui-geometry/src/main/java/androidx/ui/geometry/Size.kt
index 2825aad..2c00b6c 100644
--- a/ui/ui-geometry/src/main/java/androidx/ui/geometry/Size.kt
+++ b/ui/ui-geometry/src/main/java/androidx/ui/geometry/Size.kt
@@ -270,7 +270,8 @@
      *
      * See also [Rect.center].
      */
-    fun center(origin: Offset): Offset = Offset(origin.dx + width / 2.0f, origin.dy + height / 2.0f)
+    fun center(origin: Offset = Offset.zero): Offset = Offset(origin.dx + width / 2.0f, origin.dy +
+            height / 2.0f)
 
     /**
      * The offset to the center of the right edge of the rectangle described by the
@@ -325,4 +326,11 @@
     fun getFlipped() = Size(height, width)
 
     override fun toString() = "Size(${width.toStringAsFixed(1)}, ${height.toStringAsFixed(1)})"
+}
+
+/**
+ * Convert a [Size] to a [Rect].
+ */
+fun Size.toRect(): Rect {
+    return Rect(0f, 0f, width, height)
 }
\ No newline at end of file
diff --git a/ui/ui-graphics/api/0.1.0-dev11.txt b/ui/ui-graphics/api/0.1.0-dev11.txt
index 70e10c2..9bf8346 100644
--- a/ui/ui-graphics/api/0.1.0-dev11.txt
+++ b/ui/ui-graphics/api/0.1.0-dev11.txt
@@ -720,7 +720,7 @@
 
   @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
     ctor public CanvasScope();
-    method public void draw(androidx.ui.graphics.Canvas canvas, androidx.ui.unit.PxSize size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
     method public kotlin.Unit? drawArc-_aGsT6c(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawArc-eUb3Eo4(long color, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawCircle-0EImeI8(long color, float radius = size.minDimension / 2.0, long center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
diff --git a/ui/ui-graphics/api/current.txt b/ui/ui-graphics/api/current.txt
index 70e10c2..9bf8346 100644
--- a/ui/ui-graphics/api/current.txt
+++ b/ui/ui-graphics/api/current.txt
@@ -720,7 +720,7 @@
 
   @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
     ctor public CanvasScope();
-    method public void draw(androidx.ui.graphics.Canvas canvas, androidx.ui.unit.PxSize size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
     method public kotlin.Unit? drawArc-_aGsT6c(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawArc-eUb3Eo4(long color, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawCircle-0EImeI8(long color, float radius = size.minDimension / 2.0, long center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
diff --git a/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev11.txt b/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev11.txt
index 70e10c2..9bf8346 100644
--- a/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev11.txt
+++ b/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev11.txt
@@ -720,7 +720,7 @@
 
   @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
     ctor public CanvasScope();
-    method public void draw(androidx.ui.graphics.Canvas canvas, androidx.ui.unit.PxSize size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
     method public kotlin.Unit? drawArc-_aGsT6c(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawArc-eUb3Eo4(long color, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawCircle-0EImeI8(long color, float radius = size.minDimension / 2.0, long center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
diff --git a/ui/ui-graphics/api/public_plus_experimental_current.txt b/ui/ui-graphics/api/public_plus_experimental_current.txt
index 70e10c2..9bf8346 100644
--- a/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -720,7 +720,7 @@
 
   @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
     ctor public CanvasScope();
-    method public void draw(androidx.ui.graphics.Canvas canvas, androidx.ui.unit.PxSize size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
     method public kotlin.Unit? drawArc-_aGsT6c(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawArc-eUb3Eo4(long color, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawCircle-0EImeI8(long color, float radius = size.minDimension / 2.0, long center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
diff --git a/ui/ui-graphics/api/restricted_0.1.0-dev11.txt b/ui/ui-graphics/api/restricted_0.1.0-dev11.txt
index 70e10c2..9bf8346 100644
--- a/ui/ui-graphics/api/restricted_0.1.0-dev11.txt
+++ b/ui/ui-graphics/api/restricted_0.1.0-dev11.txt
@@ -720,7 +720,7 @@
 
   @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
     ctor public CanvasScope();
-    method public void draw(androidx.ui.graphics.Canvas canvas, androidx.ui.unit.PxSize size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
     method public kotlin.Unit? drawArc-_aGsT6c(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawArc-eUb3Eo4(long color, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawCircle-0EImeI8(long color, float radius = size.minDimension / 2.0, long center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
diff --git a/ui/ui-graphics/api/restricted_current.txt b/ui/ui-graphics/api/restricted_current.txt
index 70e10c2..9bf8346 100644
--- a/ui/ui-graphics/api/restricted_current.txt
+++ b/ui/ui-graphics/api/restricted_current.txt
@@ -720,7 +720,7 @@
 
   @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
     ctor public CanvasScope();
-    method public void draw(androidx.ui.graphics.Canvas canvas, androidx.ui.unit.PxSize size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
     method public kotlin.Unit? drawArc-_aGsT6c(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawArc-eUb3Eo4(long color, float startAngle, float sweepAngle, boolean useCenter, long topLeft = Offset.zero, long size = this.size, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public kotlin.Unit? drawCircle-0EImeI8(long color, float radius = size.minDimension / 2.0, long center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
diff --git a/ui/ui-graphics/samples/src/main/java/androidx/ui/graphics/samples/CanvasScopeSample.kt b/ui/ui-graphics/samples/src/main/java/androidx/ui/graphics/samples/CanvasScopeSample.kt
index 0bc2870..d499e2c 100644
--- a/ui/ui-graphics/samples/src/main/java/androidx/ui/graphics/samples/CanvasScopeSample.kt
+++ b/ui/ui-graphics/samples/src/main/java/androidx/ui/graphics/samples/CanvasScopeSample.kt
@@ -18,6 +18,7 @@
 
 import androidx.annotation.Sampled
 import androidx.ui.geometry.Offset
+import androidx.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ImageAsset
@@ -34,10 +35,10 @@
  */
 @Sampled
 fun canvasScopeSample() {
-    val pxSize = PxSize(Px(300.0f), Px(300.0f))
+    val pxSize = Size(300.0f, 300.0f)
     val imageAsset = ImageAsset(
-        pxSize.width.value.toInt(),
-        pxSize.height.value.toInt()
+        pxSize.width.toInt(),
+        pxSize.height.toInt()
     )
 
     // create a Canvas to draw contents into the ImageAsset
@@ -66,10 +67,10 @@
 
 @Sampled
 fun canvasScopeBatchedTransformSample() {
-    val pxSize = PxSize(Px(300.0f), Px(300.0f))
+    val pxSize = Size(300.0f, 300.0f)
     val imageAsset = ImageAsset(
-        pxSize.width.value.toInt(),
-        pxSize.height.value.toInt()
+        pxSize.width.toInt(),
+        pxSize.height.toInt()
     )
 
     // create a Canvas to draw contents into the ImageAsset
diff --git a/ui/ui-graphics/src/androidTest/java/androidx/ui/graphics/painter/CanvasScopeTest.kt b/ui/ui-graphics/src/androidTest/java/androidx/ui/graphics/painter/CanvasScopeTest.kt
index 0128312..9f5456b 100644
--- a/ui/ui-graphics/src/androidTest/java/androidx/ui/graphics/painter/CanvasScopeTest.kt
+++ b/ui/ui-graphics/src/androidTest/java/androidx/ui/graphics/painter/CanvasScopeTest.kt
@@ -41,7 +41,7 @@
 
     private val width: Int = 100
     private val height: Int = 100
-    private val dstSize = PxSize(Px(width.toFloat()), Px(height.toFloat()))
+    private val dstSize = Size(width.toFloat(), height.toFloat())
 
     private fun createTestDstImage(): ImageAsset {
         val dst = ImageAsset(width, height)
@@ -211,12 +211,12 @@
             val bottom = 12.0f
             inset(left, top, right, bottom) {
                 drawRect(color = Color.Red)
-                assertEquals(dstSize.width.value - (left + right), size.width)
-                assertEquals(dstSize.height.value - (top + bottom), size.height)
+                assertEquals(dstSize.width - (left + right), size.width)
+                assertEquals(dstSize.height - (top + bottom), size.height)
             }
 
-            assertEquals(dstSize.width.value, size.width)
-            assertEquals(dstSize.height.value, size.height)
+            assertEquals(dstSize.width, size.width)
+            assertEquals(dstSize.height, size.height)
         }
     }
 
@@ -263,7 +263,7 @@
 
         val width = 200
         val height = 200
-        val size = PxSize(Px(width.toFloat()), Px(height.toFloat()))
+        val size = Size(width.toFloat(), height.toFloat())
         val imageAsset = ImageAsset(width, height)
 
         canvasScope.draw(Canvas(imageAsset), size) {
@@ -292,7 +292,7 @@
 
         val width = 200
         val height = 200
-        val size = PxSize(Px(width.toFloat()), Px(height.toFloat()))
+        val size = Size(width.toFloat(), height.toFloat())
         val imageAsset = ImageAsset(width, height)
 
         canvasScope.draw(Canvas(imageAsset), size) {
@@ -335,7 +335,7 @@
 
         val width = 200
         val height = 200
-        val size = PxSize(Px(width.toFloat()), Px(height.toFloat()))
+        val size = Size(width.toFloat(), height.toFloat())
         val imageAsset = ImageAsset(width, height)
 
         try {
@@ -356,7 +356,7 @@
 
         val width = 200
         val height = 200
-        val size = PxSize(Px(width.toFloat()), Px(height.toFloat()))
+        val size = Size(width.toFloat(), height.toFloat())
         val imageAsset = ImageAsset(width, height)
 
         try {
@@ -377,7 +377,7 @@
 
         val width = 200
         val height = 200
-        val size = PxSize(Px(width.toFloat()), Px(height.toFloat()))
+        val size = Size(width.toFloat(), height.toFloat())
         val imageAsset = ImageAsset(width, height)
 
         canvasScope.draw(Canvas(imageAsset), size) {
@@ -410,7 +410,7 @@
     fun testRotationCenterPivot() {
         val width = 200
         val height = 200
-        val size = PxSize(Px(width.toFloat()), Px(height.toFloat()))
+        val size = Size(width.toFloat(), height.toFloat())
         val imageAsset = ImageAsset(width, height)
         CanvasScope().draw(Canvas(imageAsset), size) {
             drawRect(color = Color.Red)
@@ -440,7 +440,7 @@
     fun testRotationTopLeftPivot() {
         val width = 200
         val height = 200
-        val size = PxSize(Px(width.toFloat()), Px(height.toFloat()))
+        val size = Size(width.toFloat(), height.toFloat())
         val imageAsset = ImageAsset(width, height)
         CanvasScope().draw(Canvas(imageAsset), size) {
             drawRect(color = Color.Red)
@@ -466,7 +466,7 @@
     fun testBatchTransformEquivalent() {
         val width = 200
         val height = 200
-        val size = PxSize(Px(width.toFloat()), Px(height.toFloat()))
+        val size = Size(width.toFloat(), height.toFloat())
         val imageAsset1 = ImageAsset(width, height)
         CanvasScope().draw(Canvas(imageAsset1), size) {
             drawRect(color = Color.Red)
diff --git a/ui/ui-graphics/src/main/java/androidx/ui/graphics/painter/CanvasScope.kt b/ui/ui-graphics/src/main/java/androidx/ui/graphics/painter/CanvasScope.kt
index 436a40a..394f9bc 100644
--- a/ui/ui-graphics/src/main/java/androidx/ui/graphics/painter/CanvasScope.kt
+++ b/ui/ui-graphics/src/main/java/androidx/ui/graphics/painter/CanvasScope.kt
@@ -905,7 +905,7 @@
      * should draw within
      * @param block lambda that is called to issue drawing commands on this [CanvasScope]
      */
-    fun draw(canvas: Canvas, size: PxSize, block: CanvasScope.() -> Unit) {
+    fun draw(canvas: Canvas, size: Size, block: CanvasScope.() -> Unit) {
         val previousSize = this.size
         // Remember the previous canvas in case we are temporarily re-directing our drawing
         // to a separate Layer/RenderNode only to draw that content back into the original Canvas
@@ -913,7 +913,7 @@
         // parameter back to null defensively
         val previousCanvas = this.canvas
         this.canvas = canvas
-        setSize(Size(size.width.value, size.height.value))
+        setSize(size)
         canvas.save()
         this.block()
         canvas.restore()
diff --git a/ui/ui-graphics/src/main/java/androidx/ui/graphics/painter/Painter.kt b/ui/ui-graphics/src/main/java/androidx/ui/graphics/painter/Painter.kt
index 1513854..bb6a153 100644
--- a/ui/ui-graphics/src/main/java/androidx/ui/graphics/painter/Painter.kt
+++ b/ui/ui-graphics/src/main/java/androidx/ui/graphics/painter/Painter.kt
@@ -16,6 +16,7 @@
 package androidx.ui.graphics.painter
 
 import androidx.ui.geometry.Rect
+import androidx.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.DefaultAlpha
@@ -192,16 +193,17 @@
         configureColorFilter(colorFilter)
         configureRtl(rtl)
 
+        val scopeSize = Size(size.width.value, size.height.value)
         if (alpha > 0.0f) {
             if (useLayer) {
                 val layerRect =
                     Rect.fromLTWH(0.0f, 0.0f, size.width.value, size.height.value)
                 // TODO (b/154550724) njawad replace with RenderNode/Layer API usage
                 canvas.withSaveLayer(layerRect, obtainPaint()) {
-                    canvasScope.draw(canvas, size, drawLambda)
+                    canvasScope.draw(canvas, scopeSize, drawLambda)
                 }
             } else {
-                canvasScope.draw(canvas, size, drawLambda)
+                canvasScope.draw(canvas, scopeSize, drawLambda)
             }
         }
     }
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/TextField.kt b/ui/ui-material/src/main/java/androidx/ui/material/TextField.kt
index 8506451..079d0a1 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/TextField.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/TextField.kt
@@ -652,10 +652,10 @@
         val strokeWidth = lineWidth.value * density
         paint.strokeWidth = strokeWidth
         paint.color = color
-        val y = size.height.value - strokeWidth / 2
+        val y = size.height - strokeWidth / 2
         drawLine(
             Offset(0f, y),
-            Offset(size.width.value, y),
+            Offset(size.width, y),
             paint
         )
     }
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/InspectableTests.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/InspectableTests.kt
index e4b242a..af08330 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/InspectableTests.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/InspectableTests.kt
@@ -23,13 +23,13 @@
 import androidx.ui.core.drawBehind
 import androidx.ui.foundation.Box
 import androidx.ui.foundation.drawBackground
+import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.layout.Column
 import androidx.ui.layout.preferredSize
 import androidx.ui.unit.dp
 import androidx.ui.unit.ipx
-import androidx.ui.unit.toRect
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertNotEquals