
net.peanuuutz.fork.ui.scene.toast.ToastOwner.kt Maven / Gradle / Ivy
package net.peanuuutz.fork.ui.scene.toast
import androidx.compose.runtime.CompositionContext
import net.minecraft.client.toast.Toast.BASE_HEIGHT
import net.minecraft.client.toast.Toast.Visibility
import net.peanuuutz.fork.ui.foundation.layout.minHeight
import net.peanuuutz.fork.ui.scene.screen.ScreenWindowInfo
import net.peanuuutz.fork.ui.ui.context.owner.AbstractOwner
import net.peanuuutz.fork.ui.ui.context.owner.OwnerContainer
import net.peanuuutz.fork.ui.ui.context.pointer.PointerService
import net.peanuuutz.fork.ui.ui.context.text.ClipboardService
import net.peanuuutz.fork.ui.ui.context.text.TextInputDispatcher
import net.peanuuutz.fork.ui.ui.context.window.CoordinateConvertor
import net.peanuuutz.fork.ui.ui.context.window.WindowInfo
import net.peanuuutz.fork.ui.ui.draw.canvas.Canvas
import net.peanuuutz.fork.ui.ui.layout.DefaultMeasurePolicy
import net.peanuuutz.fork.ui.ui.modifier.Modifier
import net.peanuuutz.fork.ui.ui.modifier.layout.onPlaced
import net.peanuuutz.fork.ui.ui.node.LayoutNode
import net.peanuuutz.fork.ui.ui.unit.FloatOffset
import net.peanuuutz.fork.ui.ui.unit.IntSize
internal class ToastOwner(
context: CompositionContext,
container: OwnerContainer,
shouldReceiveEvents: Boolean,
override val canvas: Canvas
) : AbstractOwner(
compositionContext = context,
container = container,
shouldReceiveEvents = shouldReceiveEvents
),
CoordinateConvertor // Small interfaces don't deserve an object
{
var position: FloatOffset = FloatOffset.Zero
val size: IntSize
get() = _size
private var _size: IntSize = IntSize(0, BASE_HEIGHT)
val state: Visibility
get() = _state
private var _state: Visibility = Visibility.SHOW
override val root: LayoutNode = LayoutNode().apply {
modifier = Modifier
.minHeight(BASE_HEIGHT)
.then(focusOwner.modifier)
.onPlaced { _size = it.size }
measurePolicy = DefaultMeasurePolicy
}
override val clipboardService: ClipboardService?
get() = null
override val coordinateConvertor: CoordinateConvertor
get() = this
override val pointerService: PointerService?
get() = null
override val textInputDispatcher: TextInputDispatcher?
get() = null
override val windowInfo: WindowInfo
get() = ScreenWindowInfo
override fun doDraw() {
val (x, y) = position
canvas.translate(x, y)
super.doDraw()
canvas.translate(-x, -y)
}
override fun rootToWindow(relativeToRoot: FloatOffset): FloatOffset {
return relativeToRoot + position
}
override fun windowToRoot(relativeToWindow: FloatOffset): FloatOffset {
return relativeToWindow - position
}
override fun exit() {
_state = Visibility.HIDE
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy