[go: nahoru, domu]

Updated DrawScope and ContentDrawScope
to extend from CanvasScope to access
the declarative graphics framework

Relnote: "Updated higher level
compose APIs that expose a Canvas to
expose CanvasScope instead. This removes
the need for consumers to maintain their
own Paint objects. For consumers that
still require access to a Canvas
they can use the drawCanvas extension
method which provides a callback to issue
drawing commands with the underlying
Canvas."

Bug: 154835459
Test: re-ran compose tests
Change-Id: I80afdf4c0a648962aa6ef1efc05b1d3b65757094
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 cd36940..617c0e8 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
@@ -24,11 +24,9 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.ui.core.Modifier
-import androidx.ui.core.drawBehind
 import androidx.ui.foundation.Box
-import androidx.ui.geometry.toRect
+import androidx.ui.foundation.drawBackground
 import androidx.ui.graphics.Color
-import androidx.ui.graphics.Paint
 import androidx.ui.layout.fillMaxSize
 import org.junit.FixMethodOrder
 import org.junit.Ignore
@@ -154,12 +152,9 @@
     }
 }
 
-private fun background(paint: Paint) =
-    Modifier.drawBehind { drawRect(size.toRect(), paint) }
-
-private val redBackground = background(Paint().also { it.color = Color.Red })
-private val blackBackground = background(Paint().also { it.color = Color.Black })
-private val yellowBackground = background(Paint().also { it.color = Color.Yellow })
+private val redBackground = Modifier.drawBackground(Color.Red)
+private val blackBackground = Modifier.drawBackground(Color.Black)
+private val yellowBackground = Modifier.drawBackground(Color.Yellow)
 private val defaultBackground = yellowBackground
 
 @Model
@@ -173,7 +168,7 @@
             Color.Red -> redBackground
             Color.Black -> blackBackground
             Color.Yellow -> yellowBackground
-            else -> background(Paint().also { it.color = color })
+            else -> Modifier.drawBackground(color)
         }
 }
 
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 ade564a..80a364f 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
@@ -18,23 +18,18 @@
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
-import androidx.ui.core.drawBehind
 import androidx.ui.foundation.Box
-import androidx.ui.geometry.toRect
+import androidx.ui.foundation.drawBackground
 import androidx.ui.graphics.Color
-import androidx.ui.graphics.Paint
 import androidx.ui.layout.Column
 import androidx.ui.layout.Row
 import androidx.ui.layout.fillMaxHeight
 import androidx.ui.layout.fillMaxSize
 import androidx.ui.layout.fillMaxWidth
 
-private fun background(paint: Paint) =
-    Modifier.drawBehind { drawRect(size.toRect(), paint) }
-
-val blueBackground = background(Paint().also { it.color = Color.Blue })
-val magentaBackground = background(Paint().also { it.color = Color.Magenta })
-val blackBackground = background(Paint().also { it.color = Color.Black })
+val blueBackground = Modifier.drawBackground(Color.Blue)
+val magentaBackground = Modifier.drawBackground(Color.Magenta)
+val blackBackground = Modifier.drawBackground(Color.Black)
 
 @Composable
 fun Terminal(style: Int) {
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 bc58362..fcad6e0 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
@@ -20,12 +20,10 @@
 import androidx.compose.Pivotal
 import androidx.compose.key
 import androidx.ui.core.Modifier
-import androidx.ui.core.drawBehind
 import androidx.ui.foundation.Box
 import androidx.ui.foundation.Text
-import androidx.ui.geometry.toRect
+import androidx.ui.foundation.drawBackground
 import androidx.ui.graphics.Color
-import androidx.ui.graphics.Paint
 import androidx.ui.layout.Column
 import androidx.ui.layout.Row
 import androidx.ui.layout.fillMaxHeight
@@ -34,12 +32,9 @@
 import androidx.ui.text.TextStyle
 import kotlin.random.Random
 
-private fun background(paint: Paint) =
-    Modifier.drawBehind { drawRect(size.toRect(), paint) }
-
-val blackBackground = background(Paint().also { it.color = Color.Black })
-val blueBackground = background(Paint().also { it.color = Color.Black })
-val magentaBackground = background(Paint().also { it.color = Color.Magenta })
+val blackBackground = Modifier.drawBackground(Color.Black)
+val blueBackground = Modifier.drawBackground(Color.Blue)
+val magentaBackground = Modifier.drawBackground(Color.Magenta)
 val blackStyle = TextStyle(color = Color.Black)
 val blueStyle = TextStyle(color = Color.Blue)
 val magentaStyle = TextStyle(color = Color.Magenta)
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton1TestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton1TestCase.kt
index 7803ca8..4598241 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton1TestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton1TestCase.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.foundation.Border
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.ContentGravity
 import androidx.ui.foundation.shape.corner.CircleShape
 import androidx.ui.graphics.Color
@@ -42,7 +42,7 @@
         ) {
             val innerSize = getInnerSize().value
             val density = DensityAmbient.current
-            Canvas2(Modifier.preferredSize(innerSize)) {
+            Canvas(Modifier.preferredSize(innerSize)) {
                 drawOutline(
                     CircleShape.createOutline(PxSize(Px(size.width), Px(size.height)), density),
                     Color.Cyan
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton3TestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton3TestCase.kt
index 65fae25..b0db286 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton3TestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton3TestCase.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.painter.Stroke
 import androidx.ui.layout.preferredSize
@@ -30,7 +30,7 @@
     override fun emitContent() {
         val innerSize = getInnerSize()
         val stroke = Stroke()
-        Canvas2(Modifier.preferredSize(48.dp)) {
+        Canvas(Modifier.preferredSize(48.dp)) {
             drawCircle(Color.Black, size.minDimension, style = stroke)
             drawCircle(Color.Black, innerSize.value.value / 2f, center)
         }
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/ScrollerTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/ScrollerTestCase.kt
index 6dd8fb5..3d138e6 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/ScrollerTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/ScrollerTestCase.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.ScrollerPosition
 import androidx.ui.foundation.VerticalScroller
 import androidx.ui.graphics.Color
@@ -70,7 +70,7 @@
 
     @Composable
     fun ColorStripe(red: Int, green: Int, blue: Int) {
-        Canvas2(Modifier.preferredSize(45.dp, 5.dp)) {
+        Canvas(Modifier.preferredSize(45.dp, 5.dp)) {
             drawRect(Color(red = red, green = green, blue = blue))
         }
     }
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBarDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBarDemo.kt
index 15804e9..b5eadde 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBarDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBarDemo.kt
@@ -32,7 +32,7 @@
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
 import androidx.ui.core.gesture.rawDragGestureFilter
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Text
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Size
@@ -67,7 +67,7 @@
                 initState = "start",
                 toState = "end"
             ) { state ->
-                Canvas2(Modifier.preferredSize(600.dp, 400.dp)) {
+                Canvas(Modifier.preferredSize(600.dp, 400.dp)) {
                     val rectSize = size * 0.2f
                     drawRect(Color(1.0f, 0f, 0f, state[alphaKey]), size = rectSize)
 
@@ -123,7 +123,7 @@
 
 @Composable
 fun DrawSeekBar(modifier: Modifier = Modifier, x: Float, clock: ManualAnimationClock) {
-    Canvas2(modifier.fillMaxWidth().preferredHeight(60.dp)) {
+    Canvas(modifier.fillMaxWidth().preferredHeight(60.dp)) {
         val xConstraint = x.coerceIn(0f, size.width)
         clock.clockTimeMillis = (400 * (x / size.width)).toLong().coerceIn(0, 399)
         // draw bar
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrollingDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrollingDemo.kt
index 785608f..970ca10 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrollingDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrollingDemo.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.DragObserver
 import androidx.ui.core.gesture.rawDragGestureFilter
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Text
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Size
@@ -77,7 +77,7 @@
             }
         })
 
-        Canvas2(gesture.fillMaxWidth().preferredHeight(400.dp)) {
+        Canvas(gesture.fillMaxWidth().preferredHeight(400.dp)) {
             val width = size.width / 2f
             val scroll = animScroll.value + width / 2
             itemWidth.value = width
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/GestureBasedAnimationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/GestureBasedAnimationDemo.kt
index e23ff6e..17872f7 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/GestureBasedAnimationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/GestureBasedAnimationDemo.kt
@@ -24,7 +24,7 @@
 import androidx.ui.animation.Transition
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Size
 import androidx.ui.graphics.Color
@@ -72,7 +72,7 @@
 
 @Composable
 private fun ScaledColorRect(modifier: Modifier = Modifier, scale: Float, color: Color) {
-    Canvas2(modifier.fillMaxSize()) {
+    Canvas(modifier.fillMaxSize()) {
         drawRect(
             color,
             topLeft = Offset(center.dx - halfSize * scale, center.dy - halfSize * scale),
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/MultiDimensionalAnimationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/MultiDimensionalAnimationDemo.kt
index dbdd101..5b9d4ee 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/MultiDimensionalAnimationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/MultiDimensionalAnimationDemo.kt
@@ -25,7 +25,7 @@
 import androidx.ui.animation.RectPropKey
 import androidx.ui.animation.Transition
 import androidx.ui.core.Modifier
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Clickable
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Rect
@@ -53,7 +53,7 @@
             },
             toState = currentState.value
         ) { state ->
-            Canvas2(modifier = Modifier.fillMaxSize()) {
+            Canvas(modifier = Modifier.fillMaxSize()) {
                 width.value = size.width
                 height.value = size.height
 
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationDemo.kt
index c4c6297..1eebd5e 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationDemo.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.tapGestureFilter
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Text
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.painter.rotate
@@ -61,7 +61,7 @@
             definition = definition,
             toState = state.value
         ) { state ->
-            Canvas2(Modifier.preferredSize(100.dp)) {
+            Canvas(Modifier.preferredSize(100.dp)) {
                 rotate(state[rotation], 0.0f, 0.0f) {
                     drawRect(Color(0xFF00FF00))
                 }
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrollingDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrollingDemo.kt
index d987ca9..cd7cd01 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrollingDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrollingDemo.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.DragObserver
 import androidx.ui.core.gesture.rawDragGestureFilter
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Text
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Size
@@ -67,7 +67,7 @@
                 })
             }
         })
-        Canvas2(gesture.fillMaxWidth().preferredHeight(400.dp)) {
+        Canvas(gesture.fillMaxWidth().preferredHeight(400.dp)) {
             itemWidth.value = size.width / 2f
             if (isFlinging.value) {
                 // Figure out what position to spring back to
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateAnimationWithInterruptionsDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateAnimationWithInterruptionsDemo.kt
index a7313a0..cc0cdce 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateAnimationWithInterruptionsDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateAnimationWithInterruptionsDemo.kt
@@ -27,7 +27,7 @@
 import androidx.ui.animation.Transition
 import androidx.ui.core.Modifier
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.drawBackground
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Size
@@ -96,7 +96,7 @@
 private fun ColorRectState(state: TransitionState) {
     val color = state[background]
     val scaleY = state[y]
-    Canvas2(Modifier.fillMaxSize().drawBackground(color = color)) {
+    Canvas(Modifier.fillMaxSize().drawBackground(color = color)) {
         drawRect(
             Color(alpha = 255, red = 255, green = 255, blue = 255),
             topLeft = Offset(100f, 0f),
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleDemo.kt
index e6013b5..a0212fd 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleDemo.kt
@@ -30,7 +30,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.layout.fillMaxSize
@@ -68,7 +68,7 @@
 
 @Composable
 private fun RippleRectFromState(modifier: Modifier = Modifier, state: TransitionState) {
-    Canvas2(modifier.fillMaxSize()) {
+    Canvas(modifier.fillMaxSize()) {
         // TODO: file bug for when "down" is not a file level val, it's not memoized correctly
         drawCircle(
             Color(
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismissDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismissDemo.kt
index 41ee964..86cbf9f 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismissDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismissDemo.kt
@@ -30,7 +30,7 @@
 import androidx.ui.core.gesture.DragObserver
 import androidx.ui.core.gesture.rawDragGestureFilter
 import androidx.ui.core.onPositioned
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Text
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Size
@@ -122,7 +122,7 @@
 
     val heightDp = with(DensityAmbient.current) { height.toDp() }
 
-    Canvas2(
+    Canvas(
         modifier.fillMaxWidth()
             .preferredHeight(heightDp)
             .onPositioned { coordinates ->
diff --git a/ui/ui-core/api/0.1.0-dev11.txt b/ui/ui-core/api/0.1.0-dev11.txt
index 8826b33..337681d 100644
--- a/ui/ui-core/api/0.1.0-dev11.txt
+++ b/ui/ui-core/api/0.1.0-dev11.txt
@@ -234,8 +234,9 @@
     method public androidx.ui.unit.PxPosition getPositionChange();
   }
 
-  public interface ContentDrawScope extends androidx.ui.core.DrawScope {
-    method public void drawContent();
+  public abstract class ContentDrawScope extends androidx.ui.core.DrawScope {
+    ctor public ContentDrawScope();
+    method public abstract void drawContent();
   }
 
   public interface ContentScale {
@@ -351,11 +352,10 @@
     property public final kotlin.jvm.functions.Function3<androidx.ui.core.ContentDrawScope,androidx.ui.graphics.Canvas,androidx.ui.unit.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
-  public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public long getSize();
+  public abstract class DrawScope extends androidx.ui.graphics.painter.CanvasScope implements androidx.ui.unit.Density {
+    ctor public DrawScope();
+    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    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 8826b33..337681d 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -234,8 +234,9 @@
     method public androidx.ui.unit.PxPosition getPositionChange();
   }
 
-  public interface ContentDrawScope extends androidx.ui.core.DrawScope {
-    method public void drawContent();
+  public abstract class ContentDrawScope extends androidx.ui.core.DrawScope {
+    ctor public ContentDrawScope();
+    method public abstract void drawContent();
   }
 
   public interface ContentScale {
@@ -351,11 +352,10 @@
     property public final kotlin.jvm.functions.Function3<androidx.ui.core.ContentDrawScope,androidx.ui.graphics.Canvas,androidx.ui.unit.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
-  public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public long getSize();
+  public abstract class DrawScope extends androidx.ui.graphics.painter.CanvasScope implements androidx.ui.unit.Density {
+    ctor public DrawScope();
+    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    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 a5fd02b..7d9bf17 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
@@ -234,8 +234,9 @@
     method public androidx.ui.unit.PxPosition getPositionChange();
   }
 
-  public interface ContentDrawScope extends androidx.ui.core.DrawScope {
-    method public void drawContent();
+  public abstract class ContentDrawScope extends androidx.ui.core.DrawScope {
+    ctor public ContentDrawScope();
+    method public abstract void drawContent();
   }
 
   public interface ContentScale {
@@ -352,11 +353,10 @@
     property public final kotlin.jvm.functions.Function3<androidx.ui.core.ContentDrawScope,androidx.ui.graphics.Canvas,androidx.ui.unit.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
-  public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public long getSize();
+  public abstract class DrawScope extends androidx.ui.graphics.painter.CanvasScope implements androidx.ui.unit.Density {
+    ctor public DrawScope();
+    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    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 a5fd02b..7d9bf17 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -234,8 +234,9 @@
     method public androidx.ui.unit.PxPosition getPositionChange();
   }
 
-  public interface ContentDrawScope extends androidx.ui.core.DrawScope {
-    method public void drawContent();
+  public abstract class ContentDrawScope extends androidx.ui.core.DrawScope {
+    ctor public ContentDrawScope();
+    method public abstract void drawContent();
   }
 
   public interface ContentScale {
@@ -352,11 +353,10 @@
     property public final kotlin.jvm.functions.Function3<androidx.ui.core.ContentDrawScope,androidx.ui.graphics.Canvas,androidx.ui.unit.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
-  public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public long getSize();
+  public abstract class DrawScope extends androidx.ui.graphics.painter.CanvasScope implements androidx.ui.unit.Density {
+    ctor public DrawScope();
+    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    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 8dfbd96..3e4b4ba 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev11.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev11.txt
@@ -240,8 +240,9 @@
     method public androidx.ui.unit.PxPosition getPositionChange();
   }
 
-  public interface ContentDrawScope extends androidx.ui.core.DrawScope {
-    method public void drawContent();
+  public abstract class ContentDrawScope extends androidx.ui.core.DrawScope {
+    ctor public ContentDrawScope();
+    method public abstract void drawContent();
   }
 
   public interface ContentScale {
@@ -358,11 +359,10 @@
     property public final kotlin.jvm.functions.Function3<androidx.ui.core.ContentDrawScope,androidx.ui.graphics.Canvas,androidx.ui.unit.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
-  public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public long getSize();
+  public abstract class DrawScope extends androidx.ui.graphics.painter.CanvasScope implements androidx.ui.unit.Density {
+    ctor public DrawScope();
+    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    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 8dfbd96..3e4b4ba 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -240,8 +240,9 @@
     method public androidx.ui.unit.PxPosition getPositionChange();
   }
 
-  public interface ContentDrawScope extends androidx.ui.core.DrawScope {
-    method public void drawContent();
+  public abstract class ContentDrawScope extends androidx.ui.core.DrawScope {
+    ctor public ContentDrawScope();
+    method public abstract void drawContent();
   }
 
   public interface ContentScale {
@@ -358,11 +359,10 @@
     property public final kotlin.jvm.functions.Function3<androidx.ui.core.ContentDrawScope,androidx.ui.graphics.Canvas,androidx.ui.unit.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
-  public interface DrawScope extends androidx.ui.graphics.Canvas androidx.ui.unit.Density {
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public long getSize();
+  public abstract class DrawScope extends androidx.ui.graphics.painter.CanvasScope implements androidx.ui.unit.Density {
+    ctor public DrawScope();
+    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
-    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/DeclarativeGraphicsDemo.kt b/ui/ui-core/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/DeclarativeGraphicsDemo.kt
index e6a1ca6..dd5e0db 100644
--- a/ui/ui-core/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/DeclarativeGraphicsDemo.kt
+++ b/ui/ui-core/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/DeclarativeGraphicsDemo.kt
@@ -18,7 +18,7 @@
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.painter.inset
 import androidx.ui.graphics.painter.rotate
@@ -35,7 +35,7 @@
      * Demo that shows how to leverage CanvasScope to draw 4 rectangular quadrants
      * inset by a given dimension with a diamond drawn within each of the quadrants
      */
-    Canvas2(modifier =
+    Canvas(modifier =
         Modifier.fillMaxSize()
             .wrapContentSize(Alignment.Center)
             .preferredSize(120.dp, 120.dp)
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 71d2382..f5d3710 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
@@ -35,6 +35,7 @@
 import androidx.ui.foundation.drawBorder
 import androidx.ui.geometry.toRect
 import androidx.ui.graphics.Color
+import androidx.ui.graphics.painter.clipRect
 import androidx.ui.graphics.withSave
 import androidx.ui.layout.Column
 import androidx.ui.layout.fillMaxWidth
@@ -121,9 +122,8 @@
 
 val ClipModifier = object : DrawModifier {
     override fun ContentDrawScope.draw() {
-        withSave {
-            clipRect(size.toRect())
-            drawContent()
+        clipRect {
+            this@draw.drawContent()
         }
     }
 }
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 3b911fd..b86c701 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,13 +66,14 @@
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Rect
-import androidx.ui.geometry.toRect
+import androidx.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
-import androidx.ui.graphics.Paint
-import androidx.ui.graphics.PaintingStyle
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.Shape
+import androidx.ui.graphics.painter.Stroke
+import androidx.ui.graphics.painter.clipRect
+import androidx.ui.graphics.painter.translate
 import androidx.ui.layout.ltr
 import androidx.ui.layout.offset
 import androidx.ui.layout.padding
@@ -85,7 +86,6 @@
 import androidx.ui.unit.ipx
 import androidx.ui.unit.max
 import androidx.ui.unit.min
-import androidx.ui.unit.px
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertNull
@@ -347,37 +347,28 @@
                 val contentDrawing = object : DrawModifier {
                     override fun ContentDrawScope.draw() {
                         // Fill the space with the outerColor
-                        val paint = Paint()
-                        paint.color = model.outerColor
-                        drawRect(size.toRect(), paint)
-                        nativeCanvas.save()
+                        drawRect(model.outerColor)
                         val offset = size.width / 3
                         // clip drawing to the inner rectangle
-                        clipRect(Rect(offset, offset, offset * 2, offset * 2))
-                        drawContent()
+                        clipRect(offset, offset, offset * 2, offset * 2) {
+                            this@draw.drawContent()
 
-                        // Fill bottom half with innerColor -- should be clipped
-                        paint.color = model.innerColor
-                        val paintRect = Rect(
-                            0f, size.height / 2f,
-                            size.width, size.height
-                        )
-                        drawRect(paintRect, paint)
-                        // restore the canvas
-                        nativeCanvas.restore()
+                            // Fill bottom half with innerColor -- should be clipped
+                            drawRect(model.innerColor,
+                                topLeft = Offset(0f, size.height / 2f),
+                                size = Size(size.width, size.height / 2f)
+                            )
+                        }
                     }
                 }
 
                 val paddingContent = Modifier.drawBehind {
                     // Fill top half with innerColor -- should be clipped
                     drawLatch.countDown()
-                    val paint = Paint()
-                    paint.color = model.innerColor
-                    val paintRect = Rect(
-                        0f, 0f, size.width,
-                        size.height / 2f
+                    drawRect(
+                        model.innerColor,
+                        size = Size(size.width, size.height / 2f)
                     )
-                    drawRect(paintRect, paint)
                 }
                 Padding(size = (model.size * 3), modifier = contentDrawing + paddingContent) {
                 }
@@ -465,18 +456,14 @@
             activity.setContent {
                 Layout(
                     modifier = Modifier.drawBehind {
-                        val paint = Paint()
-                        paint.color = model.outerColor
-                        drawRect(size.toRect(), paint)
+                        drawRect(model.outerColor)
                     },
                     children = {
                         AtLeastSize(
                             size = model.size,
                             modifier = Modifier.drawBehind {
                                 drawLatch.countDown()
-                                val paint = Paint()
-                                paint.color = model.innerColor
-                                drawRect(size.toRect(), paint)
+                                drawRect(model.innerColor)
                             }
                         )
                     }, measureBlock = { measurables, constraints, _ ->
@@ -682,9 +669,7 @@
             activity.setContent {
                 AtLeastSize(size = 30.ipx, modifier = Modifier.drawBehind {
                     drawLatch.countDown()
-                    val paint = Paint()
-                    paint.color = outerColor
-                    drawRect(size.toRect(), paint)
+                    drawRect(outerColor)
                 }) {
                     AtLeastSize(size = 30.ipx) {
                         if (drawChild.value) {
@@ -693,9 +678,7 @@
                                     size = 10.ipx,
                                     modifier = Modifier.drawBehind {
                                         drawLatch.countDown()
-                                        val paint = Paint()
-                                        paint.color = innerColor
-                                        drawRect(size.toRect(), paint)
+                                        drawRect(innerColor)
                                     }
                                 )
                             }
@@ -726,9 +709,7 @@
             activity.setContent {
                 AtLeastSize(size = 30.ipx, modifier = Modifier.drawBehind {
                     drawLatch.countDown()
-                    val paint = Paint()
-                    paint.color = outerColor
-                    drawRect(size.toRect(), paint)
+                    drawRect(outerColor)
                 }) {
                     Padding(size = 20.ipx) {
                         if (drawChild.value) {
@@ -736,9 +717,7 @@
                                 size = 20.ipx,
                                 modifier = Modifier.drawBehind {
                                     drawLatch.countDown()
-                                    val paint = Paint()
-                                    paint.color = innerColor
-                                    drawRect(size.toRect(), paint)
+                                    drawRect(innerColor)
                                 }
                             )
                         }
@@ -1977,12 +1956,12 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 val colorModifier = Modifier.drawBehind {
-                    val paint = Paint()
-                    paint.style = PaintingStyle.fill
-                    paint.color = outerColor
-                    drawRect(size.toRect(), paint)
-                    paint.color = innerColor
-                    drawRect(Rect(10f, 10f, 20f, 20f), paint)
+                    drawRect(outerColor)
+                    drawRect(
+                        innerColor,
+                        topLeft = Offset(10f, 10f),
+                        size = Size(10f, 10f)
+                    )
                     drawLatch.countDown()
                 }
                 FixedSize(30.ipx, colorModifier)
@@ -2039,11 +2018,10 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 val drawAndOffset = Modifier.drawWithContent {
-                    val paint = Paint().apply { color = outerColor }
-                    drawRect(size.toRect(), paint)
-                    translate(10f, 10f)
-                    drawContent()
-                    translate(-10f, -10f)
+                    drawRect(outerColor)
+                    translate(10f, 10f) {
+                        this@drawWithContent.drawContent()
+                    }
                 }
                 FixedSize(30.ipx, drawAndOffset) {
                     FixedSize(
@@ -2066,16 +2044,14 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 FixedSize(30.ipx, modifier = Modifier.drawBehind {
-                    drawRect(size.toRect(), Paint().apply { color = green })
+                    drawRect(green)
                 }) {
                     FixedSize(
                         model.offset,
                         modifier = AlignTopLeft.drawLayer()
                             .drawBehind {
                                 drawLatch.countDown()
-                                drawRect(
-                                    size.toRect(),
-                                    Paint().apply { color = blue })
+                                drawRect(blue)
                             }
                     ) {
                     }
@@ -2267,11 +2243,11 @@
                                 clipToOutline = false
                             )
                             .drawBehind {
-                                val paint = Paint().apply {
-                                    color = Color.Blue
-                                    style = PaintingStyle.fill
-                                }
-                                drawRect(Rect(-10f, -10f, 20f, 20f), paint)
+                                drawRect(
+                                    Color.Blue,
+                                    topLeft = Offset(-10f, -10f),
+                                    size = Size(30.0f, 30.0f)
+                                )
                             }
                             .background(Color.Red)
                             .latch(drawLatch)
@@ -2333,13 +2309,11 @@
                     Modifier.drawBehind { outerLatch.countDown() }.drawLayer()
                 ) {
                     FixedSize(10.ipx, Modifier.drawBehind {
-                        val paint = Paint().apply {
-                            color = Color.Blue
-                        }
                         drawLine(
+                            Color.Blue,
                             Offset(model.offset.value.toFloat(), 0f),
                             Offset(0f, model.offset.value.toFloat()),
-                            paint
+                            stroke = Stroke(width = 0.0f) // 0.0f represents hairline stroke
                         )
                         drawLatch.countDown()
                     })
@@ -2420,15 +2394,11 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 Padding(size = model.size, modifier = Modifier.drawBehind {
-                    val paint = Paint()
-                    paint.color = model.outerColor
-                    drawRect(size.toRect(), paint)
+                    drawRect(model.outerColor)
                 }) {
                     AtLeastSize(size = model.size, modifier = Modifier.drawBehind {
                         drawLatch.countDown()
-                        val paint = Paint()
-                        paint.color = model.innerColor
-                        drawRect(size.toRect(), paint)
+                        drawRect(model.innerColor)
                     })
                 }
             }
@@ -2489,21 +2459,16 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 val fillColorModifier = Modifier.drawBehind {
-                    drawRect(size.toRect(), Paint().apply {
-                        this.color = model.innerColor
-                    })
+                    drawRect(model.innerColor)
                     drawLatch.countDown()
                 }
                 val innerDrawWithContentModifier = drawWithContent {
-                    val paint = Paint()
-                    paint.color = model.outerColor
-                    drawRect(size.toRect(), paint)
+                    drawRect(model.outerColor)
                     val start = model.size.value.toFloat()
                     val end = start * 2
-                    nativeCanvas.save()
-                    clipRect(Rect(start, start, end, end))
-                    drawContent()
-                    nativeCanvas.restore()
+                    clipRect(start, start, end, end) {
+                        this@drawWithContent.drawContent()
+                    }
                 }
                 AtLeastSize(size = (model.size * 3), modifier = innerDrawWithContentModifier) {
                     AtLeastSize(size = (model.size * 3), modifier = fillColorModifier)
@@ -2532,9 +2497,7 @@
     @Composable
     private fun fillColor(color: Color, doCountDown: Boolean = true): Modifier =
         Modifier.drawBehind {
-            drawRect(size.toRect(), Paint().apply {
-                this.color = color
-            })
+            drawRect(color)
             if (doCountDown) {
                 drawLatch.countDown()
             }
@@ -2546,9 +2509,7 @@
         isInner: Boolean,
         doCountDown: Boolean = true
     ): Modifier = Modifier.drawBehind {
-        drawRect(size.toRect(), Paint().apply {
-            this.color = if (isInner) squareModel.innerColor else squareModel.outerColor
-        })
+        drawRect(if (isInner) squareModel.innerColor else squareModel.outerColor)
         if (doCountDown) {
             drawLatch.countDown()
         }
@@ -3053,22 +3014,14 @@
 }
 
 fun Modifier.background(color: Color) = drawBehind {
-    val paint = Paint().apply { this.color = color }
-    drawRect(size.toRect(), paint)
+    drawRect(color)
 }
 
 fun Modifier.background(model: SquareModel, isInner: Boolean) = drawBehind {
-    val paint = Paint().apply {
-        this.color = if (isInner) model.innerColor else model.outerColor
-    }
-    drawRect(size.toRect(), paint)
+    drawRect(if (isInner) model.innerColor else model.outerColor)
 }
 
-class CombinedModifier(color: Color) : LayoutModifier, DrawModifier {
-    val paint = Paint().also { paint ->
-        paint.color = color
-        paint.style = PaintingStyle.fill
-    }
+class CombinedModifier(val color: Color) : LayoutModifier, DrawModifier {
 
     override fun MeasureScope.measure(
         measurable: Measurable,
@@ -3085,7 +3038,7 @@
     }
 
     override fun ContentDrawScope.draw() {
-        drawRect(size.toRect(), paint)
+        drawRect(color)
     }
 }
 
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 3bb889d..ba62942 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
@@ -29,9 +29,11 @@
 import androidx.ui.core.drawBehind
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
+import androidx.ui.geometry.Offset
 import androidx.ui.geometry.RRect
 import androidx.ui.geometry.Radius
 import androidx.ui.geometry.Rect
+import androidx.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Paint
@@ -369,14 +371,10 @@
         // is not causing invalidation as the DrawModifier didn't change
         val drawCallback: DrawScope.() -> Unit = {
             drawRect(
-                Rect(
-                    -100f,
-                    -100f,
-                    size.width + 100f,
-                    size.height + 100f
-                ), Paint().apply {
-                    this.color = Color.Cyan
-                })
+                Color.Cyan,
+                topLeft = Offset(-100f, -100f),
+                size = Size(size.width + 200f, size.height + 200f)
+            )
             drawLatch.countDown()
         }
 
@@ -447,14 +445,10 @@
     private fun FillColor(color: Color): Modifier {
         return Modifier.drawBehind {
             drawRect(
-                Rect(
-                    -100f,
-                    -100f,
-                    size.width + 100f,
-                    size.height + 100f
-                ), Paint().apply {
-                    this.color = color
-                })
+                color,
+                topLeft = Offset(-100f, -100f),
+                size = Size(size.width + 200f, size.height + 200f)
+            )
             drawLatch.countDown()
         }
     }
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 8ac5098..5ca90fc 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,12 +37,9 @@
 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
 import androidx.ui.unit.ipx
-import androidx.ui.unit.toRect
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
 import org.junit.Before
@@ -649,9 +646,7 @@
     color: State<Color>
 ) = drawBehind {
     if (color.value != Color.Transparent) {
-        drawRect(size.toRect(), Paint().apply {
-            this.color = color.value
-        })
+        drawRect(color.value)
     }
 }
 
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 b9459aa..82a3b22 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,10 +30,8 @@
 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
 import androidx.ui.graphics.Shape
 import androidx.ui.graphics.luminance
 import androidx.ui.unit.Density
@@ -222,9 +220,7 @@
     }
 
     private fun background(color: Color) = Modifier.drawBehind {
-        drawRect(size.toRect(), Paint().apply {
-            this.color = color
-        })
+        drawRect(color)
         drawLatch.countDown()
     }
 
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 504dfb2..f06dad5 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
@@ -30,9 +30,7 @@
 import androidx.ui.core.drawBehind
 import androidx.ui.core.drawLayer
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
-import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Color
-import androidx.ui.graphics.Paint
 import androidx.ui.graphics.toArgb
 import androidx.ui.layout.fillMaxSize
 import androidx.ui.layout.offset
@@ -84,15 +82,7 @@
             }
 
             val background = Modifier.drawBehind {
-                drawRect(
-                    Rect.fromLTWH(
-                        0.0f,
-                        0.0f,
-                        size.width,
-                        size.height
-                    ),
-                    Paint().apply { this.color = Color.Gray }
-                )
+                drawRect(Color.Gray)
             }
 
             val latchDrawModifier = Modifier.drawBehind { latch?.countDown() }
@@ -117,16 +107,7 @@
                                 transformOrigin =
                                     TransformOrigin(1.0f, 1.0f)
                             ).drawBehind {
-                                val paint = Paint().apply { this.color = color }
-                                drawRect(
-                                    Rect.fromLTWH(
-                                        0.0f,
-                                        0.0f,
-                                        size.width,
-                                        size.height
-                                    ),
-                                    paint
-                                )
+                                drawRect(color)
                             }
                                 .plus(latchDrawModifier)
                                 .preferredSize(boxDp)
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 2e1c0ce..d505357 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,11 +27,8 @@
 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
-import androidx.ui.unit.toRect
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNull
 import org.junit.Assert.assertTrue
@@ -151,9 +148,7 @@
 @Composable
 fun SimpleDrawChild(drawLatch: CountDownLatch) {
     AtLeastSize(size = 10.ipx, modifier = Modifier.drawBehind {
-        val paint = Paint()
-        paint.color = Color(0xFF008000)
-        drawRect(size.toRect(), paint)
+        drawRect(Color(0xFF008000))
         drawLatch.countDown()
     }) {}
 }
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 1f9bd7b..0791514 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,9 +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
 import androidx.ui.layout.Constraints
 import androidx.ui.layout.DpConstraints
@@ -63,7 +61,6 @@
 import androidx.ui.unit.PxPosition
 import androidx.ui.unit.dp
 import androidx.ui.unit.ipx
-import androidx.ui.unit.toRect
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Before
@@ -152,16 +149,12 @@
             activity.setContent {
                 WithConstraints {
                     val outerModifier = Modifier.drawBehind {
-                        val paint = Paint()
-                        paint.color = model.outerColor
-                        drawRect(size.toRect(), paint)
+                        drawRect(model.outerColor)
                     }
                     Layout(children = {
                         val innerModifier = Modifier.drawBehind {
                             drawLatch.countDown()
-                            val paint = Paint()
-                            paint.color = model.innerColor
-                            drawRect(size.toRect(), paint)
+                            drawRect(model.innerColor)
                         }
                         Layout(
                             children = {},
@@ -808,9 +801,7 @@
 
     private fun countdownLatchBackgroundModifier(color: Color) =
         Modifier.drawBehind {
-            val paint = Paint()
-            paint.color = color
-            drawRect(size.toRect(), paint)
+            drawRect(color)
             drawLatch.countDown()
         }
 
@@ -916,9 +907,7 @@
 }
 
 fun backgroundModifier(color: Color) = Modifier.drawBehind {
-    val paint = Paint()
-    paint.color = color
-    drawRect(size.toRect(), paint)
+    drawRect(color)
 }
 
 val infiniteConstraints = object : LayoutModifier {
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 385dc86..a6092c9 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
@@ -25,9 +25,7 @@
 import androidx.ui.core.paint
 import androidx.ui.core.test.AtLeastSize
 import androidx.ui.core.test.R
-import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Color
-import androidx.ui.graphics.Paint
 import androidx.ui.res.loadVectorResource
 import java.util.concurrent.CountDownLatch
 
@@ -62,15 +60,7 @@
     }
 
     val WhiteBackground = Modifier.drawBehind {
-        drawRect(
-            Rect.fromLTWH(
-                0.0f,
-                0.0f,
-                size.width,
-                size.height
-            ),
-            Paint().apply { this.color = Color.White }
-        )
+        drawRect(Color.White)
     }
 
     fun toggle() {
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 9e79d3d..f330578 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
@@ -68,6 +68,7 @@
 import androidx.ui.focus.FocusDetailedState.Inactive
 import androidx.ui.geometry.Size
 import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.painter.drawCanvas
 import androidx.ui.input.TextInputService
 import androidx.ui.input.TextInputServiceAndroid
 import androidx.ui.savedinstancestate.UiSavedStateRegistry
@@ -534,16 +535,17 @@
                         val receiver: DrawScopeImpl
                         val size = Size(parentSize.width.value, parentSize.height.value)
                         if (ownerData == null) {
-                            receiver = DrawScopeImpl(node, canvas, size, density)
+                            receiver = DrawScopeImpl(node, density)
                             node.ownerData = receiver
                         } else {
                             receiver = ownerData as DrawScopeImpl
                             receiver.childDrawn = false
-                            receiver.canvas = canvas
-                            receiver.size = size
                             receiver.currentDensity = density
                         }
-                        onPaintWithChildren(receiver, canvas, parentSize)
+                        receiver.draw(canvas, size) {
+                            onPaintWithChildren(receiver, canvas, parentSize)
+                        }
+
                         if (!receiver.childDrawn) {
                             with(receiver) {
                                 with(density) {
@@ -864,10 +866,8 @@
 
     private inner class DrawScopeImpl(
         private val drawNode: DrawNode,
-        var canvas: Canvas,
-        override var size: Size,
         var currentDensity: Density
-    ) : Canvas by canvas, Density by currentDensity, ContentDrawScope {
+    ) : Density by currentDensity, ContentDrawScope() {
         internal var childDrawn = false
         // Draw composable does not support Rtl and will be removed soon anyway.
         // The only place where Draw is in use is Table which will be updated anyway b/150276337.
@@ -878,9 +878,10 @@
                 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, pxSize)
+            drawCanvas { canvas, pxSize ->
+                drawNode.visitChildren { child ->
+                    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 66522ea..1d3a7b8 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,8 +15,7 @@
  */
 package androidx.ui.core
 
-import androidx.ui.geometry.Size
-import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.painter.CanvasScope
 import androidx.ui.unit.Density
 
 /**
@@ -24,16 +23,12 @@
  * @see Modifier.drawBehind
  * @see androidx.ui.foundation.Canvas
  */
-interface DrawScope : Canvas, Density {
-    /**
-     * The size of layout being drawn in.
-     */
-    val size: Size
+abstract class DrawScope() : CanvasScope(), Density {
 
     /**
      * The layout direction of the layout being drawn in.
      */
-    val layoutDirection: LayoutDirection
+    abstract val layoutDirection: LayoutDirection
 }
 
 /**
@@ -43,9 +38,9 @@
  *
  * @see DrawModifier
  */
-interface ContentDrawScope : DrawScope {
+abstract class ContentDrawScope() : DrawScope() {
     /**
      * Causes child drawing operations to run during the `onPaint` lambda.
      */
-    fun drawContent()
+    abstract fun drawContent()
 }
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 0b7284f..6d555cb 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
@@ -16,42 +16,38 @@
 
 package androidx.ui.core
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
 import androidx.ui.geometry.Size
-import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Canvas
-import androidx.ui.graphics.ClipOp
-import androidx.ui.graphics.ImageAsset
-import androidx.ui.graphics.NativeCanvas
-import androidx.ui.graphics.Paint
-import androidx.ui.graphics.Path
-import androidx.ui.graphics.Picture
-import androidx.ui.graphics.PointMode
-import androidx.ui.graphics.Vertices
-import androidx.ui.graphics.vectormath.Matrix4
+import androidx.ui.graphics.painter.drawCanvas
 
 internal class ModifiedDrawNode(
     wrapped: LayoutNodeWrapper,
     drawModifier: DrawModifier
 ) : DelegatingLayoutNodeWrapper<DrawModifier>(wrapped, drawModifier) {
     private val drawScope = DrawScopeImpl()
-    private var canvas: Canvas? = null
 
     // This is not thread safe
     override fun draw(canvas: Canvas) {
         withPositionTranslation(canvas) {
-            this.canvas = canvas
-            with(drawScope) {
-                with(modifier) { draw() }
+            val size = Size(
+                measuredSize.width.value.toFloat(),
+                measuredSize.height.value.toFloat()
+            )
+            drawScope.draw(canvas, size) {
+                with(drawScope) {
+                    with(modifier) {
+                        draw()
+                    }
+                }
             }
-            this.canvas = null
         }
     }
 
-    inner class DrawScopeImpl() : ContentDrawScope {
+    inner class DrawScopeImpl() : ContentDrawScope() {
         override fun drawContent() {
-            wrapped.draw(canvas!!)
+            drawCanvas { canvas, _ ->
+                wrapped.draw(canvas)
+            }
         }
 
         override val density: Float
@@ -60,108 +56,7 @@
         override val fontScale: Float
             get() = layoutNode.requireOwner().density.fontScale
 
-        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
-
         override val layoutDirection: LayoutDirection
             get() = this@ModifiedDrawNode.measureScope.layoutDirection
-
-        override fun save() = canvas!!.save()
-
-        override fun restore() = canvas!!.restore()
-
-        override fun saveLayer(bounds: Rect, paint: Paint) = canvas!!.saveLayer(bounds, paint)
-
-        override fun translate(dx: Float, dy: Float) = canvas!!.translate(dx, dy)
-
-        override fun scale(sx: Float, sy: Float) = canvas!!.scale(sx, sy)
-
-        override fun rotate(degrees: Float) = canvas!!.rotate(degrees)
-
-        override fun skew(sx: Float, sy: Float) = canvas!!.skew(sx, sy)
-
-        override fun concat(matrix4: Matrix4) = canvas!!.concat(matrix4)
-
-        override fun clipRect(
-            left: Float,
-            top: Float,
-            right: Float,
-            bottom: Float,
-            clipOp: ClipOp
-        ) = canvas!!.clipRect(left, top, right, bottom, clipOp)
-
-        override fun clipPath(path: Path, clipOp: ClipOp) = canvas!!.clipPath(path, clipOp)
-
-        override fun drawLine(p1: Offset, p2: Offset, paint: Paint) =
-            canvas!!.drawLine(p1, p2, paint)
-
-        override fun drawRect(rect: Rect, paint: Paint) = canvas!!.drawRect(rect, paint)
-
-        override fun drawRect(left: Float, top: Float, right: Float, bottom: Float, paint: Paint) =
-            canvas!!.drawRect(left, top, right, bottom, paint)
-
-        override fun drawOval(left: Float, top: Float, right: Float, bottom: Float, paint: Paint) =
-            canvas!!.drawOval(left, top, right, bottom, paint)
-
-        override fun drawArc(
-            left: Float,
-            top: Float,
-            right: Float,
-            bottom: Float,
-            startAngle: Float,
-            sweepAngle: Float,
-            useCenter: Boolean,
-            paint: Paint
-        ) = canvas!!.drawArc(left, top, right, bottom, startAngle, sweepAngle, useCenter, paint)
-
-        override fun drawRoundRect(
-            left: Float,
-            top: Float,
-            right: Float,
-            bottom: Float,
-            radiusX: Float,
-            radiusY: Float,
-            paint: Paint
-        ) = canvas!!.drawRoundRect(left, top, right, bottom, radiusX, radiusY, paint)
-
-        override fun drawOval(rect: Rect, paint: Paint) = canvas!!.drawOval(rect, paint)
-
-        override fun drawCircle(center: Offset, radius: Float, paint: Paint) =
-            canvas!!.drawCircle(center, radius, paint)
-
-        override fun drawPath(path: Path, paint: Paint) = canvas!!.drawPath(path, paint)
-
-        override fun drawImage(image: ImageAsset, topLeftOffset: Offset, paint: Paint) =
-            canvas!!.drawImage(image, topLeftOffset, paint)
-
-        override fun drawImageRect(
-            image: ImageAsset,
-            srcOffset: Offset,
-            srcSize: Size,
-            dstOffset: Offset,
-            dstSize: Size,
-            paint: Paint
-        ) = canvas!!.drawImageRect(image, srcOffset, srcSize, dstOffset, dstSize, paint)
-
-        override fun drawPicture(picture: Picture) = canvas!!.drawPicture(picture)
-
-        override fun drawPoints(pointMode: PointMode, points: List<Offset>, paint: Paint) =
-            canvas!!.drawPoints(pointMode, points, paint)
-
-        override fun drawRawPoints(pointMode: PointMode, points: FloatArray, paint: Paint) =
-            canvas!!.drawRawPoints(pointMode, points, paint)
-
-        override fun drawVertices(vertices: Vertices, blendMode: BlendMode, paint: Paint) =
-            canvas!!.drawVertices(vertices, blendMode, paint)
-
-        override fun enableZ() = canvas!!.enableZ()
-
-        override fun disableZ() = canvas!!.disableZ()
     }
 }
\ No newline at end of file
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 a0d7bfd..1989c15 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
@@ -22,6 +22,8 @@
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.DefaultAlpha
 import androidx.ui.graphics.painter.Painter
+import androidx.ui.graphics.painter.drawCanvas
+import androidx.ui.graphics.painter.withTransform
 import androidx.ui.unit.IntPx
 import androidx.ui.unit.IntPxSize
 import androidx.ui.unit.Px
@@ -238,17 +240,19 @@
         val dx = alignedPosition.x.value.toFloat()
         val dy = alignedPosition.y.value.toFloat()
 
-        save()
-        translate(dx, dy)
-        scale(scale, scale)
-
-        painter.draw(
-            canvas = this,
-            size = PxSize(Px(srcSize.width), Px(srcSize.height)),
-            alpha = alpha,
-            colorFilter = colorFilter,
-            rtl = rtl)
-
-        restore()
+        withTransform({
+            translate(dx, dy)
+            scale(scale, scale, 0.0f, 0.0f)
+        }) {
+            drawCanvas { canvas, _ ->
+                painter.draw(
+                    canvas = canvas,
+                    size = PxSize(Px(srcSize.width), Px(srcSize.height)),
+                    alpha = alpha,
+                    colorFilter = colorFilter,
+                    rtl = rtl
+                )
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/selection/SelectionHandles.kt b/ui/ui-core/src/main/java/androidx/ui/core/selection/SelectionHandles.kt
index 20d4459..85aeed4 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/selection/SelectionHandles.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/selection/SelectionHandles.kt
@@ -27,6 +27,7 @@
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
 import androidx.ui.graphics.Path
+import androidx.ui.graphics.painter.drawCanvas
 import androidx.ui.text.style.TextDirection
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
@@ -40,33 +41,35 @@
     val paint = remember { Paint().also { it.isAntiAlias = true } }
     paint.color = HANDLE_COLOR
     HandleDrawLayout(width = HANDLE_WIDTH, height = HANDLE_HEIGHT) {
-        val path = Path().apply {
-            addRect(
-                Rect(
-                    top = 0f,
-                    bottom = 0.5f * HANDLE_HEIGHT.toPx().value,
-                    left = if (left) {
-                        0.5f * HANDLE_WIDTH.toPx().value
-                    } else {
-                        0f
-                    },
-                    right = if (left) {
-                        HANDLE_WIDTH.toPx().value
-                    } else {
-                        0.5f * HANDLE_WIDTH.toPx().value
-                    }
+        drawCanvas { canvas, _ ->
+            val path = Path().apply {
+                addRect(
+                    Rect(
+                        top = 0f,
+                        bottom = 0.5f * HANDLE_HEIGHT.toPx().value,
+                        left = if (left) {
+                            0.5f * HANDLE_WIDTH.toPx().value
+                        } else {
+                            0f
+                        },
+                        right = if (left) {
+                            HANDLE_WIDTH.toPx().value
+                        } else {
+                            0.5f * HANDLE_WIDTH.toPx().value
+                        }
+                    )
                 )
-            )
-            addOval(
-                Rect(
-                    top = 0f,
-                    bottom = HANDLE_HEIGHT.toPx().value,
-                    left = 0f,
-                    right = HANDLE_WIDTH.toPx().value
+                addOval(
+                    Rect(
+                        top = 0f,
+                        bottom = HANDLE_HEIGHT.toPx().value,
+                        left = 0f,
+                        right = HANDLE_WIDTH.toPx().value
+                    )
                 )
-            )
+            }
+            canvas.drawPath(path, paint)
         }
-        drawPath(path, paint)
     }
 }
 
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 3d5c8c9..027e00b 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
@@ -35,6 +35,8 @@
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.StrokeCap
 import androidx.ui.graphics.StrokeJoin
+import androidx.ui.graphics.painter.drawCanvas
+import androidx.ui.graphics.painter.translate
 import androidx.ui.graphics.withSave
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntPx
@@ -216,9 +218,10 @@
         vector.root.scaleX = (vectorWidth / viewportWidth) * scale
         vector.root.scaleY = (vectorHeight / viewportHeight) * scale
 
-        withSave {
-            translate(translateX, translateY)
-            vector.draw(this, DefaultAlpha, ColorFilter(tintColor, tintBlendMode))
+        translate(translateX, translateY) {
+            drawCanvas { canvas, _ ->
+                vector.draw(canvas, DefaultAlpha, ColorFilter(tintColor, tintBlendMode))
+            }
         }
     }
 }
diff --git a/ui/ui-core/src/main/java/androidx/ui/node/ViewInterop.kt b/ui/ui-core/src/main/java/androidx/ui/node/ViewInterop.kt
index 39db2e8..9a7cad3 100644
--- a/ui/ui-core/src/main/java/androidx/ui/node/ViewInterop.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/node/ViewInterop.kt
@@ -30,6 +30,7 @@
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawBehind
+import androidx.ui.graphics.painter.drawCanvas
 import androidx.ui.unit.IntPx
 import androidx.ui.unit.ipx
 import androidx.ui.unit.isFinite
@@ -100,7 +101,9 @@
     val layoutNode = LayoutNode()
     layoutNode.modifier = Modifier
         .pointerInteropModifier(this)
-        .drawBehind { draw(nativeCanvas) }
+        .drawBehind {
+            drawCanvas { canvas, _ -> draw(canvas.nativeCanvas) }
+        }
     layoutNode. owner ->
         (owner as? AndroidOwner)?.addAndroidView(this, layoutNode)
     }
diff --git a/ui/ui-foundation/api/0.1.0-dev11.txt b/ui/ui-foundation/api/0.1.0-dev11.txt
index ab4cc94..25159bd 100644
--- a/ui/ui-foundation/api/0.1.0-dev11.txt
+++ b/ui/ui-foundation/api/0.1.0-dev11.txt
@@ -25,8 +25,7 @@
   }
 
   public final class CanvasKt {
-    method @Deprecated public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
-    method public static void Canvas2(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
   }
 
   public final class ClickableKt {
diff --git a/ui/ui-foundation/api/current.txt b/ui/ui-foundation/api/current.txt
index ab4cc94..25159bd 100644
--- a/ui/ui-foundation/api/current.txt
+++ b/ui/ui-foundation/api/current.txt
@@ -25,8 +25,7 @@
   }
 
   public final class CanvasKt {
-    method @Deprecated public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
-    method public static void Canvas2(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
   }
 
   public final class ClickableKt {
diff --git a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev11.txt b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev11.txt
index ab4cc94..25159bd 100644
--- a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev11.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev11.txt
@@ -25,8 +25,7 @@
   }
 
   public final class CanvasKt {
-    method @Deprecated public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
-    method public static void Canvas2(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
   }
 
   public final class ClickableKt {
diff --git a/ui/ui-foundation/api/public_plus_experimental_current.txt b/ui/ui-foundation/api/public_plus_experimental_current.txt
index ab4cc94..25159bd 100644
--- a/ui/ui-foundation/api/public_plus_experimental_current.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_current.txt
@@ -25,8 +25,7 @@
   }
 
   public final class CanvasKt {
-    method @Deprecated public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
-    method public static void Canvas2(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
   }
 
   public final class ClickableKt {
diff --git a/ui/ui-foundation/api/restricted_0.1.0-dev11.txt b/ui/ui-foundation/api/restricted_0.1.0-dev11.txt
index ab4cc94..25159bd 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev11.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev11.txt
@@ -25,8 +25,7 @@
   }
 
   public final class CanvasKt {
-    method @Deprecated public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
-    method public static void Canvas2(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
   }
 
   public final class ClickableKt {
diff --git a/ui/ui-foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
index ab4cc94..25159bd 100644
--- a/ui/ui-foundation/api/restricted_current.txt
+++ b/ui/ui-foundation/api/restricted_current.txt
@@ -25,8 +25,7 @@
   }
 
   public final class CanvasKt {
-    method @Deprecated public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
-    method public static void Canvas2(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.painter.CanvasScope,kotlin.Unit> block);
+    method public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.DrawScope,kotlin.Unit> onCanvas);
   }
 
   public final class ClickableKt {
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 61fe47c..0af15da 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
@@ -18,15 +18,10 @@
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
-import androidx.compose.remember
 import androidx.ui.core.Modifier
 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
 import androidx.ui.graphics.painter.Stroke
 import androidx.ui.graphics.painter.inset
 import androidx.ui.layout.preferredSize
@@ -34,24 +29,9 @@
 
 @Sampled
 @Composable
-@Suppress("DEPRECATION")
-@Deprecated("Prefer usage of Canvas2", ReplaceWith("Canvas2Sample"))
 fun CanvasSample() {
-    val paint = remember { Paint().apply { color = Color.Magenta } }
     Canvas(modifier = Modifier.preferredSize(100.dp)) {
-        drawRect(size.toRect(), paint)
-    }
-}
-
-/**
- * Sample showing how to create a composable that supports issuing
- * drawing commands through a [CanvasScope]
- */
-@Sampled
-@Composable
-fun Canvas2Sample() {
-    Canvas2(modifier = Modifier.preferredSize(20.dp)) {
-        drawRect(color = Color.White)
+        drawRect(Color.Magenta)
         inset(10.0f) {
             drawLine(
                 p1 = Offset.zero,
diff --git a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/Canvas2Test.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/Canvas2Test.kt
deleted file mode 100644
index e3738cb..0000000
--- a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/Canvas2Test.kt
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.ui.foundation
-
-import android.os.Build
-import androidx.compose.Composable
-import androidx.test.filters.SdkSuppress
-import androidx.test.filters.LargeTest
-import androidx.ui.core.Alignment
-import androidx.ui.core.DensityAmbient
-import androidx.ui.core.Modifier
-import androidx.ui.core.TestTag
-import androidx.ui.core.onPositioned
-import androidx.ui.foundation.shape.corner.CircleShape
-import androidx.ui.geometry.Offset
-import androidx.ui.graphics.Color
-import androidx.ui.graphics.RectangleShape
-import androidx.ui.graphics.painter.Stroke
-import androidx.ui.graphics.toArgb
-import androidx.ui.layout.Stack
-import androidx.ui.layout.preferredSize
-import androidx.ui.layout.wrapContentSize
-import androidx.ui.semantics.Semantics
-import androidx.ui.test.assertShape
-import androidx.ui.test.captureToBitmap
-import androidx.ui.test.createComposeRule
-import androidx.ui.test.findByTag
-import androidx.ui.test.setContentAndCollectSizes
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntPxSize
-import androidx.ui.unit.dp
-import androidx.ui.unit.px
-import com.google.common.truth.Truth
-import org.junit.Assert
-import org.junit.Assert.assertTrue
-import org.junit.Rule
-import org.junit.Test
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-
-@LargeTest
-@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
-class Canvas2Test {
-
-    val contentTag = "Canvas2Test"
-    val boxWidth = 100
-    val boxHeight = 100
-    val containerSize = boxWidth
-
-    @get:Rule
-    val composeTestRule = createComposeRule()
-
-    @Test
-    fun testCanvas2() {
-        val strokeWidth = 5.0f
-        composeTestRule.setContent {
-            val density = DensityAmbient.current.density
-            val containerSize = (containerSize * 2 / density).dp
-            val minWidth = (boxWidth / density).dp
-            val minHeight = (boxHeight / density).dp
-            Box(modifier = Modifier.preferredSize(containerSize)
-                .drawBackground(Color.White)
-                .wrapContentSize(Alignment.Center)) {
-                TestTag(contentTag) {
-                    Canvas2(modifier = Modifier.preferredSize(minWidth, minHeight)) {
-                        drawLine(
-                            p1 = Offset.zero,
-                            p2 = Offset(size.width, size.height),
-                            color = Color.Red,
-                            stroke = Stroke(width = strokeWidth)
-                        )
-                    }
-                }
-            }
-        }
-
-        val paintBoxColor = Color.Red.toArgb()
-        val containerBgColor = Color.White.toArgb()
-        val strokeOffset = (strokeWidth / 2).toInt() + 3
-        findByTag(contentTag).captureToBitmap().apply {
-            val imageStartX = width / 2 - boxWidth / 2
-            val imageStartY = height / 2 - boxHeight / 2
-
-            // Top left
-            Assert.assertEquals(paintBoxColor, getPixel(imageStartX, imageStartY))
-
-            // Top Left, to the left of the line
-            Assert.assertEquals(containerBgColor,
-                getPixel(imageStartX - strokeOffset, imageStartY))
-
-            // Top Left, to the right of the line
-            Assert.assertEquals(containerBgColor,
-                getPixel(imageStartX + strokeOffset, imageStartY))
-
-            // Bottom right
-            Assert.assertEquals(paintBoxColor, getPixel(imageStartX + boxWidth - 1,
-                imageStartY + boxHeight - 1))
-
-            // Bottom right to the right of the line
-            Assert.assertEquals(containerBgColor,
-                getPixel(imageStartX + boxWidth + strokeOffset,
-                    imageStartY + boxHeight))
-
-            // Bottom right to the left of the line
-            Assert.assertEquals(containerBgColor,
-                getPixel(imageStartX + boxWidth - strokeOffset,
-                    imageStartY + boxHeight))
-
-            // Middle
-            Assert.assertEquals(paintBoxColor, getPixel(imageStartX + boxWidth / 2,
-                imageStartY + boxHeight / 2))
-
-            // Middle to the left of the line
-            Assert.assertEquals(containerBgColor,
-                getPixel(imageStartX + boxWidth / 2 - strokeOffset,
-                    imageStartY + boxHeight / 2))
-
-            // Middle to the right of the line
-            Assert.assertEquals(containerBgColor,
-                getPixel(imageStartX + boxWidth / 2 + strokeOffset,
-                    imageStartY + boxHeight / 2))
-        }
-    }
-
-    @Test
-    fun canvas2_noSize_emptyCanvas() {
-        composeTestRule.setContentAndCollectSizes {
-            Canvas2(modifier = Modifier) {
-                drawRect(Color.Black)
-            }
-        }
-        .assertHeightEqualsTo(0.dp)
-        .assertWidthEqualsTo(0.dp)
-    }
-
-    @Test
-    fun canvas2_exactSizes() {
-        var canvasSize: IntPxSize? = null
-        val latch = CountDownLatch(1)
-        composeTestRule.setContentAndCollectSizes {
-            SemanticParent {
-                Canvas2(
-                    Modifier.preferredSize(100.dp)
-                        .onPositioned { position -> canvasSize = position.size }
-                ) {
-                    drawRect(Color.Red)
-
-                    latch.countDown()
-                }
-            }
-        }
-
-        assertTrue(latch.await(5, TimeUnit.SECONDS))
-
-        with(composeTestRule.density) {
-            Truth.assertThat(canvasSize!!.width.value).isEqualTo(100.dp.toIntPx().value)
-            Truth.assertThat(canvasSize!!.height.value).isEqualTo(100.dp.toIntPx().value)
-        }
-
-        val bitmap = findByTag(contentTag).captureToBitmap()
-        bitmap.assertShape(
-            density = composeTestRule.density,
-            backgroundColor = Color.Red,
-            shapeColor = Color.Red,
-            shape = RectangleShape
-        )
-    }
-
-    @Test
-    fun canvas2_exactSizes_drawCircle() {
-        var canvasSize: IntPxSize? = null
-        val latch = CountDownLatch(1)
-        composeTestRule.setContentAndCollectSizes {
-            SemanticParent {
-                Canvas2(
-                    Modifier.preferredSize(100.dp)
-                        .onPositioned { position -> canvasSize = position.size }
-                ) {
-                    drawRect(Color.Red)
-                    drawCircle(
-                        Color.Blue,
-                        radius = 10.0f
-                    )
-                    latch.countDown()
-                }
-            }
-        }
-
-        assertTrue(latch.await(5, TimeUnit.SECONDS))
-
-        with(composeTestRule.density) {
-            Truth.assertThat(canvasSize!!.width.value).isEqualTo(100.dp.toIntPx().value)
-            Truth.assertThat(canvasSize!!.height.value).isEqualTo(100.dp.toIntPx().value)
-        }
-
-        val bitmap = findByTag(contentTag).captureToBitmap()
-        bitmap.assertShape(
-            density = composeTestRule.density,
-            backgroundColor = Color.Red,
-            shapeColor = Color.Blue,
-            shape = CircleShape,
-            shapeSizeX = 20.px,
-            shapeSizeY = 20.px,
-            shapeOverlapPixelCount = 2.px
-        )
-    }
-
-    @Composable
-    fun SemanticParent(children: @Composable Density.() -> Unit) {
-        Stack {
-            TestTag(tag = contentTag) {
-                Semantics(container = true) {
-                    Box {
-                        DensityAmbient.current.children()
-                    }
-                }
-            }
-        }
-    }
-}
\ No newline at end of file
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 da3aa1a..26dd2de 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
@@ -20,17 +20,20 @@
 import androidx.compose.Composable
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
+import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 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.geometry.Offset
 import androidx.ui.graphics.Color
-import androidx.ui.graphics.Paint
 import androidx.ui.graphics.RectangleShape
+import androidx.ui.graphics.painter.Stroke
+import androidx.ui.graphics.toArgb
 import androidx.ui.layout.Stack
 import androidx.ui.layout.preferredSize
+import androidx.ui.layout.wrapContentSize
 import androidx.ui.semantics.Semantics
 import androidx.ui.test.assertShape
 import androidx.ui.test.captureToBitmap
@@ -42,6 +45,7 @@
 import androidx.ui.unit.dp
 import androidx.ui.unit.px
 import com.google.common.truth.Truth
+import org.junit.Assert
 import org.junit.Assert.assertTrue
 import org.junit.Rule
 import org.junit.Test
@@ -55,17 +59,91 @@
 @RunWith(JUnit4::class)
 class CanvasTest {
 
+    val contentTag = "CanvasTest"
+    val boxWidth = 100
+    val boxHeight = 100
+    val containerSize = boxWidth
+
     @get:Rule
     val composeTestRule = createComposeRule()
 
-    val testTag = "CanvasParent"
+    @Test
+    fun testCanvas() {
+        val strokeWidth = 5.0f
+        composeTestRule.setContent {
+            val density = DensityAmbient.current.density
+            val containerSize = (containerSize * 2 / density).dp
+            val minWidth = (boxWidth / density).dp
+            val minHeight = (boxHeight / density).dp
+            Box(modifier = Modifier.preferredSize(containerSize)
+                .drawBackground(Color.White)
+                .wrapContentSize(Alignment.Center)) {
+                TestTag(contentTag) {
+                    Canvas(modifier = Modifier.preferredSize(minWidth, minHeight)) {
+                        drawLine(
+                            p1 = Offset.zero,
+                            p2 = Offset(size.width, size.height),
+                            color = Color.Red,
+                            stroke = Stroke(width = strokeWidth)
+                        )
+                    }
+                }
+            }
+        }
+
+        val paintBoxColor = Color.Red.toArgb()
+        val containerBgColor = Color.White.toArgb()
+        val strokeOffset = (strokeWidth / 2).toInt() + 3
+        findByTag(contentTag).captureToBitmap().apply {
+            val imageStartX = width / 2 - boxWidth / 2
+            val imageStartY = height / 2 - boxHeight / 2
+
+            // Top left
+            Assert.assertEquals(paintBoxColor, getPixel(imageStartX, imageStartY))
+
+            // Top Left, to the left of the line
+            Assert.assertEquals(containerBgColor,
+                getPixel(imageStartX - strokeOffset, imageStartY))
+
+            // Top Left, to the right of the line
+            Assert.assertEquals(containerBgColor,
+                getPixel(imageStartX + strokeOffset, imageStartY))
+
+            // Bottom right
+            Assert.assertEquals(paintBoxColor, getPixel(imageStartX + boxWidth - 1,
+                imageStartY + boxHeight - 1))
+
+            // Bottom right to the right of the line
+            Assert.assertEquals(containerBgColor,
+                getPixel(imageStartX + boxWidth + strokeOffset,
+                    imageStartY + boxHeight))
+
+            // Bottom right to the left of the line
+            Assert.assertEquals(containerBgColor,
+                getPixel(imageStartX + boxWidth - strokeOffset,
+                    imageStartY + boxHeight))
+
+            // Middle
+            Assert.assertEquals(paintBoxColor, getPixel(imageStartX + boxWidth / 2,
+                imageStartY + boxHeight / 2))
+
+            // Middle to the left of the line
+            Assert.assertEquals(containerBgColor,
+                getPixel(imageStartX + boxWidth / 2 - strokeOffset,
+                    imageStartY + boxHeight / 2))
+
+            // Middle to the right of the line
+            Assert.assertEquals(containerBgColor,
+                getPixel(imageStartX + boxWidth / 2 + strokeOffset,
+                    imageStartY + boxHeight / 2))
+        }
+    }
 
     @Test
-    @Suppress("DEPRECATION")
     fun canvas_noSize_emptyCanvas() {
         composeTestRule.setContentAndCollectSizes {
             Canvas(modifier = Modifier) {
-                drawRect(size.toRect(), Paint())
+                drawRect(Color.Black)
             }
         }
             .assertHeightEqualsTo(0.dp)
@@ -73,7 +151,6 @@
     }
 
     @Test
-    @Suppress("DEPRECATION")
     fun canvas_exactSizes() {
         var canvasSize: IntPxSize? = null
         val latch = CountDownLatch(1)
@@ -83,7 +160,8 @@
                     Modifier.preferredSize(100.dp)
                         .onPositioned { position -> canvasSize = position.size }
                 ) {
-                    drawRect(size.toRect(), Paint().apply { color = Color.Red })
+                    drawRect(Color.Red)
+
                     latch.countDown()
                 }
             }
@@ -96,7 +174,7 @@
             Truth.assertThat(canvasSize!!.height.value).isEqualTo(100.dp.toIntPx().value)
         }
 
-        val bitmap = findByTag(testTag).captureToBitmap()
+        val bitmap = findByTag(contentTag).captureToBitmap()
         bitmap.assertShape(
             density = composeTestRule.density,
             backgroundColor = Color.Red,
@@ -106,7 +184,6 @@
     }
 
     @Test
-    @Suppress("DEPRECATION")
     fun canvas_exactSizes_drawCircle() {
         var canvasSize: IntPxSize? = null
         val latch = CountDownLatch(1)
@@ -116,11 +193,10 @@
                     Modifier.preferredSize(100.dp)
                         .onPositioned { position -> canvasSize = position.size }
                 ) {
-                    drawRect(size.toRect(), Paint().apply { color = Color.Red })
+                    drawRect(Color.Red)
                     drawCircle(
-                        size.center(),
-                        10f,
-                        Paint().apply { color = Color.Blue }
+                        Color.Blue,
+                        radius = 10.0f
                     )
                     latch.countDown()
                 }
@@ -134,7 +210,7 @@
             Truth.assertThat(canvasSize!!.height.value).isEqualTo(100.dp.toIntPx().value)
         }
 
-        val bitmap = findByTag(testTag).captureToBitmap()
+        val bitmap = findByTag(contentTag).captureToBitmap()
         bitmap.assertShape(
             density = composeTestRule.density,
             backgroundColor = Color.Red,
@@ -149,7 +225,7 @@
     @Composable
     fun SemanticParent(children: @Composable Density.() -> Unit) {
         Stack {
-            TestTag(tag = testTag) {
+            TestTag(tag = contentTag) {
                 Semantics(container = true) {
                     Box {
                         DensityAmbient.current.children()
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/Canvas.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/Canvas.kt
index 542449b..82b39c7 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/Canvas.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/Canvas.kt
@@ -17,11 +17,9 @@
 package androidx.ui.foundation
 
 import androidx.compose.Composable
-import androidx.compose.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.DrawScope
 import androidx.ui.core.drawBehind
-import androidx.ui.graphics.painter.CanvasScope
 import androidx.ui.layout.ColumnScope
 import androidx.ui.layout.Spacer
 
@@ -38,33 +36,6 @@
  * called during draw stage, you have no access to composition scope, meaning that [Composable]
  * function invocation inside it will result to runtime exception
  */
-@Deprecated("Favor usage of Canvas2 which leverages the CanvasScope API. CanvasScope" +
-        " introduces a stateless, declarative API surface without the requirement of maintaining" +
-        "a Paint object",
-    ReplaceWith("Canvas2"))
 @Composable
-fun Canvas(modifier: Modifier, onCanvas: DrawScope.() -> Unit) {
-    Spacer(
-        modifier.drawBehind(onCanvas)
-    )
-}
-
-/**
- * Creates a composable that lays out and draws content within a [CanvasScope].
- * The size of this [Canvas2] is purely dictated by the given modifier chain.
- *
- * @sample androidx.ui.foundation.samples.Canvas2Sample
- *
- * @param modifier Modifier used to adjust the layout algorithm or draw decoration content (ex.
- * background)
- * @param block Lambda callback invoked on the created [CanvasScope] to issue drawing commands
- */
-@Composable
-fun Canvas2(modifier: Modifier, block: CanvasScope.() -> Unit) {
-    val canvasScope = remember { CanvasScope() }
-    Spacer(
-        modifier.drawBehind {
-            canvasScope.draw(this, size, block)
-        }
-    )
-}
\ No newline at end of file
+fun Canvas(modifier: Modifier, onCanvas: DrawScope.() -> Unit) =
+    Spacer(modifier.drawBehind(onCanvas))
\ No newline at end of file
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 f348621..b2767ad 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
@@ -32,6 +32,7 @@
 import androidx.ui.graphics.Shape
 import androidx.ui.graphics.SolidColor
 import androidx.ui.graphics.drawOutline
+import androidx.ui.graphics.painter.drawCanvas
 import androidx.ui.unit.Px
 import androidx.ui.unit.PxSize
 
@@ -133,21 +134,23 @@
     private var lastOutline: Outline? = null
 
     override fun ContentDrawScope.draw() {
-        if (shape === RectangleShape) {
-            // shortcut to avoid Outline calculation and allocation
-            drawRect(size.toRect(), paint)
-        } else {
-            val localOutline =
-                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
+        drawCanvas { canvas, _ ->
+            if (shape === RectangleShape) {
+                // shortcut to avoid Outline calculation and allocation
+                canvas.drawRect(size.toRect(), paint)
+            } else {
+                val localOutline =
+                    if (size == lastSize) {
+                        lastOutline!!
+                    } else {
+                        val pxSize = PxSize(Px(size.width), Px(size.height))
+                        shape.createOutline(pxSize, this)
+                    }
+                canvas.drawOutline(localOutline, paint)
+                lastOutline = localOutline
+                lastSize = size
+            }
+            drawContent()
         }
-        drawContent()
     }
 }
\ No newline at end of file
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 ca35da9c..77c5a40 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
@@ -38,6 +38,7 @@
 import androidx.ui.graphics.Shape
 import androidx.ui.graphics.SolidColor
 import androidx.ui.graphics.addOutline
+import androidx.ui.graphics.painter.drawCanvas
 import androidx.ui.unit.Density
 import androidx.ui.unit.Dp
 import androidx.ui.unit.Px
@@ -170,27 +171,34 @@
 
     override fun ContentDrawScope.draw() {
         val density = this
-        val canvas = this
-        with(cache) {
-            drawContent()
-            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
+        drawCanvas { canvas, _ ->
+            with(cache) {
+                drawContent()
+                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.0f) {
-                return
-            } else if (outline is Outline.Rectangle) {
-                drawRoundRectBorder(borderSize, outline.rect, 0f, canvas, paint)
-            } else if (outline is Outline.Rounded && outline.rrect.isSimple) {
-                val radius = outline.rrect.bottomLeftRadiusY
-                drawRoundRectBorder(borderSize, outline.rrect.outerRect(), radius, canvas, paint)
-            } else {
-                val path = borderPath(density, borderSize)
-                paint.style = PaintingStyle.fill
-                drawPath(path, paint)
+                if (borderSize <= 0 || size.minDimension <= 0.0f) {
+                    return
+                } else if (outline is Outline.Rectangle) {
+                    drawRoundRectBorder(borderSize, outline.rect, 0f, canvas, paint)
+                } else if (outline is Outline.Rounded && outline.rrect.isSimple) {
+                    val radius = outline.rrect.bottomLeftRadiusY
+                    drawRoundRectBorder(
+                        borderSize,
+                        outline.rrect.outerRect(),
+                        radius,
+                        canvas,
+                        paint
+                    )
+                } else {
+                    val path = borderPath(density, borderSize)
+                    paint.style = PaintingStyle.fill
+                    canvas.drawPath(path, paint)
+                }
             }
         }
     }
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/TextField.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/TextField.kt
index 2fc2136..6df23505 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/TextField.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/TextField.kt
@@ -30,6 +30,7 @@
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
+import androidx.ui.graphics.painter.Stroke
 import androidx.ui.graphics.useOrElse
 import androidx.ui.input.EditorValue
 import androidx.ui.input.ImeAction
@@ -217,9 +218,7 @@
     cursorState: CursorState,
     editorValue: EditorValue,
     transformedText: TransformedText
-): Modifier = composed {
-    val paint = remember { Paint() }
-
+): Modifier =
     drawBehind {
         if (cursorState.focused && editorValue.selection.collapsed) {
             val cursorWidth = CursorThickness.value * density
@@ -234,15 +233,12 @@
             val cursorX = (cursorRect.left + cursorRect.right) / 2
 
             drawLine(
+                cursorColor,
                 Offset(cursorX, cursorRect.top),
                 Offset(cursorX, cursorRect.bottom),
-                paint.apply {
-                    this.color = cursorColor
-                    this.strokeWidth = cursorWidth
-                }
+                stroke = Stroke(cursorWidth)
             )
         }
     }
-}
 
 private val DefaultTextFieldWidth = 280.dp
\ 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 9bf8346..824c17b 100644
--- a/ui/ui-graphics/api/0.1.0-dev11.txt
+++ b/ui/ui-graphics/api/0.1.0-dev11.txt
@@ -718,29 +718,29 @@
 
 package androidx.ui.graphics.painter {
 
-  @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
+  @androidx.ui.graphics.painter.CanvasScopeMarker public class CanvasScope {
     ctor public CanvasScope();
-    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);
-    method public kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
-    method public kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawOval-EPCrxCw(long color, 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? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawRect-EPCrxCw(long color, 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? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public long getCenter();
-    method public long getSize();
+    method public final 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 final 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 final 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 final 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);
+    method public final kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
+    method public final kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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 final kotlin.Unit? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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 final kotlin.Unit? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawOval-EPCrxCw(long color, 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 final kotlin.Unit? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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 final kotlin.Unit? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawRect-EPCrxCw(long color, 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 final kotlin.Unit? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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 final kotlin.Unit? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final long getCenter();
+    method public final long getSize();
     property public final long center;
     property public final long size;
     field public static final androidx.ui.graphics.painter.CanvasScope.Companion! Companion;
diff --git a/ui/ui-graphics/api/current.txt b/ui/ui-graphics/api/current.txt
index 9bf8346..824c17b 100644
--- a/ui/ui-graphics/api/current.txt
+++ b/ui/ui-graphics/api/current.txt
@@ -718,29 +718,29 @@
 
 package androidx.ui.graphics.painter {
 
-  @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
+  @androidx.ui.graphics.painter.CanvasScopeMarker public class CanvasScope {
     ctor public CanvasScope();
-    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);
-    method public kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
-    method public kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawOval-EPCrxCw(long color, 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? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawRect-EPCrxCw(long color, 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? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public long getCenter();
-    method public long getSize();
+    method public final 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 final 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 final 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 final 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);
+    method public final kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
+    method public final kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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 final kotlin.Unit? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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 final kotlin.Unit? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawOval-EPCrxCw(long color, 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 final kotlin.Unit? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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 final kotlin.Unit? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawRect-EPCrxCw(long color, 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 final kotlin.Unit? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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 final kotlin.Unit? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final long getCenter();
+    method public final long getSize();
     property public final long center;
     property public final long size;
     field public static final androidx.ui.graphics.painter.CanvasScope.Companion! Companion;
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 9bf8346..824c17b 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
@@ -718,29 +718,29 @@
 
 package androidx.ui.graphics.painter {
 
-  @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
+  @androidx.ui.graphics.painter.CanvasScopeMarker public class CanvasScope {
     ctor public CanvasScope();
-    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);
-    method public kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
-    method public kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawOval-EPCrxCw(long color, 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? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawRect-EPCrxCw(long color, 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? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public long getCenter();
-    method public long getSize();
+    method public final 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 final 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 final 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 final 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);
+    method public final kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
+    method public final kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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 final kotlin.Unit? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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 final kotlin.Unit? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawOval-EPCrxCw(long color, 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 final kotlin.Unit? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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 final kotlin.Unit? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawRect-EPCrxCw(long color, 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 final kotlin.Unit? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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 final kotlin.Unit? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final long getCenter();
+    method public final long getSize();
     property public final long center;
     property public final long size;
     field public static final androidx.ui.graphics.painter.CanvasScope.Companion! Companion;
diff --git a/ui/ui-graphics/api/public_plus_experimental_current.txt b/ui/ui-graphics/api/public_plus_experimental_current.txt
index 9bf8346..824c17b 100644
--- a/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -718,29 +718,29 @@
 
 package androidx.ui.graphics.painter {
 
-  @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
+  @androidx.ui.graphics.painter.CanvasScopeMarker public class CanvasScope {
     ctor public CanvasScope();
-    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);
-    method public kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
-    method public kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawOval-EPCrxCw(long color, 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? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawRect-EPCrxCw(long color, 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? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public long getCenter();
-    method public long getSize();
+    method public final 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 final 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 final 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 final 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);
+    method public final kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
+    method public final kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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 final kotlin.Unit? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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 final kotlin.Unit? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawOval-EPCrxCw(long color, 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 final kotlin.Unit? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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 final kotlin.Unit? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawRect-EPCrxCw(long color, 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 final kotlin.Unit? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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 final kotlin.Unit? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final long getCenter();
+    method public final long getSize();
     property public final long center;
     property public final long size;
     field public static final androidx.ui.graphics.painter.CanvasScope.Companion! Companion;
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 9bf8346..824c17b 100644
--- a/ui/ui-graphics/api/restricted_0.1.0-dev11.txt
+++ b/ui/ui-graphics/api/restricted_0.1.0-dev11.txt
@@ -718,29 +718,29 @@
 
 package androidx.ui.graphics.painter {
 
-  @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
+  @androidx.ui.graphics.painter.CanvasScopeMarker public class CanvasScope {
     ctor public CanvasScope();
-    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);
-    method public kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
-    method public kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawOval-EPCrxCw(long color, 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? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawRect-EPCrxCw(long color, 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? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public long getCenter();
-    method public long getSize();
+    method public final 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 final 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 final 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 final 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);
+    method public final kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
+    method public final kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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 final kotlin.Unit? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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 final kotlin.Unit? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawOval-EPCrxCw(long color, 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 final kotlin.Unit? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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 final kotlin.Unit? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawRect-EPCrxCw(long color, 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 final kotlin.Unit? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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 final kotlin.Unit? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final long getCenter();
+    method public final long getSize();
     property public final long center;
     property public final long size;
     field public static final androidx.ui.graphics.painter.CanvasScope.Companion! Companion;
diff --git a/ui/ui-graphics/api/restricted_current.txt b/ui/ui-graphics/api/restricted_current.txt
index 9bf8346..824c17b 100644
--- a/ui/ui-graphics/api/restricted_current.txt
+++ b/ui/ui-graphics/api/restricted_current.txt
@@ -718,29 +718,29 @@
 
 package androidx.ui.graphics.painter {
 
-  @androidx.ui.graphics.painter.CanvasScopeMarker public final class CanvasScope {
+  @androidx.ui.graphics.painter.CanvasScopeMarker public class CanvasScope {
     ctor public CanvasScope();
-    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);
-    method public kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
-    method public kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawOval-EPCrxCw(long color, 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? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public kotlin.Unit? drawRect-EPCrxCw(long color, 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? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public long getCenter();
-    method public long getSize();
+    method public final 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 final 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 final 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 final 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);
+    method public final kotlin.Unit? drawCircle-uHGJFV8(androidx.ui.graphics.Brush brush, 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);
+    method public final kotlin.Unit? drawImage-IF_VeeU(androidx.ui.graphics.ImageAsset image, long srcOffset = Offset.zero, long srcSize = Size(image.width.toFloat(), image.height.toFloat()), long dstOffset = Offset.zero, long dstSize = 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 final kotlin.Unit? drawImage-zcoU2q0(androidx.ui.graphics.ImageAsset image, long topLeft = Offset.zero, @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 final kotlin.Unit? drawLine-MfDnFlo(long color, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawLine-PWBr8KI(androidx.ui.graphics.Brush brush, long p1, long p2, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawOval-EPCrxCw(long color, 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 final kotlin.Unit? drawOval-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPath-ZizoN6c(androidx.ui.graphics.Path path, long color, @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 final kotlin.Unit? drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, @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 final kotlin.Unit? drawPoints-yiE_nf0(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, androidx.ui.graphics.painter.Stroke stroke, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final kotlin.Unit? drawRect-EPCrxCw(long color, 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 final kotlin.Unit? drawRect-cuGMcK0(androidx.ui.graphics.Brush brush, 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 final kotlin.Unit? drawRoundRect-5PTu5W0(androidx.ui.graphics.Brush brush, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = radiusX, @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 final kotlin.Unit? drawRoundRect-A8SqK14(long color, long topLeft = Offset.zero, long size = this.size, float radiusX = 0.0f, float radiusY = 0.0f, androidx.ui.graphics.painter.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final long getCenter();
+    method public final long getSize();
     property public final long center;
     property public final long size;
     field public static final androidx.ui.graphics.painter.CanvasScope.Companion! Companion;
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 394f9bc..6ccfdac 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
@@ -249,7 +249,7 @@
  * @sample androidx.ui.graphics.samples.canvasScopeSample
  */
 @CanvasScopeMarker
-class CanvasScope {
+open class CanvasScope {
 
     @PublishedApi internal var canvas: Canvas? = null
 
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
index 727b7f4..17d39e7 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
@@ -24,7 +24,7 @@
 import androidx.ui.animation.Transition
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Size
 import androidx.ui.graphics.Color
@@ -68,7 +68,7 @@
 ) {
     val stroke = Stroke(5.dp.value * DensityAmbient.current.density)
     Transition(definition = CircularTransition, initState = 0, toState = 1) { state ->
-        Canvas2(modifier) {
+        Canvas(modifier) {
             val innerRadius = (size.minDimension - stroke.width) / 2
             val halfSize = size / 2.0f
             val topLeft = Offset(
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt b/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
index c00bd0b..c42952e 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.ContentGravity
 import androidx.ui.foundation.selection.ToggleableState
 import androidx.ui.foundation.selection.TriStateToggleable
@@ -138,7 +138,7 @@
             strokeWidthPx = StrokeWidth.toPx().value
             radiusPx = RadiusSize.toPx().value
         }
-        Canvas2(modifier.preferredSize(CheckboxSize)) {
+        Canvas(modifier.preferredSize(CheckboxSize)) {
             drawBox(
                 color = state[BoxColorProp],
                 innerRadiusFraction = state[InnerRadiusFractionProp],
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Drawer.kt b/ui/ui-material/src/main/java/androidx/ui/material/Drawer.kt
index a05028b..0474a68 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Drawer.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Drawer.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.hasBoundedHeight
 import androidx.ui.core.hasBoundedWidth
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Clickable
 import androidx.ui.foundation.gestures.DragDirection
 import androidx.ui.layout.DpConstraints
@@ -262,7 +262,7 @@
     // TODO: use enabled = false here when it will be available
     val scrimContent = @Composable {
         val color = MaterialTheme.colors.onSurface
-        Canvas2(Modifier.fillMaxSize()) {
+        Canvas(Modifier.fillMaxSize()) {
             drawRect(color, alpha = fraction() * ScrimDefaultOpacity)
         }
     }
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt b/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
index 709c3bb..4f32ee2 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
@@ -28,7 +28,7 @@
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 import androidx.ui.core.LayoutDirection
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.DeterminateProgressIndicator
 import androidx.ui.foundation.Strings
 import androidx.ui.geometry.Offset
@@ -68,7 +68,7 @@
             )
         }
         val backgroundColor = color.copy(alpha = BackgroundOpacity)
-        Canvas2(modifier.preferredSize(LinearIndicatorWidth, LinearIndicatorHeight)) {
+        Canvas(modifier.preferredSize(LinearIndicatorWidth, LinearIndicatorHeight)) {
             drawLinearIndicatorBackground(backgroundColor, stroke)
             drawLinearIndicator(0f, progress, color, stroke)
         }
@@ -105,7 +105,7 @@
                     cap = StrokeCap.butt
                 )
             }
-            Canvas2(modifier.preferredSize(LinearIndicatorWidth, LinearIndicatorHeight)) {
+            Canvas(modifier.preferredSize(LinearIndicatorWidth, LinearIndicatorHeight)) {
                 drawLinearIndicatorBackground(backgroundColor, stroke)
                 if (firstLineHead - firstLineTail > 0) {
                     drawLinearIndicator(
@@ -172,7 +172,7 @@
         val stroke = with(DensityAmbient.current) {
             Stroke(width = strokeWidth.toPx().value, cap = StrokeCap.butt)
         }
-        Canvas2(
+        Canvas(
             modifier
                 .padding(CircularIndicatorPadding)
                 .preferredSize(CircularIndicatorDiameter)
@@ -223,7 +223,7 @@
             startAngle += StartAngleOffset + currentRotationAngleOffset
             startAngle += baseRotation
 
-            Canvas2(
+            Canvas(
                 modifier.padding(CircularIndicatorPadding)
                     .preferredSize(CircularIndicatorDiameter)
             ) {
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt b/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
index 9727e47..eaa5025 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Text
 import androidx.ui.foundation.selection.MutuallyExclusiveSetItem
 import androidx.ui.geometry.Offset
@@ -218,7 +218,7 @@
                     gapWidth = state[GapProp].toPx().value
                     radioStroke = Stroke(RadioStrokeWidth.toPx().value)
                 }
-                Canvas2(Modifier.padding(RadioButtonPadding).preferredSize(RadioButtonSize)) {
+                Canvas(Modifier.padding(RadioButtonPadding).preferredSize(RadioButtonSize)) {
                     drawRadio(
                         state[ColorProp],
                         outerPx,
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt b/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
index 072eefe..da48657 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
@@ -34,7 +34,7 @@
 import androidx.ui.core.WithConstraints
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.animation.FlingConfig
 import androidx.ui.foundation.animation.fling
 import androidx.ui.foundation.gestures.DragDirection
@@ -211,7 +211,7 @@
 ) {
     val activeTickColor = MaterialTheme.colors.onPrimary.copy(alpha = TickColorAlpha)
     val inactiveTickColor = color.copy(alpha = TickColorAlpha)
-    Canvas2(modifier) {
+    Canvas(modifier) {
         val sliderStart = Offset(thumbPx, center.dy)
         val sliderMax = Offset(size.width - thumbPx, center.dy)
         drawLine(
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt b/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
index fb00b34..3653978 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
@@ -21,7 +21,7 @@
 import androidx.compose.Composable
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.gestures.DragDirection
 import androidx.ui.foundation.selection.Toggleable
 import androidx.ui.geometry.Offset
@@ -118,7 +118,7 @@
         trackWidth = TrackWidth.toPx().value
         thumbDiameter = ThumbDiameter.toPx().value
     }
-    Canvas2(modifier.preferredSize(SwitchWidth, SwitchHeight)) {
+    Canvas(modifier.preferredSize(SwitchWidth, SwitchHeight)) {
         drawTrack(trackColor, trackWidth, trackStroke)
         drawThumb(thumbValue.value, thumbDiameter, thumbColor)
     }
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 079d0a1..7ea68f9 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
@@ -59,6 +59,7 @@
 import androidx.ui.input.ImeAction
 import androidx.ui.input.KeyboardType
 import androidx.ui.input.VisualTransformation
+import androidx.ui.graphics.painter.Stroke
 import androidx.ui.layout.padding
 import androidx.ui.layout.preferredSizeIn
 import androidx.ui.material.ripple.ripple
@@ -647,16 +648,14 @@
  */
 @Composable
 private fun Modifier.drawIndicatorLine(lineWidth: Dp, color: Color): Modifier {
-    val paint = remember { Paint() }
     return drawBehind {
         val strokeWidth = lineWidth.value * density
-        paint.strokeWidth = strokeWidth
-        paint.color = color
         val y = size.height - strokeWidth / 2
         drawLine(
+            color,
             Offset(0f, y),
             Offset(size.width, y),
-            paint
+            stroke = Stroke(width = strokeWidth)
         )
     }
 }
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ripple/Ripple.kt b/ui/ui-material/src/main/java/androidx/ui/material/ripple/Ripple.kt
index 54ecff3..f74478d 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/ripple/Ripple.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/ripple/Ripple.kt
@@ -41,6 +41,7 @@
 import androidx.ui.core.composed
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
 import androidx.ui.graphics.Color
+import androidx.ui.graphics.painter.drawCanvas
 import androidx.ui.graphics.useOrElse
 import androidx.ui.unit.Density
 import androidx.ui.unit.Dp
@@ -152,7 +153,9 @@
 
     override fun ContentDrawScope.draw() {
         drawContent()
-        effects.fastForEach { it.draw(this, this@RippleModifier.size, color) }
+        drawCanvas { canvas, _ ->
+            effects.fastForEach { it.draw(canvas, this@RippleModifier.size, color) }
+        }
     }
 
     override fun onEnter() {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/AnimationSynchronizationTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/AnimationSynchronizationTest.kt
index 7370875..e0ab1a6 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/AnimationSynchronizationTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/AnimationSynchronizationTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.animation.Transition
 import androidx.ui.core.Modifier
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.drawBackground
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Size
@@ -185,7 +185,7 @@
                  animationRunning = false }
             ) { state ->
                 hasRecomposed = true
-                Canvas2(modifier = Modifier.fillMaxSize()) {
+                Canvas(modifier = Modifier.fillMaxSize()) {
                     recordedAnimatedValues.add(state[x])
                     drawRect(Color.Cyan, Offset(state[x], 0f), rectSize)
                 }
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt
index 015a77fb..fa112c6 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.setContent
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.layout.fillMaxSize
 import androidx.ui.test.android.AndroidComposeTestRule
@@ -46,7 +46,7 @@
     fun waitsForFirstDraw() {
         var drawn = false
         testRule.setContent {
-            Canvas2(Modifier.fillMaxSize()) {
+            Canvas(Modifier.fillMaxSize()) {
                 drawn = true
             }
         }
@@ -61,7 +61,7 @@
     fun waitsForFirstDraw_withoutOnIdle() {
         var drawn = false
         testRule.setContent {
-            Canvas2(Modifier.fillMaxSize()) {
+            Canvas(Modifier.fillMaxSize()) {
                 drawn = true
             }
         }
@@ -104,7 +104,7 @@
             outOfBoundsView.setContent(Recomposer.current()) {
                 // If you see this box when running the test, the test is setup incorrectly
                 Box(Modifier, backgroundColor = Color.Yellow)
-                Canvas2(Modifier) {
+                Canvas(Modifier) {
                     drawn = true
                 }
             }
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/IsDisplayedTests.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/IsDisplayedTests.kt
index ffd3ff6..8cff678 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/IsDisplayedTests.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/IsDisplayedTests.kt
@@ -24,7 +24,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.TestTag
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.Text
 import androidx.ui.foundation.VerticalScroller
 import androidx.ui.graphics.Color
@@ -232,7 +232,7 @@
 
         val drawRect = @Composable { color: Color ->
             Semantics(container = true) {
-                Canvas2(Modifier.preferredSize(100.dp)) {
+                Canvas(Modifier.preferredSize(100.dp)) {
                     drawRect(color)
 
                     elementHeight = Px(size.height)
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt
index 457ab16..46bfce8 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.animation.Transition
 import androidx.ui.core.Modifier
 import androidx.ui.foundation.Box
-import androidx.ui.foundation.Canvas2
+import androidx.ui.foundation.Canvas
 import androidx.ui.foundation.drawBackground
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Size
@@ -178,7 +178,7 @@
                  animationRunning = false }
             ) { state ->
                 hasRecomposed = true
-                Canvas2(modifier = Modifier.fillMaxSize()) {
+                Canvas(modifier = Modifier.fillMaxSize()) {
                     val xValue = state[x]
                     recordedAnimatedValues.add(xValue)
                     drawRect(Color.Cyan, Offset(xValue, 0.0f), size)
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/CoreText.kt b/ui/ui-text/src/main/java/androidx/ui/text/CoreText.kt
index 2df3706..961c9a2 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/CoreText.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/CoreText.kt
@@ -36,6 +36,7 @@
 import androidx.ui.core.selection.Selectable
 import androidx.ui.core.selection.SelectionRegistrarAmbient
 import androidx.ui.graphics.Color
+import androidx.ui.graphics.painter.drawCanvas
 import androidx.ui.text.font.Font
 import androidx.ui.text.selection.TextSelectionDelegate
 import androidx.ui.text.style.TextAlign
@@ -115,16 +116,18 @@
         children = emptyContent(),
         modifier = modifier.drawBehind {
             state.layoutResult?.let { layoutResult ->
-                state.selectionRange?.let {
-                    TextDelegate.paintBackground(
-                        it.min,
-                        it.max,
-                        DefaultSelectionColor,
-                        this,
-                        layoutResult
-                    )
+                drawCanvas { canvas, _ ->
+                    state.selectionRange?.let {
+                        TextDelegate.paintBackground(
+                            it.min,
+                            it.max,
+                            DefaultSelectionColor,
+                            canvas,
+                            layoutResult
+                        )
+                    }
+                    TextDelegate.paint(canvas, layoutResult)
                 }
-                TextDelegate.paint(this, layoutResult)
             }
         }.onPositioned {
             // Get the layout coordinates of the text composable. This is for hit test of
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/CoreTextField.kt b/ui/ui-text/src/main/java/androidx/ui/text/CoreTextField.kt
index 8c532e5..be2616d 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/CoreTextField.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/CoreTextField.kt
@@ -38,6 +38,7 @@
 import androidx.ui.focus.FocusModifier
 import androidx.ui.focus.FocusState
 import androidx.ui.focus.focusState
+import androidx.ui.graphics.painter.drawCanvas
 import androidx.ui.input.EditProcessor
 import androidx.ui.input.EditorValue
 import androidx.ui.input.ImeAction
@@ -191,13 +192,15 @@
                 emptyContent(),
                 updatedModifier.drawBehind {
                     state.layoutResult?.let { layoutResult ->
-                        TextFieldDelegate.draw(
-                            this,
-                            value,
-                            offsetMap,
-                            layoutResult,
-                            DefaultSelectionColor
-                        )
+                        drawCanvas { canvas, _ ->
+                            TextFieldDelegate.draw(
+                                canvas,
+                                value,
+                                offsetMap,
+                                layoutResult,
+                                DefaultSelectionColor
+                            )
+                        }
                     }
                 }.onPositioned {
                     if (textInputService != null) {
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 af08330..7afd759 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
@@ -48,8 +48,7 @@
             Inspectable {
                 Column {
                     Box(Modifier.preferredSize(100.dp).drawBehind {
-                        val paint = Paint().also { it.color = Color(0xFF) }
-                        drawRect(size.toRect(), paint)
+                        drawRect(Color(0xFF))
                     })
                 }
             }