Skip to content

Commit 49a9cbb

Browse files
Version 1.3.10.3
1 parent 89be051 commit 49a9cbb

File tree

6 files changed

+63
-46
lines changed

6 files changed

+63
-46
lines changed

changelog/release-1.3.10.3.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Title: Bug Patch
2+
Summary: Minor bug fixes
3+
4+
## Bug Fixes
5+
- Fixed Essential screens not rendering properly on Minecraft 1.17-1.20.6

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ minecraftVersion=11202
1010
# TODO remove once upgrading to Loom 1.10
1111
# fabric-api 1.21.5 was built with Loom 1.10, seems to work well enough in dev with our current 1.7 though
1212
loom.ignoreDependencyLoomVersionValidation=true
13-
version=1.3.10.2
13+
version=1.3.10.3

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
universalcraft = "440"
2+
universalcraft = "442"
33
elementa = "712"
44
vigilance = "306"
55
mixinextras = "0.4.0"

gui/essential/src/main/kotlin/gg/essential/gui/EssentialPalette.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import gg.essential.elementa.components.UIImage
1616
import gg.essential.elementa.state.BasicState
1717
import gg.essential.elementa.state.State
1818
import gg.essential.elementa.utils.withAlpha
19+
import gg.essential.gui.elementa.state.v2.stateOf
1920
import gg.essential.gui.friends.message.v2.SendState
2021
import gg.essential.gui.image.ImageFactory
2122
import gg.essential.gui.image.ImageGeneratorSettings
@@ -26,6 +27,8 @@ import java.awt.image.BufferedImage
2627
import java.util.concurrent.CompletableFuture
2728
import kotlin.random.Random
2829

30+
import gg.essential.gui.elementa.state.v2.State as StateV2
31+
2932
object EssentialPalette {
3033

3134
/* Messaging */
@@ -520,6 +523,19 @@ object EssentialPalette {
520523
}
521524

522525
/* Utilities for colors */
526+
fun getTextColor(hovered: StateV2<Boolean>, enabled: StateV2<Boolean> = stateOf(true)): StateV2<Color> =
527+
StateV2 {
528+
if (enabled()) {
529+
if(hovered()) {
530+
TEXT_HIGHLIGHT
531+
} else {
532+
TEXT
533+
}
534+
} else {
535+
TEXT_DISABLED
536+
}
537+
}
538+
523539
fun getTextColor(hovered: State<Boolean>, enabled: State<Boolean>): State<Color> {
524540
return hovered.zip(enabled).map { (hovered, enabled) ->
525541
if (enabled) {

gui/essential/src/main/kotlin/gg/essential/gui/common/EssentialSlider.kt

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,27 @@ package gg.essential.gui.common
1313

1414
import gg.essential.elementa.components.UIBlock
1515
import gg.essential.elementa.components.UIContainer
16-
import gg.essential.elementa.constraints.CenterConstraint
17-
import gg.essential.elementa.dsl.*
18-
import gg.essential.elementa.state.BasicState
19-
import gg.essential.elementa.state.State
20-
import gg.essential.elementa.state.toConstraint
16+
import gg.essential.elementa.dsl.provideDelegate
2117
import gg.essential.gui.EssentialPalette
18+
import gg.essential.gui.elementa.state.v2.State
19+
import gg.essential.gui.elementa.state.v2.combinators.letState
20+
import gg.essential.gui.elementa.state.v2.combinators.map
21+
import gg.essential.gui.elementa.state.v2.mutableStateOf
22+
import gg.essential.gui.elementa.state.v2.onChange
23+
import gg.essential.gui.layoutdsl.Alignment
24+
import gg.essential.gui.layoutdsl.Modifier
25+
import gg.essential.gui.layoutdsl.alignHorizontal
26+
import gg.essential.gui.layoutdsl.alignVertical
27+
import gg.essential.gui.layoutdsl.color
28+
import gg.essential.gui.layoutdsl.fillHeight
29+
import gg.essential.gui.layoutdsl.fillWidth
30+
import gg.essential.gui.layoutdsl.layout
31+
import gg.essential.gui.layoutdsl.then
32+
import gg.essential.gui.layoutdsl.tooltip
33+
import gg.essential.gui.layoutdsl.whenTrue
34+
import gg.essential.gui.layoutdsl.width
2235
import gg.essential.universal.USound
23-
import gg.essential.util.bindEssentialTooltip
24-
import gg.essential.gui.util.hoveredState
36+
import gg.essential.gui.util.hoveredStateV2
2537
import gg.essential.vigilance.utils.onLeftClick
2638
import kotlin.math.round
2739

@@ -31,39 +43,22 @@ abstract class EssentialSlider(
3143

3244
private val notchWidth = 3
3345

34-
val fraction = BasicState(initialValueFraction)
46+
val fraction = mutableStateOf(initialValueFraction)
3547
private val updates = mutableListOf<(Float) -> Unit>()
3648

37-
private val sliderBar by UIBlock(EssentialPalette.BUTTON_HIGHLIGHT).constrain {
38-
width = 100.percent
39-
height = 100.percent - 2.pixels
40-
y = CenterConstraint()
41-
} childOf this
42-
43-
private val sliderNotch by UIBlock().constrain {
44-
width = notchWidth.pixels
45-
height = 100.percent
46-
y = CenterConstraint()
47-
x = basicXConstraint {
48-
it.parent.getLeft() + fraction.get() * (it.parent.getWidth() - notchWidth)
49-
}
50-
} childOf this
49+
private val sliderBar by UIBlock(EssentialPalette.BUTTON_HIGHLIGHT)
5150

52-
private val sliderCovered by UIBlock(EssentialPalette.ACCENT_BLUE).constrain {
53-
height = 100.percent - 2.pixels
54-
width = basicWidthConstraint {
55-
sliderNotch.getLeft() - this@EssentialSlider.getLeft()
56-
}
57-
y = CenterConstraint()
58-
} childOf this
51+
private val sliderNotch by UIBlock()
52+
53+
private val sliderCovered by UIBlock(EssentialPalette.ACCENT_BLUE)
5954

6055
private var hoveredState: State<Boolean>
6156

6257
init {
6358
// Elementa's onMouseDrag does not check whether the mouse is within the component
6459
// So we need to do that ourselves. We want to ignore any drag that does not start within
6560
// this component
66-
val mouseHeld = BasicState(false)
61+
val mouseHeld = mutableStateOf(false)
6762

6863
onLeftClick {
6964
USound.playButtonPress()
@@ -80,19 +75,20 @@ abstract class EssentialSlider(
8075
updateSlider(mouseX)
8176
}
8277
}
83-
hoveredState = hoveredState() or sliderNotch.hoveredState() or mouseHeld
78+
hoveredState = State { hoveredStateV2()() || mouseHeld() }
8479

85-
sliderNotch.setColor(EssentialPalette.getTextColor(hoveredState).toConstraint())
86-
}
87-
88-
override fun afterInitialization() {
89-
super.afterInitialization()
90-
// Kotlin's properties set in a constructor don't have their values written to
91-
// until after the parent object is initialized. If this was in the constructor,
92-
// the result of reduceFractionToDisplay would not yield the expected result
93-
sliderNotch.bindEssentialTooltip(hoveredState, fraction.map { fraction ->
94-
reduceFractionToDisplay(fraction)
95-
})
80+
this.layout {
81+
sliderBar(Modifier.fillWidth().fillHeight(padding = 1f).alignVertical(Alignment.Center)) {
82+
sliderCovered(Modifier.fillHeight().then(State { Modifier.fillWidth(fraction()) }))
83+
}
84+
sliderNotch(
85+
Modifier.width(notchWidth.toFloat())
86+
.fillHeight()
87+
.alignHorizontal { parentSize, _ -> fraction.get() * (parentSize - notchWidth) }
88+
.color(EssentialPalette.getTextColor(hoveredState))
89+
.whenTrue(hoveredState, Modifier.tooltip(fraction.letState { reduceFractionToDisplay(it) }))
90+
)
91+
}
9692
}
9793

9894
/**
@@ -135,7 +131,7 @@ class IntEssentialSlider(
135131
}
136132

137133
init {
138-
intValue.onSetValue {
134+
intValue.onChange(this) {
139135
for (update in updates) {
140136
update(it)
141137
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9ab9826c83
1+
1400d22d59

0 commit comments

Comments
 (0)