Compare commits
1 Commits
12b6886da8
...
e28daf3b4a
Author | SHA1 | Date |
---|---|---|
Shadowfacts | e28daf3b4a |
|
@ -13,7 +13,7 @@ object ASMR: ModInitializer {
|
||||||
CommandRegistry.INSTANCE.register(false) { dispatcher ->
|
CommandRegistry.INSTANCE.register(false) { dispatcher ->
|
||||||
val command = CommandManager.literal("uitest").executes {
|
val command = CommandManager.literal("uitest").executes {
|
||||||
try {
|
try {
|
||||||
MinecraftClient.getInstance().openScreen(UITest())
|
MinecraftClient.getInstance().openScreen(TestScreen())
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
package net.shadowfacts.asmr
|
||||||
|
|
||||||
|
import net.shadowfacts.kiwidsl.dsl
|
||||||
|
import net.shadowfacts.shadowui.Screen
|
||||||
|
import net.shadowfacts.shadowui.View
|
||||||
|
import net.shadowfacts.shadowui.Window
|
||||||
|
import net.shadowfacts.shadowui.util.Color
|
||||||
|
|
||||||
|
class TestScreen: Screen() {
|
||||||
|
|
||||||
|
init {
|
||||||
|
windows.add(Window().apply {
|
||||||
|
val red = addView(View().apply {
|
||||||
|
backgroundColor = Color(0xff0000)
|
||||||
|
})
|
||||||
|
val green = addView(View().apply {
|
||||||
|
backgroundColor = Color(0x00ff00)
|
||||||
|
})
|
||||||
|
val blue = addView(View().apply {
|
||||||
|
backgroundColor = Color(0x0000ff)
|
||||||
|
})
|
||||||
|
val purple = green.addSubview(View().apply {
|
||||||
|
backgroundColor = Color(0x800080)
|
||||||
|
})
|
||||||
|
|
||||||
|
solver.dsl {
|
||||||
|
red.leftAnchor equalTo 0
|
||||||
|
red.widthAnchor equalTo 200
|
||||||
|
red.topAnchor equalTo 0
|
||||||
|
red.heightAnchor equalTo 100
|
||||||
|
|
||||||
|
green.leftAnchor equalTo (red.leftAnchor + red.widthAnchor + 20)
|
||||||
|
green.widthAnchor equalTo red.widthAnchor
|
||||||
|
green.topAnchor equalTo 0
|
||||||
|
green.heightAnchor equalTo (red.heightAnchor + 100)
|
||||||
|
|
||||||
|
blue.leftAnchor equalTo green.leftAnchor
|
||||||
|
blue.widthAnchor equalTo green.widthAnchor
|
||||||
|
blue.topAnchor equalTo (green.topAnchor + green.heightAnchor)
|
||||||
|
blue.heightAnchor equalTo 50
|
||||||
|
|
||||||
|
purple.widthAnchor equalTo 100
|
||||||
|
purple.heightAnchor equalTo 100
|
||||||
|
purple.centerXAnchor equalTo green.centerXAnchor
|
||||||
|
purple.centerYAnchor equalTo green.centerYAnchor
|
||||||
|
}
|
||||||
|
|
||||||
|
layout()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,54 +0,0 @@
|
||||||
package net.shadowfacts.asmr
|
|
||||||
|
|
||||||
import net.shadowfacts.kiwidsl.dsl
|
|
||||||
import net.shadowfacts.shadowui.UIScreen
|
|
||||||
import net.shadowfacts.shadowui.UIView
|
|
||||||
import net.shadowfacts.shadowui.util.Color
|
|
||||||
|
|
||||||
class UITest: UIScreen() {
|
|
||||||
|
|
||||||
init {
|
|
||||||
val red = UIView().apply {
|
|
||||||
backgroundColor = Color(0xff0000)
|
|
||||||
addView(this)
|
|
||||||
}
|
|
||||||
val green = UIView().apply {
|
|
||||||
backgroundColor = Color(0x00ff00)
|
|
||||||
addView(this)
|
|
||||||
}
|
|
||||||
val blue = UIView().apply {
|
|
||||||
backgroundColor = Color(0x0000ff)
|
|
||||||
addView(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
val purple = UIView().apply {
|
|
||||||
backgroundColor = Color(0x800080)
|
|
||||||
green.addSubview(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
solver.dsl {
|
|
||||||
red.leftAnchor equalTo 0
|
|
||||||
red.widthAnchor equalTo 200
|
|
||||||
red.topAnchor equalTo 0
|
|
||||||
red.heightAnchor equalTo 100
|
|
||||||
|
|
||||||
green.leftAnchor equalTo (red.leftAnchor + red.widthAnchor + 20)
|
|
||||||
green.widthAnchor equalTo red.widthAnchor
|
|
||||||
green.topAnchor equalTo 0
|
|
||||||
green.heightAnchor equalTo (red.heightAnchor + 100)
|
|
||||||
|
|
||||||
blue.leftAnchor equalTo green.leftAnchor
|
|
||||||
blue.widthAnchor equalTo green.widthAnchor
|
|
||||||
blue.topAnchor equalTo (green.topAnchor + green.heightAnchor)
|
|
||||||
blue.heightAnchor equalTo 50
|
|
||||||
|
|
||||||
purple.widthAnchor equalTo 100
|
|
||||||
purple.heightAnchor equalTo 100
|
|
||||||
purple.centerXAnchor equalTo green.centerXAnchor
|
|
||||||
purple.centerYAnchor equalTo green.centerYAnchor
|
|
||||||
}
|
|
||||||
|
|
||||||
layout()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -2,7 +2,7 @@ package net.shadowfacts.shadowui
|
||||||
|
|
||||||
import no.birkett.kiwi.Variable
|
import no.birkett.kiwi.Variable
|
||||||
|
|
||||||
class LayoutVariable(val owner: UIView, val property: String): Variable("LayoutVariable") {
|
class LayoutVariable(val owner: View, val property: String): Variable("LayoutVariable") {
|
||||||
|
|
||||||
override fun getName() = "$owner.$property"
|
override fun getName() = "$owner.$property"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
package net.shadowfacts.shadowui
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.screen.Screen
|
||||||
|
import net.minecraft.network.chat.TextComponent
|
||||||
|
import net.shadowfacts.shadowui.geometry.Point
|
||||||
|
import no.birkett.kiwi.Solver
|
||||||
|
|
||||||
|
open class Screen: Screen(TextComponent("Screen")) {
|
||||||
|
|
||||||
|
val windows = mutableListOf<Window>()
|
||||||
|
|
||||||
|
fun addWindow(window: Window, index: Int? = null) {
|
||||||
|
if (index != null) {
|
||||||
|
windows.add(index, window)
|
||||||
|
} else {
|
||||||
|
windows.add(window)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun render(mouseX: Int, mouseY: Int, delta: Float) {
|
||||||
|
val mouse = Point(mouseX, mouseY)
|
||||||
|
windows.forEach {
|
||||||
|
it.draw(mouse, delta)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,28 +0,0 @@
|
||||||
package net.shadowfacts.shadowui
|
|
||||||
|
|
||||||
import net.minecraft.client.gui.screen.Screen
|
|
||||||
import net.minecraft.network.chat.TextComponent
|
|
||||||
import no.birkett.kiwi.Solver
|
|
||||||
|
|
||||||
open class UIScreen: Screen(TextComponent("UIScreen")) {
|
|
||||||
|
|
||||||
val solver = Solver()
|
|
||||||
|
|
||||||
val views = mutableListOf<UIView>()
|
|
||||||
|
|
||||||
fun addView(view: UIView) {
|
|
||||||
views.add(view)
|
|
||||||
view.solver = solver
|
|
||||||
view.wasAdded()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun layout() {
|
|
||||||
solver.updateVariables()
|
|
||||||
views.forEach(UIView::didLayout)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun render(mouseX: Int, mouseY: Int, delta: Float) {
|
|
||||||
views.forEach(UIView::draw)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -2,12 +2,12 @@ package net.shadowfacts.shadowui
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager
|
import com.mojang.blaze3d.platform.GlStateManager
|
||||||
import net.shadowfacts.kiwidsl.dsl
|
import net.shadowfacts.kiwidsl.dsl
|
||||||
import net.shadowfacts.shadowui.geometry.UIRect
|
import net.shadowfacts.shadowui.geometry.Rect
|
||||||
import net.shadowfacts.shadowui.util.Color
|
import net.shadowfacts.shadowui.util.Color
|
||||||
import net.shadowfacts.shadowui.util.RenderHelper
|
import net.shadowfacts.shadowui.util.RenderHelper
|
||||||
import no.birkett.kiwi.Solver
|
import no.birkett.kiwi.Solver
|
||||||
|
|
||||||
class UIView {
|
class View {
|
||||||
|
|
||||||
lateinit var solver: Solver
|
lateinit var solver: Solver
|
||||||
|
|
||||||
|
@ -22,21 +22,23 @@ class UIView {
|
||||||
val centerYAnchor = LayoutVariable(this, "centerY")
|
val centerYAnchor = LayoutVariable(this, "centerY")
|
||||||
|
|
||||||
// The rectangle for this view in the coordinate system of the parent view.
|
// The rectangle for this view in the coordinate system of the parent view.
|
||||||
lateinit var frame: UIRect
|
lateinit var frame: Rect
|
||||||
// The rectangle for this view in its own coordinate system.
|
// The rectangle for this view in its own coordinate system.
|
||||||
lateinit var bounds: UIRect
|
lateinit var bounds: Rect
|
||||||
|
|
||||||
var backgroundColor = Color(0xff0000)
|
var backgroundColor = Color(0xff0000)
|
||||||
|
|
||||||
var parent: UIView? = null
|
var parent: View? = null
|
||||||
val subviews = mutableListOf<UIView>()
|
val subviews = mutableListOf<View>()
|
||||||
|
|
||||||
fun addSubview(view: UIView) {
|
fun addSubview(view: View): View {
|
||||||
subviews.add(view)
|
subviews.add(view)
|
||||||
view.parent = this
|
view.parent = this
|
||||||
view.solver = solver
|
view.solver = solver
|
||||||
|
|
||||||
view.wasAdded()
|
view.wasAdded()
|
||||||
|
|
||||||
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
fun wasAdded() {
|
fun wasAdded() {
|
||||||
|
@ -53,12 +55,12 @@ class UIView {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun didLayout() {
|
fun didLayout() {
|
||||||
subviews.forEach(UIView::didLayout)
|
subviews.forEach(View::didLayout)
|
||||||
|
|
||||||
val parentLeft = parent?.leftAnchor?.value ?: 0.0
|
val parentLeft = parent?.leftAnchor?.value ?: 0.0
|
||||||
val parentTop = parent?.topAnchor?.value ?: 0.0
|
val parentTop = parent?.topAnchor?.value ?: 0.0
|
||||||
frame = UIRect(leftAnchor.value - parentLeft, topAnchor.value - parentTop, widthAnchor.value, heightAnchor.value)
|
frame = Rect(leftAnchor.value - parentLeft, topAnchor.value - parentTop, widthAnchor.value, heightAnchor.value)
|
||||||
bounds = UIRect(0.0, 0.0, widthAnchor.value, heightAnchor.value)
|
bounds = Rect(0.0, 0.0, widthAnchor.value, heightAnchor.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun draw() {
|
fun draw() {
|
||||||
|
@ -69,7 +71,7 @@ class UIView {
|
||||||
|
|
||||||
drawContent()
|
drawContent()
|
||||||
|
|
||||||
subviews.forEach(UIView::draw)
|
subviews.forEach(View::draw)
|
||||||
|
|
||||||
GlStateManager.popMatrix()
|
GlStateManager.popMatrix()
|
||||||
}
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package net.shadowfacts.shadowui
|
||||||
|
|
||||||
|
import net.shadowfacts.shadowui.geometry.Point
|
||||||
|
import no.birkett.kiwi.Solver
|
||||||
|
|
||||||
|
class Window {
|
||||||
|
|
||||||
|
var solver = Solver()
|
||||||
|
|
||||||
|
val views = mutableListOf<View>()
|
||||||
|
|
||||||
|
fun <T: View> addView(view: T): T {
|
||||||
|
views.add(view)
|
||||||
|
view.solver = solver
|
||||||
|
|
||||||
|
view.wasAdded()
|
||||||
|
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
fun layout() {
|
||||||
|
solver.updateVariables()
|
||||||
|
views.forEach(View::didLayout)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun draw(mouse: Point, delta: Float) {
|
||||||
|
views.forEach(View::draw)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package net.shadowfacts.shadowui.geometry
|
||||||
|
|
||||||
|
class Point(val x: Double, val y: Double) {
|
||||||
|
|
||||||
|
constructor(x: Int, y: Int): this(x.toDouble(), y.toDouble())
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
package net.shadowfacts.shadowui.geometry
|
package net.shadowfacts.shadowui.geometry
|
||||||
|
|
||||||
data class UIRect(val left: Double, val top: Double, val width: Double, val height: Double) {
|
data class Rect(val left: Double, val top: Double, val width: Double, val height: Double) {
|
||||||
|
|
||||||
val right: Double
|
val right: Double
|
||||||
get() = left + width
|
get() = left + width
|
|
@ -1,11 +1,11 @@
|
||||||
package net.shadowfacts.shadowui.util
|
package net.shadowfacts.shadowui.util
|
||||||
|
|
||||||
import net.minecraft.client.gui.DrawableHelper
|
import net.minecraft.client.gui.DrawableHelper
|
||||||
import net.shadowfacts.shadowui.geometry.UIRect
|
import net.shadowfacts.shadowui.geometry.Rect
|
||||||
|
|
||||||
object RenderHelper {
|
object RenderHelper {
|
||||||
|
|
||||||
fun fill(rect: UIRect, color: Color) {
|
fun fill(rect: Rect, color: Color) {
|
||||||
DrawableHelper.fill(rect.left.toInt(), rect.top.toInt(), rect.right.toInt(), rect.bottom.toInt(), color.argb)
|
DrawableHelper.fill(rect.left.toInt(), rect.top.toInt(), rect.right.toInt(), rect.bottom.toInt(), color.argb)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue