Skip to content
This repository was archived by the owner on Mar 26, 2024. It is now read-only.

Commit 2811e60

Browse files
committed
Support linear gradient paint
Fixes Nyan Progress Bar, for example
1 parent 06ba6cd commit 2811e60

File tree

6 files changed

+19
-11
lines changed

6 files changed

+19
-11
lines changed

projector-client-common/src/commonMain/kotlin/org/jetbrains/projector/client/common/Renderer.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,10 @@ class Renderer(private val renderingSurface: RenderingSurface) {
260260
requestedState.paint = color.toColor()
261261
}
262262

263-
fun setGradientPaint(p1: Point, p2: Point, color1: Int, color2: Int) {
264-
val linearGradient = ctx.createLinearGradient(p1.x, p1.y, p2.x, p2.y).apply {
265-
addColorStop(0.0, color1)
266-
addColorStop(1.0, color2)
263+
fun setGradientPaint(p1: Point, p2: Point, fractions: List<Double>, argbs: List<Int>) {
264+
val linearGradient = ctx.createLinearGradient(p1.x, p1.y, p2.x, p2.y)
265+
fractions.zip(argbs).forEach { (fraction, argb) ->
266+
linearGradient.addColorStop(fraction, argb)
267267
}
268268

269269
requestedState.paint = linearGradient

projector-client-common/src/commonMain/kotlin/org/jetbrains/projector/client/common/SingleRenderingSurfaceProcessor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ class SingleRenderingSurfaceProcessor(private val renderingSurface: RenderingSur
7373
is PaintValue.Gradient -> renderer.setGradientPaint(
7474
p1 = paintValue.p1,
7575
p2 = paintValue.p2,
76-
color1 = paintValue.argb1,
77-
color2 = paintValue.argb2
76+
fractions = paintValue.fractions,
77+
argbs = paintValue.argbs,
7878
)
7979

8080
is PaintValue.Unknown -> logUnsupportedCommand(it)

projector-client-web/src/main/kotlin/org/jetbrains/projector/client/web/protocol/ManualJsonToClientMessageDecoder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ object ManualJsonToClientMessageDecoder : ToClientMessageDecoder {
332332
"a" -> content.toColor()
333333
"b" -> PaintValue.Gradient(
334334
content["a"].unsafeCast<Json>().toPoint(), content["b"].unsafeCast<Json>().toPoint(),
335-
content["c"] as Int, content["d"] as Int
335+
content["c"].unsafeCast<Array<Double>>().toList(), content["d"].unsafeCast<Array<Int>>().toList(),
336336
)
337337
"c" -> PaintValue.Unknown(content["a"] as String)
338338
else -> throw IllegalArgumentException("Unsupported paint value type: ${JSON.stringify(this)}")

projector-common/src/commonMain/kotlin/org/jetbrains/projector/common/protocol/data/PaintValue.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ sealed class PaintValue {
4444
@SerialName("b")
4545
val p2: Point,
4646
@SerialName("c")
47-
val argb1: Int,
47+
val fractions: List<Double>,
4848
@SerialName("d")
49-
val argb2: Int,
49+
val argbs: List<Int>,
5050
) : PaintValue()
5151

5252
@Serializable

projector-common/src/commonMain/kotlin/org/jetbrains/projector/common/protocol/handshake/Constant.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,5 @@ val commonVersionList = listOf(
6363
-1867356666,
6464
1741530029,
6565
2040465192,
66+
-795345262,
6667
)

projector-server-core/src/main/kotlin/org/jetbrains/projector/server/core/convert/toClient/Convert.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,15 @@ public fun Paint.toPaintValue(): PaintValue = when (this) {
169169
is GradientPaint -> PaintValue.Gradient(
170170
p1 = point1.toPoint(),
171171
p2 = point2.toPoint(),
172-
argb1 = color1.rgb,
173-
argb2 = color2.rgb
172+
fractions = listOf(0.0, 1.0),
173+
argbs = listOf(color1.rgb, color2.rgb),
174+
)
175+
176+
is LinearGradientPaint -> PaintValue.Gradient(
177+
p1 = startPoint.toPoint(),
178+
p2 = endPoint.toPoint(),
179+
fractions = fractions.map(Float::toDouble),
180+
argbs = colors.map { it.rgb },
174181
)
175182

176183
is MultipleGradientPaint -> PaintValue.Unknown("MultipleGradientPaint, maybe split to Linear and Radial")

0 commit comments

Comments
 (0)