Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
2eb48f5
Revert "Temporary revert global shadow positioning (#1777)"
MatkovIvan Jan 17, 2025
5874d16
Use layer placeholder
MatkovIvan Jan 9, 2025
260184b
Remove parent layer invalidation
MatkovIvan Jan 9, 2025
3d322c1
API cleanup and dump
MatkovIvan Jan 9, 2025
0f92203
Update tests
MatkovIvan Jan 9, 2025
ef6950b
Set test skiko version
MatkovIvan Jan 9, 2025
d31b1fa
Cleanup empty requestDraw calls
MatkovIvan Jan 9, 2025
b83783b
Cleanup removed dispose usages
MatkovIvan Jan 9, 2025
f3c1cf7
Adopt layers invalidation
MatkovIvan Jan 10, 2025
90d259d
Fix invalidation on updating placeholder
MatkovIvan Jan 10, 2025
b8e5338
Fix ported from Android owned layers invalidation logic
MatkovIvan Jan 10, 2025
7dc5a9c
Apply GraphicsLayer transform without parent invalidation
MatkovIvan Jan 10, 2025
1f84421
Adopt GraphicsLayer tests
MatkovIvan Jan 10, 2025
b1ba1e6
Fix more tests
MatkovIvan Jan 10, 2025
2676dbb
Use restoreToCount instead of manual counting
MatkovIvan Jan 14, 2025
f470e3c
Cache skia matrix
MatkovIvan Jan 14, 2025
d98bab9
Revert matrix conversion: skiko stores it in different order
MatkovIvan Jan 14, 2025
6806879
Use release version of skiko
MatkovIvan Jan 14, 2025
49f7817
Update skiko to 0.8.22.1
MatkovIvan Jan 14, 2025
3620d7e
GraphicsLayer based on skiko.node.RenderNode
MatkovIvan Jan 16, 2025
4024f70
Revert API dump and tests. Update skiko
MatkovIvan Jan 17, 2025
22e2a84
Cleanup extra changes
MatkovIvan Jan 20, 2025
0fe36d8
Restore `alphaMultiplier` application during rendering
MatkovIvan Jan 20, 2025
42dbd95
Apply newer skiko build
MatkovIvan Jan 20, 2025
dc7c5ab
Fix releasing graphicsLayer
MatkovIvan Jan 30, 2025
0367fbd
Update skiko to 0.8.23
MatkovIvan Jan 30, 2025
253b0ec
Merge branch 'jb-main' into ivan.matkov/layer-rendernode
MatkovIvan Jan 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import org.jetbrains.skia.RRect as SkRRect
import org.jetbrains.skia.Rect as SkRect
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.RoundRect
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
Expand Down Expand Up @@ -121,11 +120,6 @@ internal class SkiaBackedCanvas(val skia: org.jetbrains.skia.Canvas) : Canvas {
skia.clipPath(path.asSkiaPath(), clipOp.toSkia(), antiAlias)
}

fun clipRoundRect(rect: RoundRect, clipOp: ClipOp = ClipOp.Intersect) {
val antiAlias = true
nativeCanvas.clipRRect(rect.toSkiaRRect(), clipOp.toSkia(), antiAlias)
}

override fun drawLine(p1: Offset, p2: Offset, paint: Paint) {
skia.drawLine(p1.x, p1.y, p2.x, p2.y, paint.skia)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,31 +16,21 @@

package androidx.compose.ui.graphics

import androidx.compose.runtime.snapshots.SnapshotStateObserver
import androidx.compose.ui.InternalComposeUiApi
import androidx.compose.ui.graphics.layer.GraphicsLayer
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
import org.jetbrains.skia.Point3
import org.jetbrains.skiko.node.RenderNode
import org.jetbrains.skiko.node.RenderNodeContext

@InternalComposeUiApi
class SkiaGraphicsContext(
internal val measureDrawBounds: Boolean = false,
measureDrawBounds: Boolean = false,
): GraphicsContext {
internal val lightGeometry = LightGeometry()
internal val lightInfo = LightInfo()
internal val snapshotObserver = SnapshotStateObserver { command ->
command()
}

init {
snapshotObserver.start()
}
private val renderNodeContext = RenderNodeContext(
measureDrawBounds = measureDrawBounds,
)

fun dispose() {
snapshotObserver.stop()
snapshotObserver.clear()
renderNodeContext.close()
}

fun setLightingInfo(
Expand All @@ -51,26 +41,21 @@ class SkiaGraphicsContext(
ambientShadowAlpha: Float = 0f,
spotShadowAlpha: Float = 0f
) {
lightGeometry.center = Point3(centerX, centerY, centerZ)
lightGeometry.radius = radius
lightInfo.ambientShadowAlpha = ambientShadowAlpha
lightInfo.spotShadowAlpha = spotShadowAlpha
renderNodeContext.setLightingInfo(
centerX,
centerY,
centerZ,
radius,
ambientShadowAlpha,
spotShadowAlpha
)
}

override fun createGraphicsLayer() = GraphicsLayer(this)
override fun createGraphicsLayer() = GraphicsLayer(
renderNode = RenderNode(renderNodeContext)
)

override fun releaseGraphicsLayer(layer: GraphicsLayer) {
layer.release()
}
}

// Adoption of frameworks/base/libs/hwui/Lighting.h
internal data class LightGeometry(
var center: Point3 = Point3(Float.MIN_VALUE, Float.MIN_VALUE, Float.MIN_VALUE),
var radius: Float = 0f
)

internal data class LightInfo(
var ambientShadowAlpha: Float = 0f,
var spotShadowAlpha: Float = 0f
)
Loading