blob: dcee35ead7e8d5ea7d80585fea37cd9924e9482f [file] [log] [blame] [raw]
package li.cil.oc.client.gui
import java.util
import li.cil.oc.client.gui.widget.WidgetContainer
import net.minecraft.client.gui.FontRenderer
import net.minecraft.client.gui.inventory.GuiContainer
import net.minecraft.client.renderer.RenderHelper
import net.minecraft.inventory.Container
import org.lwjgl.opengl.{GL11, GL12}
import scala.collection.convert.WrapAsScala._
// Workaround because certain other mods *cough*TMI*cough* do base class
// transformations that break things! Such fun. Many annoyed. And yes, this
// is a common issue, have a look at EnderIO and Enchanting Plus. They have
// to work around this, too.
abstract class CustomGuiContainer(container: Container) extends GuiContainer(container) with WidgetContainer {
override def windowX = guiLeft
override def windowY = guiTop
override def windowZ = zLevel
// Pretty much Scalaified copy-pasta from base-class.
override def drawHoveringText(text: util.List[_], x: Int, y: Int, font: FontRenderer) {
copiedDrawHoveringText(text, x, y, font)
}
protected def copiedDrawHoveringText(text: util.List[_], x: Int, y: Int, font: FontRenderer) {
if (!text.isEmpty) {
GL11.glDisable(GL12.GL_RESCALE_NORMAL)
RenderHelper.disableStandardItemLighting()
GL11.glDisable(GL11.GL_LIGHTING)
GL11.glDisable(GL11.GL_DEPTH_TEST)
val textWidth = text.map(line => font.getStringWidth(line.asInstanceOf[String])).max
var posX = x + 12
var posY = y - 12
var textHeight = 8
if (text.size > 1) {
textHeight += 2 + (text.size - 1) * 10
}
if (posX + textWidth > width) {
posX -= 28 + textWidth
}
if (posY + textHeight + 6 > height) {
posY = height - textHeight - 6
}
zLevel = 300f
val bg = 0xF0100010
drawGradientRect(posX - 3, posY - 4, posX + textWidth + 3, posY - 3, bg, bg)
drawGradientRect(posX - 3, posY + textHeight + 3, posX + textWidth + 3, posY + textHeight + 4, bg, bg)
drawGradientRect(posX - 3, posY - 3, posX + textWidth + 3, posY + textHeight + 3, bg, bg)
drawGradientRect(posX - 4, posY - 3, posX - 3, posY + textHeight + 3, bg, bg)
drawGradientRect(posX + textWidth + 3, posY - 3, posX + textWidth + 4, posY + textHeight + 3, bg, bg)
val color1 = 0x505000FF
val color2 = 0x505000FE
drawGradientRect(posX - 3, posY - 3 + 1, posX - 3 + 1, posY + textHeight + 3 - 1, color1, color2)
drawGradientRect(posX + textWidth + 2, posY - 3 + 1, posX + textWidth + 3, posY + textHeight + 3 - 1, color1, color2)
drawGradientRect(posX - 3, posY - 3, posX + textWidth + 3, posY - 3 + 1, color1, color1)
drawGradientRect(posX - 3, posY + textHeight + 2, posX + textWidth + 3, posY + textHeight + 3, color2, color2)
for ((line, index) <- text.zipWithIndex) {
font.drawStringWithShadow(line.asInstanceOf[String], posX, posY, -1)
if (index == 0) {
posY += 2
}
posY += 10
}
zLevel = 0f
GL11.glEnable(GL11.GL_LIGHTING)
GL11.glEnable(GL11.GL_DEPTH_TEST)
RenderHelper.enableStandardItemLighting()
GL11.glEnable(GL12.GL_RESCALE_NORMAL)
}
}
}