Skip to content

Commit

Permalink
Remove LayoutAwareModifierNode and onPlaced again (#383)
Browse files Browse the repository at this point in the history
It was added again in #372, to fix some drawing issues. However it has
led to some performance issues. I've found the underlying issue from the
previous code, therefore this can be disabled again.
  • Loading branch information
chrisbanes authored Nov 2, 2024
1 parent 3cf074a commit dc7b172
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 40 deletions.
4 changes: 2 additions & 2 deletions haze/api/api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ package dev.chrisbanes.haze {
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier hazeChild(androidx.compose.ui.Modifier, dev.chrisbanes.haze.HazeState state, optional dev.chrisbanes.haze.HazeStyle style, optional kotlin.jvm.functions.Function1<? super dev.chrisbanes.haze.HazeChildScope,kotlin.Unit>? block);
}

@dev.chrisbanes.haze.ExperimentalHazeApi public final class HazeChildNode extends androidx.compose.ui.Modifier.Node implements androidx.compose.ui.node.CompositionLocalConsumerModifierNode androidx.compose.ui.node.DrawModifierNode androidx.compose.ui.node.GlobalPositionAwareModifierNode dev.chrisbanes.haze.HazeChildScope androidx.compose.ui.node.LayoutAwareModifierNode androidx.compose.ui.node.ObserverModifierNode {
@dev.chrisbanes.haze.ExperimentalHazeApi public final class HazeChildNode extends androidx.compose.ui.Modifier.Node implements androidx.compose.ui.node.CompositionLocalConsumerModifierNode androidx.compose.ui.node.DrawModifierNode androidx.compose.ui.node.GlobalPositionAwareModifierNode dev.chrisbanes.haze.HazeChildScope androidx.compose.ui.node.ObserverModifierNode {
ctor public HazeChildNode(dev.chrisbanes.haze.HazeState state, optional dev.chrisbanes.haze.HazeStyle style, optional kotlin.jvm.functions.Function1<? super dev.chrisbanes.haze.HazeChildScope,kotlin.Unit>? block);
method public void draw(androidx.compose.ui.graphics.drawscope.ContentDrawScope);
method public float getAlpha();
Expand Down Expand Up @@ -96,7 +96,7 @@ package dev.chrisbanes.haze {
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier haze(androidx.compose.ui.Modifier, dev.chrisbanes.haze.HazeState state);
}

@dev.chrisbanes.haze.ExperimentalHazeApi public final class HazeNode extends androidx.compose.ui.Modifier.Node implements androidx.compose.ui.node.CompositionLocalConsumerModifierNode androidx.compose.ui.node.DrawModifierNode androidx.compose.ui.node.GlobalPositionAwareModifierNode androidx.compose.ui.node.LayoutAwareModifierNode {
@dev.chrisbanes.haze.ExperimentalHazeApi public final class HazeNode extends androidx.compose.ui.Modifier.Node implements androidx.compose.ui.node.CompositionLocalConsumerModifierNode androidx.compose.ui.node.DrawModifierNode androidx.compose.ui.node.GlobalPositionAwareModifierNode {
ctor public HazeNode(dev.chrisbanes.haze.HazeState state);
method public void draw(androidx.compose.ui.graphics.drawscope.ContentDrawScope);
method public dev.chrisbanes.haze.HazeState getState();
Expand Down
25 changes: 4 additions & 21 deletions haze/src/commonMain/kotlin/dev/chrisbanes/haze/HazeChildNode.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.geometry.isSpecified
import androidx.compose.ui.geometry.takeOrElse
import androidx.compose.ui.geometry.toRect
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
Expand All @@ -28,7 +29,6 @@ import androidx.compose.ui.layout.positionInWindow
import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
import androidx.compose.ui.node.DrawModifierNode
import androidx.compose.ui.node.GlobalPositionAwareModifierNode
import androidx.compose.ui.node.LayoutAwareModifierNode
import androidx.compose.ui.node.ObserverModifierNode
import androidx.compose.ui.node.currentValueOf
import androidx.compose.ui.node.invalidateDraw
Expand All @@ -54,7 +54,6 @@ class HazeChildNode(
var block: (HazeChildScope.() -> Unit)? = null,
) : Modifier.Node(),
CompositionLocalConsumerModifierNode,
LayoutAwareModifierNode,
GlobalPositionAwareModifierNode,
ObserverModifierNode,
DrawModifierNode,
Expand Down Expand Up @@ -219,30 +218,14 @@ class HazeChildNode(
}

override fun onGloballyPositioned(coordinates: LayoutCoordinates) {
onPlaced(coordinates)

log(TAG) {
"onGloballyPositioned: " +
"positionInWindow=${coordinates.positionInWindow()}, " +
"positionInContent=$positionInContent, " +
"size=$size"
}
}

override fun onPlaced(coordinates: LayoutCoordinates) {
onPositioned(coordinates)

log(TAG) {
"onPlaced: " +
"positionInWindow=${coordinates.positionInWindow()}, " +
"positionInContent=$positionInContent, " +
"size=$size"
"positionInWindow=${coordinates.positionInWindow()}"
}
}

private fun onPositioned(coordinates: LayoutCoordinates) {
positionInContent = coordinates.positionInWindow() +
calculateWindowOffset() - state.positionOnScreen
calculateWindowOffset() - state.positionOnScreen.takeOrElse { Offset.Zero }

size = coordinates.size.toSize()

val blurRadiusPx = with(currentValueOf(LocalDensity)) {
Expand Down
18 changes: 1 addition & 17 deletions haze/src/commonMain/kotlin/dev/chrisbanes/haze/HazeNode.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import androidx.compose.ui.layout.positionInWindow
import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
import androidx.compose.ui.node.DrawModifierNode
import androidx.compose.ui.node.GlobalPositionAwareModifierNode
import androidx.compose.ui.node.LayoutAwareModifierNode
import androidx.compose.ui.node.currentValueOf
import androidx.compose.ui.platform.LocalGraphicsContext
import androidx.compose.ui.unit.Dp
Expand All @@ -34,30 +33,15 @@ class HazeNode(
) : Modifier.Node(),
CompositionLocalConsumerModifierNode,
GlobalPositionAwareModifierNode,
LayoutAwareModifierNode,
DrawModifierNode {

override fun onGloballyPositioned(coordinates: LayoutCoordinates) {
onPlaced(coordinates)

log(TAG) {
"onGloballyPositioned: " +
"positionInWindow=${coordinates.positionInWindow()}, " +
"positionInContent=${state.positionOnScreen}"
}
}

override fun onPlaced(coordinates: LayoutCoordinates) {
onPositioned(coordinates)

log(TAG) {
"onPlaced: " +
"positionInWindow=${coordinates.positionInWindow()}, " +
"positionInContent=${state.positionOnScreen}"
"content positionOnScreens=${state.positionOnScreen}"
}
}

private fun onPositioned(coordinates: LayoutCoordinates) {
state.positionOnScreen = coordinates.positionInWindow() + calculateWindowOffset()
}

Expand Down

0 comments on commit dc7b172

Please sign in to comment.