Skip to content

Commit abcefcd

Browse files
committed
Deprecate NativeCanvas typealias
Change-Id: I26098f1b585f1e902ab4cab83f5525beb4dc54eb
1 parent 199147c commit abcefcd

File tree

19 files changed

+63
-43
lines changed

19 files changed

+63
-43
lines changed

compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/VariableFontsDemo.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ import androidx.compose.runtime.remember
4242
import androidx.compose.ui.Alignment
4343
import androidx.compose.ui.Modifier
4444
import androidx.compose.ui.graphics.Color
45+
import androidx.compose.ui.graphics.asAndroidCanvas
4546
import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
46-
import androidx.compose.ui.graphics.nativeCanvas
4747
import androidx.compose.ui.platform.LocalContext
4848
import androidx.compose.ui.text.ExperimentalTextApi
4949
import androidx.compose.ui.text.font.DeviceFontFamilyName
@@ -236,7 +236,7 @@ fun DeviceNamedFontFamilyFont(weight: Int, italic: Boolean) {
236236
val textPaint = remember { TextPaint() }
237237
Canvas(modifier = Modifier.fillMaxWidth().height(40.dp)) {
238238
this.drawIntoCanvas {
239-
val nativeCanvas = drawContext.canvas.nativeCanvas
239+
val nativeCanvas = drawContext.canvas.asAndroidCanvas()
240240
textPaint.typeface = Typeface.create("sans-serif", Typeface.NORMAL)
241241
textPaint.textSize = 24f
242242
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidOverscroll.android.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,11 @@ import androidx.compose.ui.geometry.center
4343
import androidx.compose.ui.geometry.isSpecified
4444
import androidx.compose.ui.graphics.Canvas
4545
import androidx.compose.ui.graphics.Color
46-
import androidx.compose.ui.graphics.NativeCanvas
46+
import androidx.compose.ui.graphics.asAndroidCanvas
4747
import androidx.compose.ui.graphics.drawscope.ContentDrawScope
4848
import androidx.compose.ui.graphics.drawscope.DrawScope
4949
import androidx.compose.ui.graphics.drawscope.draw
5050
import androidx.compose.ui.graphics.drawscope.translate
51-
import androidx.compose.ui.graphics.nativeCanvas
5251
import androidx.compose.ui.graphics.toArgb
5352
import androidx.compose.ui.input.nestedscroll.NestedScrollSource
5453
import androidx.compose.ui.input.pointer.PointerId
@@ -205,7 +204,7 @@ private class StretchOverscrollNode(
205204
@Suppress("KotlinConstantConditions")
206205
override fun ContentDrawScope.draw() {
207206
overscrollEffect.updateSize(size)
208-
val canvas = drawContext.canvas.nativeCanvas
207+
val canvas = drawContext.canvas.asAndroidCanvas()
209208
overscrollEffect.redrawSignal.value // <-- value read to redraw if needed
210209
if (size.isEmpty()) {
211210
// Draw any out of bounds content
@@ -380,26 +379,26 @@ private class StretchOverscrollNode(
380379
isRightNegationStretched()
381380
}
382381

383-
private fun drawLeftStretch(left: EdgeEffect, canvas: NativeCanvas): Boolean {
382+
private fun drawLeftStretch(left: EdgeEffect, canvas: android.graphics.Canvas): Boolean {
384383
return drawWithRotation(rotationDegrees = 270f, edgeEffect = left, canvas = canvas)
385384
}
386385

387-
private fun drawTopStretch(top: EdgeEffect, canvas: NativeCanvas): Boolean {
386+
private fun drawTopStretch(top: EdgeEffect, canvas: android.graphics.Canvas): Boolean {
388387
return drawWithRotation(rotationDegrees = 0f, edgeEffect = top, canvas = canvas)
389388
}
390389

391-
private fun drawRightStretch(right: EdgeEffect, canvas: NativeCanvas): Boolean {
390+
private fun drawRightStretch(right: EdgeEffect, canvas: android.graphics.Canvas): Boolean {
392391
return drawWithRotation(rotationDegrees = 90f, edgeEffect = right, canvas = canvas)
393392
}
394393

395-
private fun drawBottomStretch(bottom: EdgeEffect, canvas: NativeCanvas): Boolean {
394+
private fun drawBottomStretch(bottom: EdgeEffect, canvas: android.graphics.Canvas): Boolean {
396395
return drawWithRotation(rotationDegrees = 180f, edgeEffect = bottom, canvas = canvas)
397396
}
398397

399398
private fun drawWithRotation(
400399
rotationDegrees: Float,
401400
edgeEffect: EdgeEffect,
402-
canvas: NativeCanvas,
401+
canvas: android.graphics.Canvas,
403402
): Boolean {
404403
if (rotationDegrees == 0f) {
405404
val needsInvalidate = edgeEffect.draw(canvas)
@@ -433,7 +432,7 @@ private class GlowOverscrollNode(
433432
}
434433
drawContent()
435434
overscrollEffect.redrawSignal.value // <-- value read to redraw if needed
436-
val canvas = drawContext.canvas.nativeCanvas
435+
val canvas = drawContext.canvas.asAndroidCanvas()
437436
var needsInvalidate = false
438437
with(edgeEffectWrapper) {
439438
if (isLeftAnimating()) {
@@ -504,7 +503,7 @@ private class GlowOverscrollNode(
504503
rotationDegrees: Float,
505504
offset: Offset,
506505
edgeEffect: EdgeEffect,
507-
canvas: NativeCanvas,
506+
canvas: android.graphics.Canvas,
508507
): Boolean {
509508
val restore = canvas.save()
510509
canvas.rotate(rotationDegrees)

compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/contextmenu/internal/DefaultTextContextMenuDropdownProvider.android.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ import androidx.compose.ui.draw.drawBehind
5050
import androidx.compose.ui.draw.paint
5151
import androidx.compose.ui.graphics.Color
5252
import androidx.compose.ui.graphics.ColorFilter
53+
import androidx.compose.ui.graphics.asAndroidCanvas
5354
import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
5455
import androidx.compose.ui.graphics.isUnspecified
55-
import androidx.compose.ui.graphics.nativeCanvas
5656
import androidx.compose.ui.layout.ContentScale
5757
import androidx.compose.ui.layout.LayoutCoordinates
5858
import androidx.compose.ui.platform.LocalContext
@@ -277,7 +277,7 @@ private object TextContextMenuHelperApi28 {
277277
Modifier.size(ContextMenuSpec.IconSize).drawBehind {
278278
drawIntoCanvas { canvas ->
279279
drawable.setBounds(0, 0, size.width.toInt(), size.height.toInt())
280-
drawable.draw(canvas.nativeCanvas)
280+
drawable.draw(canvas.asAndroidCanvas())
281281
}
282282
}
283283
)

compose/ui/ui-graphics/src/androidDeviceTest/kotlin/androidx/compose/ui/graphics/AndroidCanvasTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@ class AndroidCanvasTest {
628628
val androidCanvas = Canvas(canvas)
629629
androidCanvas.enableZ()
630630
for (i in 0 until childCount) {
631-
drawChild(androidCanvas.nativeCanvas, getChildAt(i), drawingTime)
631+
drawChild(androidCanvas.asAndroidCanvas(), getChildAt(i), drawingTime)
632632
}
633633
androidCanvas.disableZ()
634634
drawLatch.countDown()

compose/ui/ui-graphics/src/androidDeviceTest/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayerTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ import androidx.compose.ui.graphics.Path
4444
import androidx.compose.ui.graphics.PixelMap
4545
import androidx.compose.ui.graphics.TestActivity
4646
import androidx.compose.ui.graphics.TileMode
47+
import androidx.compose.ui.graphics.asAndroidCanvas
4748
import androidx.compose.ui.graphics.asImageBitmap
4849
import androidx.compose.ui.graphics.compositeOver
4950
import androidx.compose.ui.graphics.drawscope.DrawScope
5051
import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
5152
import androidx.compose.ui.graphics.drawscope.inset
5253
import androidx.compose.ui.graphics.drawscope.translate
53-
import androidx.compose.ui.graphics.nativeCanvas
5454
import androidx.compose.ui.graphics.toArgb
5555
import androidx.compose.ui.graphics.toPixelMap
5656
import androidx.compose.ui.unit.Density
@@ -1889,7 +1889,7 @@ class AndroidGraphicsLayerTest {
18891889
Ltr,
18901890
IntSize(target.width, target.height),
18911891
) {
1892-
drawIntoCanvas { canvas -> target.draw(canvas.nativeCanvas) }
1892+
drawIntoCanvas { canvas -> target.draw(canvas.asAndroidCanvas()) }
18931893
}
18941894
recordLatch.countDown()
18951895
}

compose/ui/ui-graphics/src/androidDeviceTest/kotlin/androidx/compose/ui/graphics/shadow/ShadowTestHelper.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ import androidx.compose.ui.graphics.ImageShader
3434
import androidx.compose.ui.graphics.PixelMap
3535
import androidx.compose.ui.graphics.ShaderBrush
3636
import androidx.compose.ui.graphics.TestActivity
37+
import androidx.compose.ui.graphics.asAndroidCanvas
3738
import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
3839
import androidx.compose.ui.graphics.drawscope.DrawScope
39-
import androidx.compose.ui.graphics.nativeCanvas
4040
import androidx.compose.ui.graphics.toPixelMap
4141
import androidx.compose.ui.unit.Density
4242
import androidx.compose.ui.unit.LayoutDirection
@@ -83,7 +83,7 @@ fun shadowTest(block: DrawScope.() -> Unit, verify: (PixelMap) -> Unit) {
8383
} else {
8484
val bitmap = ImageBitmap(TEST_WIDTH, TEST_HEIGHT)
8585
val canvas = ComposeCanvas(bitmap)
86-
target!!.draw(canvas.nativeCanvas)
86+
target!!.draw(canvas.asAndroidCanvas())
8787
bitmap.toPixelMap()
8888
}
8989
verify(pixelMap)

compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidCanvas.android.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ import androidx.compose.ui.unit.IntOffset
2222
import androidx.compose.ui.unit.IntSize
2323
import androidx.compose.ui.util.fastForEach
2424

25+
@Deprecated(
26+
message = "Use android.graphics.Canvas directly instead",
27+
replaceWith = ReplaceWith("android.graphics.Canvas"),
28+
)
2529
actual typealias NativeCanvas = android.graphics.Canvas
2630

2731
/** Create a new Canvas instance that targets its drawing commands to the provided [ImageBitmap] */
@@ -30,6 +34,12 @@ internal actual fun ActualCanvas(image: ImageBitmap): Canvas =
3034

3135
fun Canvas(c: android.graphics.Canvas): Canvas = AndroidCanvas().apply { internalCanvas = c }
3236

37+
fun android.graphics.Canvas.asComposeCanvas(): Canvas =
38+
AndroidCanvas().apply { internalCanvas = this@asComposeCanvas }
39+
40+
fun Canvas.asAndroidCanvas(): android.graphics.Canvas =
41+
(this as AndroidCanvas).internalCanvas
42+
3343
/**
3444
* Holder class that is used to issue scoped calls to a [Canvas] from the framework equivalent
3545
* canvas without having to allocate an object on each draw call
@@ -46,6 +56,11 @@ class CanvasHolder {
4656
}
4757

4858
/** Return an instance of the native primitive that implements the Canvas interface */
59+
@Suppress("DEPRECATION")
60+
@Deprecated(
61+
message = "Use Canvas.asAndroidCanvas() extension instead",
62+
replaceWith = ReplaceWith("asAndroidCanvas()"),
63+
)
4964
actual val Canvas.nativeCanvas: NativeCanvas
5065
get() = (this as AndroidCanvas).internalCanvas
5166

@@ -58,7 +73,7 @@ internal class AndroidCanvas() : Canvas {
5873

5974
// Keep the internal canvas as a var prevent having to allocate an AndroidCanvas
6075
// instance on each draw call
61-
@PublishedApi internal var internalCanvas: NativeCanvas = EmptyCanvas
76+
@PublishedApi internal var internalCanvas: android.graphics.Canvas = EmptyCanvas
6277

6378
private var srcRect: android.graphics.Rect? = null
6479

compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import androidx.compose.ui.graphics.Outline
3535
import androidx.compose.ui.graphics.Paint
3636
import androidx.compose.ui.graphics.Path
3737
import androidx.compose.ui.graphics.RenderEffect
38+
import androidx.compose.ui.graphics.asAndroidCanvas
3839
import androidx.compose.ui.graphics.asAndroidPaint
3940
import androidx.compose.ui.graphics.asAndroidPath
4041
import androidx.compose.ui.graphics.asImageBitmap
@@ -43,7 +44,6 @@ import androidx.compose.ui.graphics.drawscope.DefaultDensity
4344
import androidx.compose.ui.graphics.drawscope.DrawScope
4445
import androidx.compose.ui.graphics.drawscope.clipPath
4546
import androidx.compose.ui.graphics.drawscope.draw
46-
import androidx.compose.ui.graphics.nativeCanvas
4747
import androidx.compose.ui.unit.Density
4848
import androidx.compose.ui.unit.IntOffset
4949
import androidx.compose.ui.unit.IntSize
@@ -479,7 +479,7 @@ actual class GraphicsLayer internal constructor(internal val impl: GraphicsLayer
479479
}
480480

481481
internal fun drawForPersistence(canvas: Canvas) {
482-
if (canvas.nativeCanvas.isHardwareAccelerated || impl.supportsSoftwareRendering) {
482+
if (canvas.asAndroidCanvas().isHardwareAccelerated || impl.supportsSoftwareRendering) {
483483
recreateDisplayListIfNeeded()
484484
impl.draw(canvas)
485485
}
@@ -519,7 +519,7 @@ actual class GraphicsLayer internal constructor(internal val impl: GraphicsLayer
519519
if (useZ) {
520520
canvas.enableZ()
521521
}
522-
val androidCanvas = canvas.nativeCanvas
522+
val androidCanvas = canvas.asAndroidCanvas()
523523
val softwareRendered = !androidCanvas.isHardwareAccelerated
524524
if (softwareRendered) {
525525
transformCanvas(androidCanvas)
@@ -547,7 +547,7 @@ actual class GraphicsLayer internal constructor(internal val impl: GraphicsLayer
547547

548548
parentLayer?.addSubLayer(this)
549549

550-
if (canvas.nativeCanvas.isHardwareAccelerated || impl.supportsSoftwareRendering) {
550+
if (canvas.asAndroidCanvas().isHardwareAccelerated || impl.supportsSoftwareRendering) {
551551
impl.draw(canvas)
552552
} else {
553553
val drawScope = softwareDrawScope ?: CanvasDrawScope().also { softwareDrawScope = it }

compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayerV23.android.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ import androidx.compose.ui.graphics.CanvasHolder
3131
import androidx.compose.ui.graphics.Color
3232
import androidx.compose.ui.graphics.ColorFilter
3333
import androidx.compose.ui.graphics.RenderEffect
34+
import androidx.compose.ui.graphics.asAndroidCanvas
3435
import androidx.compose.ui.graphics.asAndroidColorFilter
3536
import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
3637
import androidx.compose.ui.graphics.drawscope.DrawScope
3738
import androidx.compose.ui.graphics.drawscope.draw
38-
import androidx.compose.ui.graphics.nativeCanvas
3939
import androidx.compose.ui.graphics.toArgb
4040
import androidx.compose.ui.graphics.toPorterDuffMode
4141
import androidx.compose.ui.unit.Density
@@ -336,7 +336,7 @@ internal class GraphicsLayerV23(
336336
}
337337

338338
override fun draw(canvas: androidx.compose.ui.graphics.Canvas) {
339-
(canvas.nativeCanvas as DisplayListCanvas).drawRenderNode(renderNode)
339+
(canvas.asAndroidCanvas() as DisplayListCanvas).drawRenderNode(renderNode)
340340
}
341341

342342
override fun calculateMatrix(): Matrix {

compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsViewLayer.android.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import androidx.compose.ui.graphics.CanvasHolder
3535
import androidx.compose.ui.graphics.Color
3636
import androidx.compose.ui.graphics.ColorFilter
3737
import androidx.compose.ui.graphics.RenderEffect
38+
import androidx.compose.ui.graphics.asAndroidCanvas
3839
import androidx.compose.ui.graphics.asAndroidColorFilter
3940
import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
4041
import androidx.compose.ui.graphics.drawscope.DefaultDensity
@@ -44,7 +45,6 @@ import androidx.compose.ui.graphics.layer.GraphicsLayerImpl.Companion.DefaultDra
4445
import androidx.compose.ui.graphics.layer.SurfaceUtils.isLockHardwareCanvasAvailable
4546
import androidx.compose.ui.graphics.layer.view.DrawChildContainer
4647
import androidx.compose.ui.graphics.layer.view.PlaceholderHardwareCanvas
47-
import androidx.compose.ui.graphics.nativeCanvas
4848
import androidx.compose.ui.graphics.toArgb
4949
import androidx.compose.ui.graphics.toPorterDuffMode
5050
import androidx.compose.ui.unit.Density
@@ -469,7 +469,7 @@ internal class GraphicsViewLayer(
469469

470470
override fun draw(canvas: androidx.compose.ui.graphics.Canvas) {
471471
updateClipBounds()
472-
val androidCanvas = canvas.nativeCanvas
472+
val androidCanvas = canvas.asAndroidCanvas()
473473
if (androidCanvas.isHardwareAccelerated) {
474474
layerContainer.drawChild(canvas, viewLayer, viewLayer.drawingTime)
475475
} else {

0 commit comments

Comments
 (0)