Skip to content

Commit 199147c

Browse files
committed
Deprecate NativePaint typealias
Change-Id: I6303c742f80887649d1a77e837ab0ff93ddff212
1 parent 58e26a8 commit 199147c

12 files changed

Lines changed: 97 additions & 62 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ class PaintTest {
5555

5656
@Test
5757
fun testDitheringEnabledByDefault() {
58-
assertTrue(Paint().asFrameworkPaint().isDither)
58+
assertTrue(Paint().asAndroidPaint().isDither)
5959
}
6060

6161
@Test
6262
fun testFilterBitmapEnabledByDefault() {
63-
assertTrue(Paint().asFrameworkPaint().isFilterBitmap)
63+
assertTrue(Paint().asAndroidPaint().isFilterBitmap)
6464
}
6565

6666
@Test

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ internal class AndroidCanvas() : Canvas {
8383
bounds.top,
8484
bounds.right,
8585
bounds.bottom,
86-
paint.asFrameworkPaint(),
86+
paint.asAndroidPaint(),
8787
android.graphics.Canvas.ALL_SAVE_FLAG,
8888
)
8989
}
@@ -136,11 +136,11 @@ internal class AndroidCanvas() : Canvas {
136136

137137
/** @see Canvas.drawLine */
138138
override fun drawLine(p1: Offset, p2: Offset, paint: Paint) {
139-
internalCanvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint.asFrameworkPaint())
139+
internalCanvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint.asAndroidPaint())
140140
}
141141

142142
override fun drawRect(left: Float, top: Float, right: Float, bottom: Float, paint: Paint) {
143-
internalCanvas.drawRect(left, top, right, bottom, paint.asFrameworkPaint())
143+
internalCanvas.drawRect(left, top, right, bottom, paint.asAndroidPaint())
144144
}
145145

146146
override fun drawRoundRect(
@@ -159,17 +159,17 @@ internal class AndroidCanvas() : Canvas {
159159
bottom,
160160
radiusX,
161161
radiusY,
162-
paint.asFrameworkPaint(),
162+
paint.asAndroidPaint(),
163163
)
164164
}
165165

166166
override fun drawOval(left: Float, top: Float, right: Float, bottom: Float, paint: Paint) {
167-
internalCanvas.drawOval(left, top, right, bottom, paint.asFrameworkPaint())
167+
internalCanvas.drawOval(left, top, right, bottom, paint.asAndroidPaint())
168168
}
169169

170170
/** @see Canvas.drawCircle */
171171
override fun drawCircle(center: Offset, radius: Float, paint: Paint) {
172-
internalCanvas.drawCircle(center.x, center.y, radius, paint.asFrameworkPaint())
172+
internalCanvas.drawCircle(center.x, center.y, radius, paint.asAndroidPaint())
173173
}
174174

175175
override fun drawArc(
@@ -190,13 +190,13 @@ internal class AndroidCanvas() : Canvas {
190190
startAngle,
191191
sweepAngle,
192192
useCenter,
193-
paint.asFrameworkPaint(),
193+
paint.asAndroidPaint(),
194194
)
195195
}
196196

197197
/** @see Canvas.drawPath */
198198
override fun drawPath(path: Path, paint: Paint) {
199-
internalCanvas.drawPath(path.asAndroidPath(), paint.asFrameworkPaint())
199+
internalCanvas.drawPath(path.asAndroidPath(), paint.asAndroidPaint())
200200
}
201201

202202
/** @see Canvas.drawImage */
@@ -205,7 +205,7 @@ internal class AndroidCanvas() : Canvas {
205205
image.asAndroidBitmap(),
206206
topLeftOffset.x,
207207
topLeftOffset.y,
208-
paint.asFrameworkPaint(),
208+
paint.asAndroidPaint(),
209209
)
210210
}
211211

@@ -239,7 +239,7 @@ internal class AndroidCanvas() : Canvas {
239239
right = dstOffset.x + dstSize.width
240240
bottom = dstOffset.y + dstSize.height
241241
},
242-
paint.asFrameworkPaint(),
242+
paint.asAndroidPaint(),
243243
)
244244
}
245245

@@ -268,7 +268,7 @@ internal class AndroidCanvas() : Canvas {
268268

269269
private fun drawPoints(points: List<Offset>, paint: Paint) {
270270
points.fastForEach { point ->
271-
internalCanvas.drawPoint(point.x, point.y, paint.asFrameworkPaint())
271+
internalCanvas.drawPoint(point.x, point.y, paint.asAndroidPaint())
272272
}
273273
}
274274

@@ -285,7 +285,7 @@ internal class AndroidCanvas() : Canvas {
285285
*/
286286
private fun drawLines(points: List<Offset>, paint: Paint, stepBy: Int) {
287287
if (points.size >= 2) {
288-
val frameworkPaint = paint.asFrameworkPaint()
288+
val frameworkPaint = paint.asAndroidPaint()
289289
var i = 0
290290
while (i < points.size - 1) {
291291
val p1 = points[i]
@@ -310,7 +310,7 @@ internal class AndroidCanvas() : Canvas {
310310

311311
private fun drawRawPoints(points: FloatArray, paint: Paint, stepBy: Int) {
312312
if (points.size % 2 == 0) {
313-
val frameworkPaint = paint.asFrameworkPaint()
313+
val frameworkPaint = paint.asAndroidPaint()
314314
var i = 0
315315
while (i < points.size - 1) {
316316
val x = points[i]
@@ -337,7 +337,7 @@ internal class AndroidCanvas() : Canvas {
337337
// Float array is treated as alternative set of x and y coordinates
338338
// x1, y1, x2, y2, x3, y3, ... etc.
339339
if (points.size >= 4 && points.size % 2 == 0) {
340-
val frameworkPaint = paint.asFrameworkPaint()
340+
val frameworkPaint = paint.asAndroidPaint()
341341
var i = 0
342342
while (i < points.size - 3) {
343343
val x1 = points[i]
@@ -365,7 +365,7 @@ internal class AndroidCanvas() : Canvas {
365365
vertices.indices,
366366
0, // TODO(njawad) figure out proper indexOffset)
367367
vertices.indices.size,
368-
paint.asFrameworkPaint(),
368+
paint.asAndroidPaint(),
369369
)
370370
}
371371
}

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

Lines changed: 59 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,42 @@
1616

1717
package androidx.compose.ui.graphics
1818

19+
import android.graphics.Paint.Cap
20+
import android.graphics.Paint.Style
1921
import android.graphics.PorterDuffXfermode
2022
import android.os.Build
2123
import androidx.annotation.RequiresApi
2224

25+
@Deprecated(
26+
message = "Use android.graphics.Paint directly instead",
27+
replaceWith = ReplaceWith("android.graphics.Paint"),
28+
)
2329
actual typealias NativePaint = android.graphics.Paint
2430

25-
actual fun Paint(): Paint = AndroidPaint()
31+
actual fun Paint(): Paint =
32+
@Suppress("DEPRECATION") // Valid usage of AndroidPaint
33+
AndroidPaint()
2634

2735
/** Convert an [android.graphics.Paint] instance into a Compose-compatible Paint */
28-
fun android.graphics.Paint.asComposePaint(): Paint = AndroidPaint(this)
36+
fun android.graphics.Paint.asComposePaint(): Paint =
37+
@Suppress("DEPRECATION") // Valid usage of AndroidPaint
38+
AndroidPaint(this)
39+
40+
fun Paint.asAndroidPaint(): android.graphics.Paint =
41+
@Suppress("DEPRECATION") // Valid usage of AndroidPaint
42+
(this as AndroidPaint).internalPaint
2943

3044
/**
3145
* Create a Compose [Paint] instance backed by an [android.graphics.Paint] object to be consumed by
3246
* Compose applications running on the Android platform
3347
*
3448
* @param internalPaint [android.graphics.Paint] to be wrapped by the [AndroidPaint] instance
3549
*/
36-
class AndroidPaint(private var internalPaint: android.graphics.Paint) : Paint {
50+
@Deprecated(
51+
message = "This type is not supposed to be used directly",
52+
replaceWith = ReplaceWith("androidx.compose.ui.graphics.Paint"),
53+
)
54+
class AndroidPaint(internal var internalPaint: android.graphics.Paint) : Paint {
3755

3856
/** Create a new [AndroidPaint] instance backed by a newly created [android.graphics.Paint] */
3957
constructor() : this(makeNativePaint())
@@ -42,7 +60,11 @@ class AndroidPaint(private var internalPaint: android.graphics.Paint) : Paint {
4260
private var internalShader: Shader? = null
4361
private var internalColorFilter: ColorFilter? = null
4462

45-
override fun asFrameworkPaint(): NativePaint = internalPaint
63+
@Deprecated(
64+
message = "Use asAndroidPaint() extension instead",
65+
replaceWith = ReplaceWith("asAndroidPaint()"),
66+
)
67+
override fun asFrameworkPaint(): android.graphics.Paint = internalPaint
4668

4769
override var alpha: Float
4870
get() = internalPaint.getNativeAlpha()
@@ -136,7 +158,7 @@ internal fun makeNativePaint() =
136158
android.graphics.Paint.FILTER_BITMAP_FLAG
137159
)
138160

139-
internal fun NativePaint.setNativeBlendMode(mode: BlendMode) {
161+
internal fun android.graphics.Paint.setNativeBlendMode(mode: BlendMode) {
140162
if (Build.VERSION.SDK_INT >= 29) {
141163
// All blend modes supported in Q
142164
WrapperVerificationHelperMethods.setBlendMode(this, mode)
@@ -146,76 +168,76 @@ internal fun NativePaint.setNativeBlendMode(mode: BlendMode) {
146168
}
147169
}
148170

149-
internal fun NativePaint.setNativeColorFilter(value: ColorFilter?) {
171+
internal fun android.graphics.Paint.setNativeColorFilter(value: ColorFilter?) {
150172
colorFilter = value?.asAndroidColorFilter()
151173
}
152174

153-
internal fun NativePaint.getNativeAlpha() = this.alpha / 255f
175+
internal fun android.graphics.Paint.getNativeAlpha() = this.alpha / 255f
154176

155-
internal fun NativePaint.setNativeAlpha(value: Float) {
177+
internal fun android.graphics.Paint.setNativeAlpha(value: Float) {
156178
this.alpha = kotlin.math.round(value * 255.0f).toInt()
157179
}
158180

159-
internal fun NativePaint.getNativeAntiAlias(): Boolean = this.isAntiAlias
181+
internal fun android.graphics.Paint.getNativeAntiAlias(): Boolean = this.isAntiAlias
160182

161-
internal fun NativePaint.setNativeAntiAlias(value: Boolean) {
183+
internal fun android.graphics.Paint.setNativeAntiAlias(value: Boolean) {
162184
this.isAntiAlias = value
163185
}
164186

165-
internal fun NativePaint.getNativeColor(): Color = Color(this.color)
187+
internal fun android.graphics.Paint.getNativeColor(): Color = Color(this.color)
166188

167-
internal fun NativePaint.setNativeColor(value: Color) {
189+
internal fun android.graphics.Paint.setNativeColor(value: Color) {
168190
this.color = value.toArgb()
169191
}
170192

171-
internal fun NativePaint.setNativeStyle(value: PaintingStyle) {
193+
internal fun android.graphics.Paint.setNativeStyle(value: PaintingStyle) {
172194
// TODO(njawad): Platform also supports Paint.Style.FILL_AND_STROKE)
173195
this.style =
174196
when (value) {
175-
PaintingStyle.Stroke -> android.graphics.Paint.Style.STROKE
176-
else -> android.graphics.Paint.Style.FILL
197+
PaintingStyle.Stroke -> Style.STROKE
198+
else -> Style.FILL
177199
}
178200
}
179201

180-
internal fun NativePaint.getNativeStyle() =
202+
internal fun android.graphics.Paint.getNativeStyle() =
181203
when (this.style) {
182-
android.graphics.Paint.Style.STROKE -> PaintingStyle.Stroke
204+
Style.STROKE -> PaintingStyle.Stroke
183205
else -> PaintingStyle.Fill
184206
}
185207

186-
internal fun NativePaint.getNativeStrokeWidth(): Float = this.strokeWidth
208+
internal fun android.graphics.Paint.getNativeStrokeWidth(): Float = this.strokeWidth
187209

188-
internal fun NativePaint.setNativeStrokeWidth(value: Float) {
210+
internal fun android.graphics.Paint.setNativeStrokeWidth(value: Float) {
189211
this.strokeWidth = value
190212
}
191213

192-
internal fun NativePaint.getNativeStrokeCap(): StrokeCap =
214+
internal fun android.graphics.Paint.getNativeStrokeCap(): StrokeCap =
193215
when (this.strokeCap) {
194-
android.graphics.Paint.Cap.BUTT -> StrokeCap.Butt
195-
android.graphics.Paint.Cap.ROUND -> StrokeCap.Round
196-
android.graphics.Paint.Cap.SQUARE -> StrokeCap.Square
216+
Cap.BUTT -> StrokeCap.Butt
217+
Cap.ROUND -> StrokeCap.Round
218+
Cap.SQUARE -> StrokeCap.Square
197219
else -> StrokeCap.Butt
198220
}
199221

200-
internal fun NativePaint.setNativeStrokeCap(value: StrokeCap) {
222+
internal fun android.graphics.Paint.setNativeStrokeCap(value: StrokeCap) {
201223
this.strokeCap =
202224
when (value) {
203-
StrokeCap.Square -> android.graphics.Paint.Cap.SQUARE
204-
StrokeCap.Round -> android.graphics.Paint.Cap.ROUND
205-
StrokeCap.Butt -> android.graphics.Paint.Cap.BUTT
206-
else -> android.graphics.Paint.Cap.BUTT
225+
StrokeCap.Square -> Cap.SQUARE
226+
StrokeCap.Round -> Cap.ROUND
227+
StrokeCap.Butt -> Cap.BUTT
228+
else -> Cap.BUTT
207229
}
208230
}
209231

210-
internal fun NativePaint.getNativeStrokeJoin(): StrokeJoin =
232+
internal fun android.graphics.Paint.getNativeStrokeJoin(): StrokeJoin =
211233
when (this.strokeJoin) {
212234
android.graphics.Paint.Join.MITER -> StrokeJoin.Miter
213235
android.graphics.Paint.Join.BEVEL -> StrokeJoin.Bevel
214236
android.graphics.Paint.Join.ROUND -> StrokeJoin.Round
215237
else -> StrokeJoin.Miter
216238
}
217239

218-
internal fun NativePaint.setNativeStrokeJoin(value: StrokeJoin) {
240+
internal fun android.graphics.Paint.setNativeStrokeJoin(value: StrokeJoin) {
219241
this.strokeJoin =
220242
when (value) {
221243
StrokeJoin.Miter -> android.graphics.Paint.Join.MITER
@@ -225,13 +247,13 @@ internal fun NativePaint.setNativeStrokeJoin(value: StrokeJoin) {
225247
}
226248
}
227249

228-
internal fun NativePaint.getNativeStrokeMiterLimit(): Float = this.strokeMiter
250+
internal fun android.graphics.Paint.getNativeStrokeMiterLimit(): Float = this.strokeMiter
229251

230-
internal fun NativePaint.setNativeStrokeMiterLimit(value: Float) {
252+
internal fun android.graphics.Paint.setNativeStrokeMiterLimit(value: Float) {
231253
this.strokeMiter = value
232254
}
233255

234-
internal fun NativePaint.getNativeFilterQuality(): FilterQuality =
256+
internal fun android.graphics.Paint.getNativeFilterQuality(): FilterQuality =
235257
if (!this.isFilterBitmap) {
236258
FilterQuality.None
237259
} else {
@@ -243,15 +265,15 @@ internal fun NativePaint.getNativeFilterQuality(): FilterQuality =
243265
FilterQuality.Low
244266
}
245267

246-
internal fun NativePaint.setNativeFilterQuality(value: FilterQuality) {
268+
internal fun android.graphics.Paint.setNativeFilterQuality(value: FilterQuality) {
247269
this.isFilterBitmap = value != FilterQuality.None
248270
}
249271

250-
internal fun NativePaint.setNativeShader(value: Shader?) {
272+
internal fun android.graphics.Paint.setNativeShader(value: Shader?) {
251273
this.shader = value
252274
}
253275

254-
internal fun NativePaint.setNativePathEffect(value: PathEffect?) {
276+
internal fun android.graphics.Paint.setNativePathEffect(value: PathEffect?) {
255277
this.pathEffect = (value as AndroidPathEffect?)?.nativePathEffect
256278
}
257279

@@ -262,7 +284,7 @@ internal fun NativePaint.setNativePathEffect(value: PathEffect?) {
262284
*/
263285
@RequiresApi(Build.VERSION_CODES.Q)
264286
internal object WrapperVerificationHelperMethods {
265-
fun setBlendMode(paint: NativePaint, mode: BlendMode) {
287+
fun setBlendMode(paint: android.graphics.Paint, mode: BlendMode) {
266288
paint.blendMode = mode.toAndroidBlendMode()
267289
}
268290
}

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

Lines changed: 2 additions & 1 deletion
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.asAndroidPaint
3839
import androidx.compose.ui.graphics.asAndroidPath
3940
import androidx.compose.ui.graphics.asImageBitmap
4041
import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
@@ -467,7 +468,7 @@ actual class GraphicsLayer internal constructor(internal val impl: GraphicsLayer
467468
blendMode = layerBlendMode
468469
colorFilter = layerColorFilter
469470
}
470-
androidCanvas.saveLayer(left, top, right, bottom, paint.asFrameworkPaint())
471+
androidCanvas.saveLayer(left, top, right, bottom, paint.asAndroidPaint())
471472
} else {
472473
androidCanvas.save()
473474
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ package androidx.compose.ui.graphics.shadow
1818

1919
import android.graphics.BlurMaskFilter
2020
import androidx.compose.ui.graphics.Paint
21+
import androidx.compose.ui.graphics.asAndroidPaint
2122

2223
internal actual fun BlurFilter(radius: Float): BlurFilter =
2324
BlurMaskFilter(radius, BlurMaskFilter.Blur.NORMAL)
2425

2526
internal actual typealias BlurFilter = BlurMaskFilter
2627

2728
internal actual fun Paint.setBlurFilter(blur: BlurFilter?) {
28-
asFrameworkPaint().setMaskFilter(blur)
29+
asAndroidPaint().setMaskFilter(blur)
2930
}

0 commit comments

Comments
 (0)