package net.shadowfacts.cacao.view.button import net.minecraft.util.Identifier import net.shadowfacts.cacao.geometry.Point import net.shadowfacts.cacao.geometry.Size import net.shadowfacts.cacao.util.MouseButton import net.shadowfacts.cacao.util.texture.Texture import net.shadowfacts.cacao.view.TextureView /** * A button for toggling between on/off states. * * @author shadowfacts * @param initialState Whether the button starts as on or off. */ class ToggleButton(initialState: Boolean): AbstractButton(TextureView(if (initialState) ON else OFF).apply { intrinsicContentSize = Size(19.0, 19.0) }, padding = 0.0) { companion object { val ON = Texture(Identifier("asmr", "textures/gui/toggle.png"), 0, 0) val OFF = Texture(Identifier("asmr", "textures/gui/toggle.png"), 0, 19) } private val textureView: TextureView get() = content as TextureView /** * The button's current on/off state. * Updating this property updates the button's texture. */ var state: Boolean = initialState set(value) { field = value textureView.texture = if (value) ON else OFF } override fun mouseClicked(point: Point, mouseButton: MouseButton): Boolean { if (!disabled && (mouseButton == MouseButton.LEFT || mouseButton == MouseButton.RIGHT)) { state = !state } return super.mouseClicked(point, mouseButton) } }