Cacao: Misc changes
This commit is contained in:
parent
c1ecdacc06
commit
d20ba7460e
|
@ -8,6 +8,7 @@ import net.minecraft.client.render.*
|
|||
import net.minecraft.client.sound.PositionedSoundInstance
|
||||
import net.minecraft.client.util.math.MatrixStack
|
||||
import net.minecraft.sound.SoundEvent
|
||||
import net.minecraft.util.math.Matrix4f
|
||||
import net.shadowfacts.cacao.geometry.Point
|
||||
import net.shadowfacts.cacao.geometry.Rect
|
||||
import net.shadowfacts.cacao.util.texture.Texture
|
||||
|
@ -40,11 +41,11 @@ object RenderHelper {
|
|||
/**
|
||||
* Binds and draws the given [texture] filling the [rect].
|
||||
*/
|
||||
fun draw(rect: Rect, texture: Texture) {
|
||||
fun draw(matrixStack: MatrixStack, rect: Rect, texture: Texture) {
|
||||
if (disabled) return
|
||||
color(1f, 1f, 1f, 1f)
|
||||
MinecraftClient.getInstance().textureManager.bindTexture(texture.location)
|
||||
draw(rect.left, rect.top, texture.u, texture.v, rect.width, rect.height, texture.width, texture.height)
|
||||
draw(matrixStack, rect.left, rect.top, texture.u, texture.v, rect.width, rect.height, texture.width, texture.height)
|
||||
}
|
||||
|
||||
fun drawLine(start: Point, end: Point, z: Double, width: Float, color: Color) {
|
||||
|
@ -62,27 +63,29 @@ object RenderHelper {
|
|||
/**
|
||||
* Draws the bound texture with the given screen and texture position and size.
|
||||
*/
|
||||
fun draw(x: Double, y: Double, u: Int, v: Int, width: Double, height: Double, textureWidth: Int, textureHeight: Int) {
|
||||
fun draw(matrixStack: MatrixStack, x: Double, y: Double, u: Int, v: Int, width: Double, height: Double, textureWidth: Int, textureHeight: Int) {
|
||||
if (disabled) return
|
||||
val uStart = u.toFloat() / textureWidth
|
||||
val uEnd = (u + width).toFloat() / textureWidth
|
||||
val vStart = v.toFloat() / textureHeight
|
||||
val vEnd = (v + height).toFloat() / textureHeight
|
||||
drawTexturedQuad(x, x + width, y, y + height, 0.0, uStart, uEnd, vStart, vEnd)
|
||||
drawTexturedQuad(matrixStack.peek().model, x, x + width, y, y + height, 0.0, uStart, uEnd, vStart, vEnd)
|
||||
}
|
||||
|
||||
// Copied from net.minecraft.client.gui.DrawableHelper
|
||||
private fun drawTexturedQuad(xStart: Double, xEnd: Double, yStart: Double, yEnd: Double, z: Double, uStart: Float, uEnd: Float, vStart: Float, vEnd: Float) {
|
||||
val tessellator = Tessellator.getInstance()
|
||||
val buffer = tessellator.buffer
|
||||
buffer.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEXTURE)
|
||||
buffer.vertex(xStart, yEnd, z).texture(uStart, vEnd).next()
|
||||
buffer.vertex(xEnd, yEnd, z).texture(uEnd, vEnd).next()
|
||||
buffer.vertex(xEnd, yStart, z).texture(uEnd, vStart).next()
|
||||
buffer.vertex(xStart, yStart, z).texture(uStart, vStart).next()
|
||||
tessellator.draw()
|
||||
private fun drawTexturedQuad(matrix: Matrix4f, x0: Double, x1: Double, y0: Double, y1: Double, z: Double, u0: Float, u1: Float, v0: Float, v1: Float) {
|
||||
val bufferBuilder = Tessellator.getInstance().buffer
|
||||
bufferBuilder.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEXTURE)
|
||||
bufferBuilder.vertex(matrix, x0.toFloat(), y1.toFloat(), z.toFloat()).texture(u0, v1).next()
|
||||
bufferBuilder.vertex(matrix, x1.toFloat(), y1.toFloat(), z.toFloat()).texture(u1, v1).next()
|
||||
bufferBuilder.vertex(matrix, x1.toFloat(), y0.toFloat(), z.toFloat()).texture(u1, v0).next()
|
||||
bufferBuilder.vertex(matrix, x0.toFloat(), y0.toFloat(), z.toFloat()).texture(u0, v0).next()
|
||||
bufferBuilder.end()
|
||||
RenderSystem.enableAlphaTest()
|
||||
BufferRenderer.draw(bufferBuilder)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see org.lwjgl.opengl.GL11.glPushMatrix
|
||||
*/
|
||||
|
@ -127,4 +130,4 @@ object RenderHelper {
|
|||
return color(color.red, color.green, color.blue, color.alpha)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.shadowfacts.cacao.view
|
|||
import net.minecraft.client.MinecraftClient
|
||||
import net.minecraft.client.font.TextRenderer
|
||||
import net.minecraft.client.util.math.MatrixStack
|
||||
import net.minecraft.text.LiteralText
|
||||
import net.minecraft.text.OrderedText
|
||||
import net.minecraft.text.Text
|
||||
import net.shadowfacts.cacao.geometry.Point
|
||||
|
@ -44,6 +45,14 @@ class Label(
|
|||
LEFT, CENTER, RIGHT
|
||||
}
|
||||
|
||||
constructor(
|
||||
text: String,
|
||||
shadow: Boolean = true,
|
||||
maxLines: Int = 0,
|
||||
wrappingMode: WrappingMode = WrappingMode.WRAP,
|
||||
textAlignment: TextAlignment = TextAlignment.LEFT,
|
||||
): this(LiteralText(text), shadow, maxLines, wrappingMode, textAlignment)
|
||||
|
||||
/**
|
||||
* The text of this label. Mutating this field will update the intrinsic content size and trigger a layout.
|
||||
*/
|
||||
|
|
|
@ -77,60 +77,60 @@ open class NinePatchView(val ninePatch: NinePatchTexture): View() {
|
|||
}
|
||||
|
||||
override fun drawContent(matrixStack: MatrixStack, mouse: Point, delta: Float) {
|
||||
drawCorners()
|
||||
drawEdges()
|
||||
drawCenter()
|
||||
drawCorners(matrixStack)
|
||||
drawEdges(matrixStack)
|
||||
drawCenter(matrixStack)
|
||||
}
|
||||
|
||||
private fun drawCorners() {
|
||||
RenderHelper.draw(topLeft, ninePatch.topLeft)
|
||||
RenderHelper.draw(topRight, ninePatch.topRight)
|
||||
RenderHelper.draw(bottomLeft, ninePatch.bottomLeft)
|
||||
RenderHelper.draw(bottomRight, ninePatch.bottomRight)
|
||||
private fun drawCorners(matrixStack: MatrixStack) {
|
||||
RenderHelper.draw(matrixStack, topLeft, ninePatch.topLeft)
|
||||
RenderHelper.draw(matrixStack, topRight, ninePatch.topRight)
|
||||
RenderHelper.draw(matrixStack, bottomLeft, ninePatch.bottomLeft)
|
||||
RenderHelper.draw(matrixStack, bottomRight, ninePatch.bottomRight)
|
||||
}
|
||||
|
||||
private fun drawEdges() {
|
||||
private fun drawEdges(matrixStack: MatrixStack) {
|
||||
// Horizontal
|
||||
for (i in 0 until (topMiddle.width.toInt() / ninePatch.centerWidth)) {
|
||||
RenderHelper.draw(topMiddle.left + i * ninePatch.centerWidth, topMiddle.top, ninePatch.topMiddle.u, ninePatch.topMiddle.v, ninePatch.centerWidth.toDouble(), topMiddle.height, ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(bottomMiddle.left + i * ninePatch.centerWidth, bottomMiddle.top, ninePatch.bottomMiddle.u, ninePatch.bottomMiddle.v, ninePatch.centerWidth.toDouble(), bottomMiddle.height, ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, topMiddle.left + i * ninePatch.centerWidth, topMiddle.top, ninePatch.topMiddle.u, ninePatch.topMiddle.v, ninePatch.centerWidth.toDouble(), topMiddle.height, ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, bottomMiddle.left + i * ninePatch.centerWidth, bottomMiddle.top, ninePatch.bottomMiddle.u, ninePatch.bottomMiddle.v, ninePatch.centerWidth.toDouble(), bottomMiddle.height, ninePatch.texture.width, ninePatch.texture.height)
|
||||
}
|
||||
val remWidth = topMiddle.width.toInt() % ninePatch.centerWidth
|
||||
if (remWidth > 0) {
|
||||
RenderHelper.draw(topMiddle.right - remWidth, topMiddle.top, ninePatch.topMiddle.u, ninePatch.topMiddle.v, remWidth.toDouble(), ninePatch.cornerHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(bottomMiddle.right - remWidth, bottomMiddle.top, ninePatch.bottomMiddle.u, ninePatch.bottomMiddle.v, remWidth.toDouble(), ninePatch.cornerHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, topMiddle.right - remWidth, topMiddle.top, ninePatch.topMiddle.u, ninePatch.topMiddle.v, remWidth.toDouble(), ninePatch.cornerHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, bottomMiddle.right - remWidth, bottomMiddle.top, ninePatch.bottomMiddle.u, ninePatch.bottomMiddle.v, remWidth.toDouble(), ninePatch.cornerHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
}
|
||||
|
||||
// Vertical
|
||||
for (i in 0 until (leftMiddle.height.toInt() / ninePatch.centerHeight)) {
|
||||
RenderHelper.draw(leftMiddle.left, leftMiddle.top + i * ninePatch.centerHeight, ninePatch.leftMiddle.u, ninePatch.leftMiddle.v, ninePatch.cornerWidth.toDouble(), ninePatch.centerHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(rightMiddle.left, rightMiddle.top + i * ninePatch.centerHeight, ninePatch.rightMiddle.u, ninePatch.rightMiddle.v, ninePatch.cornerWidth.toDouble(), ninePatch.centerHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, leftMiddle.left, leftMiddle.top + i * ninePatch.centerHeight, ninePatch.leftMiddle.u, ninePatch.leftMiddle.v, ninePatch.cornerWidth.toDouble(), ninePatch.centerHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, rightMiddle.left, rightMiddle.top + i * ninePatch.centerHeight, ninePatch.rightMiddle.u, ninePatch.rightMiddle.v, ninePatch.cornerWidth.toDouble(), ninePatch.centerHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
}
|
||||
val remHeight = leftMiddle.height.toInt() % ninePatch.centerHeight
|
||||
if (remHeight > 0) {
|
||||
RenderHelper.draw(leftMiddle.left, leftMiddle.bottom - remHeight, ninePatch.leftMiddle.u, ninePatch.leftMiddle.v, ninePatch.cornerWidth.toDouble(), remHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(rightMiddle.left, rightMiddle.bottom - remHeight, ninePatch.rightMiddle.u, ninePatch.rightMiddle.v, ninePatch.cornerWidth.toDouble(), remHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, leftMiddle.left, leftMiddle.bottom - remHeight, ninePatch.leftMiddle.u, ninePatch.leftMiddle.v, ninePatch.cornerWidth.toDouble(), remHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, rightMiddle.left, rightMiddle.bottom - remHeight, ninePatch.rightMiddle.u, ninePatch.rightMiddle.v, ninePatch.cornerWidth.toDouble(), remHeight.toDouble(), ninePatch.texture.width, ninePatch.texture.height)
|
||||
}
|
||||
}
|
||||
|
||||
private fun drawCenter() {
|
||||
private fun drawCenter(matrixStack: MatrixStack) {
|
||||
for (i in 0 until (center.height.toInt() / ninePatch.centerHeight)) {
|
||||
drawCenterRow(center.top + i * ninePatch.centerHeight.toDouble(), ninePatch.centerHeight.toDouble())
|
||||
drawCenterRow(matrixStack, center.top + i * ninePatch.centerHeight.toDouble(), ninePatch.centerHeight.toDouble())
|
||||
}
|
||||
val remHeight = center.height.toInt() % ninePatch.centerHeight
|
||||
if (remHeight > 0) {
|
||||
drawCenterRow(center.bottom - remHeight, remHeight.toDouble())
|
||||
drawCenterRow(matrixStack, center.bottom - remHeight, remHeight.toDouble())
|
||||
}
|
||||
}
|
||||
|
||||
private fun drawCenterRow(y: Double, height: Double) {
|
||||
private fun drawCenterRow(matrixStack: MatrixStack, y: Double, height: Double) {
|
||||
for (i in 0 until (center.width.toInt() / ninePatch.centerWidth)) {
|
||||
RenderHelper.draw(center.left + i * ninePatch.centerWidth, y, ninePatch.center.u, ninePatch.center.v, ninePatch.centerWidth.toDouble(), height, ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, center.left + i * ninePatch.centerWidth, y, ninePatch.center.u, ninePatch.center.v, ninePatch.centerWidth.toDouble(), height, ninePatch.texture.width, ninePatch.texture.height)
|
||||
}
|
||||
val remWidth = center.width.toInt() % ninePatch.centerWidth
|
||||
if (remWidth > 0) {
|
||||
RenderHelper.draw(center.right - remWidth, y, ninePatch.center.u, ninePatch.center.v, remWidth.toDouble(), height, ninePatch.texture.width, ninePatch.texture.height)
|
||||
RenderHelper.draw(matrixStack, center.right - remWidth, y, ninePatch.center.u, ninePatch.center.v, remWidth.toDouble(), height, ninePatch.texture.width, ninePatch.texture.height)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ import net.shadowfacts.cacao.util.texture.Texture
|
|||
class TextureView(var texture: Texture): View() {
|
||||
|
||||
override fun drawContent(matrixStack: MatrixStack, mouse: Point, delta: Float) {
|
||||
RenderHelper.draw(bounds, texture)
|
||||
RenderHelper.draw(matrixStack, bounds, texture)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -262,8 +262,8 @@ open class View() {
|
|||
}
|
||||
if (new != null) {
|
||||
solver.dsl {
|
||||
this@View.intrinsicContentSizeWidthConstraint = (widthAnchor.equalTo(new.width, strength = WEAK))
|
||||
this@View.intrinsicContentSizeHeightConstraint = (heightAnchor.equalTo(new.height, strength = WEAK))
|
||||
this@View.intrinsicContentSizeWidthConstraint = (widthAnchor.equalTo(new.width, strength = MEDIUM))
|
||||
this@View.intrinsicContentSizeHeightConstraint = (heightAnchor.equalTo(new.height, strength = MEDIUM))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -388,4 +388,4 @@ open class View() {
|
|||
return Rect(convert(rect.origin, to), rect.size)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,10 +60,13 @@ abstract class AbstractButton<Impl: AbstractButton<Impl>>(val content: View, val
|
|||
override fun wasAdded() {
|
||||
solver.dsl {
|
||||
addSubview(content)
|
||||
content.leftAnchor equalTo (leftAnchor + padding)
|
||||
content.rightAnchor equalTo (rightAnchor - padding)
|
||||
content.topAnchor equalTo (topAnchor + padding)
|
||||
content.bottomAnchor equalTo (bottomAnchor - padding)
|
||||
content.centerXAnchor equalTo centerXAnchor
|
||||
content.centerYAnchor equalTo centerYAnchor
|
||||
|
||||
content.leftAnchor.lessThanOrEqualTo((leftAnchor + padding), WEAK)
|
||||
content.rightAnchor.greaterThanOrEqualTo(rightAnchor - padding, WEAK)
|
||||
content.topAnchor.lessThanOrEqualTo(topAnchor + padding, WEAK)
|
||||
content.bottomAnchor.greaterThanOrEqualTo(bottomAnchor - padding, WEAK)
|
||||
|
||||
listOfNotNull(background, hoveredBackground, disabledBackground).forEach {
|
||||
addSubview(it)
|
||||
|
@ -114,4 +117,4 @@ abstract class AbstractButton<Impl: AbstractButton<Impl>>(val content: View, val
|
|||
return true
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,4 +9,8 @@ import net.shadowfacts.cacao.view.View
|
|||
* @param content The [View] that provides the content of this button.
|
||||
* @param padding The padding between the [content] and the edges of the button.
|
||||
*/
|
||||
class Button(content: View, padding: Double = 4.0): AbstractButton<Button>(content, padding)
|
||||
class Button(content: View, padding: Double = 4.0): AbstractButton<Button>(content, padding) {
|
||||
constructor(content: View, padding: Double = 4.0, handler: (Button) -> Unit): this(content, padding) {
|
||||
this.handler = handler
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue