package net.minecraft.client.gui; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; @SideOnly(Side.CLIENT) public class Gui { public static final ResourceLocation optionsBackground = new ResourceLocation("textures/gui/options_background.png"); public static final ResourceLocation statIcons = new ResourceLocation("textures/gui/container/stats_icons.png"); public static final ResourceLocation icons = new ResourceLocation("textures/gui/icons.png"); protected float zLevel; private static final String __OBFID = "CL_00000662"; /** * Draw a 1 pixel wide horizontal line. Args: x1, x2, y, color */ protected void drawHorizontalLine(int startX, int endX, int y, int color) { if (endX < startX) { int i1 = startX; startX = endX; endX = i1; } drawRect(startX, y, endX + 1, y + 1, color); } /** * Draw a 1 pixel wide vertical line. Args : x, y1, y2, color */ protected void drawVerticalLine(int x, int startY, int endY, int color) { if (endY < startY) { int i1 = startY; startY = endY; endY = i1; } drawRect(x, startY + 1, x + 1, endY, color); } /** * Draws a solid color rectangle with the specified coordinates and color (ARGB format). Args: x1, y1, x2, y2, color */ public static void drawRect(int left, int top, int right, int bottom, int color) { int j1; if (left < right) { j1 = left; left = right; right = j1; } if (top < bottom) { j1 = top; top = bottom; bottom = j1; } float f3 = (float)(color >> 24 & 255) / 255.0F; float f = (float)(color >> 16 & 255) / 255.0F; float f1 = (float)(color >> 8 & 255) / 255.0F; float f2 = (float)(color & 255) / 255.0F; Tessellator tessellator = Tessellator.instance; GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_TEXTURE_2D); OpenGlHelper.glBlendFunc(770, 771, 1, 0); GL11.glColor4f(f, f1, f2, f3); tessellator.startDrawingQuads(); tessellator.addVertex((double)left, (double)bottom, 0.0D); tessellator.addVertex((double)right, (double)bottom, 0.0D); tessellator.addVertex((double)right, (double)top, 0.0D); tessellator.addVertex((double)left, (double)top, 0.0D); tessellator.draw(); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_BLEND); } /** * Draws a rectangle with a vertical gradient between the specified colors (ARGB format). Args : x1, y1, x2, y2, * topColor, bottomColor */ protected void drawGradientRect(int left, int top, int right, int bottom, int startColor, int endColor) { float f = (float)(startColor >> 24 & 255) / 255.0F; float f1 = (float)(startColor >> 16 & 255) / 255.0F; float f2 = (float)(startColor >> 8 & 255) / 255.0F; float f3 = (float)(startColor & 255) / 255.0F; float f4 = (float)(endColor >> 24 & 255) / 255.0F; float f5 = (float)(endColor >> 16 & 255) / 255.0F; float f6 = (float)(endColor >> 8 & 255) / 255.0F; float f7 = (float)(endColor & 255) / 255.0F; GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_ALPHA_TEST); OpenGlHelper.glBlendFunc(770, 771, 1, 0); GL11.glShadeModel(GL11.GL_SMOOTH); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.setColorRGBA_F(f1, f2, f3, f); tessellator.addVertex((double)right, (double)top, (double)this.zLevel); tessellator.addVertex((double)left, (double)top, (double)this.zLevel); tessellator.setColorRGBA_F(f5, f6, f7, f4); tessellator.addVertex((double)left, (double)bottom, (double)this.zLevel); tessellator.addVertex((double)right, (double)bottom, (double)this.zLevel); tessellator.draw(); GL11.glShadeModel(GL11.GL_FLAT); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glEnable(GL11.GL_TEXTURE_2D); } /** * Renders the specified text to the screen, center-aligned. Args : renderer, string, x, y, color */ public void drawCenteredString(FontRenderer fontRendererIn, String text, int x, int y, int color) { fontRendererIn.drawStringWithShadow(text, x - fontRendererIn.getStringWidth(text) / 2, y, color); } /** * Renders the specified text to the screen. Args : renderer, string, x, y, color */ public void drawString(FontRenderer fontRendererIn, String text, int x, int y, int color) { fontRendererIn.drawStringWithShadow(text, x, y, color); } /** * Draws a textured rectangle at the stored z-value. Args: x, y, u, v, width, height */ public void drawTexturedModalRect(int x, int y, int textureX, int textureY, int width, int height) { float f = 0.00390625F; float f1 = 0.00390625F; Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)(x + 0), (double)(y + height), (double)this.zLevel, (double)((float)(textureX + 0) * f), (double)((float)(textureY + height) * f1)); tessellator.addVertexWithUV((double)(x + width), (double)(y + height), (double)this.zLevel, (double)((float)(textureX + width) * f), (double)((float)(textureY + height) * f1)); tessellator.addVertexWithUV((double)(x + width), (double)(y + 0), (double)this.zLevel, (double)((float)(textureX + width) * f), (double)((float)(textureY + 0) * f1)); tessellator.addVertexWithUV((double)(x + 0), (double)(y + 0), (double)this.zLevel, (double)((float)(textureX + 0) * f), (double)((float)(textureY + 0) * f1)); tessellator.draw(); } /** * Draws a textured rectangle at the stored z-value. Args : x, y, icon, width, height */ public void drawTexturedModelRectFromIcon(int x, int y, IIcon icon, int width, int height) { Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)(x + 0), (double)(y + height), (double)this.zLevel, (double)icon.getMinU(), (double)icon.getMaxV()); tessellator.addVertexWithUV((double)(x + width), (double)(y + height), (double)this.zLevel, (double)icon.getMaxU(), (double)icon.getMaxV()); tessellator.addVertexWithUV((double)(x + width), (double)(y + 0), (double)this.zLevel, (double)icon.getMaxU(), (double)icon.getMinV()); tessellator.addVertexWithUV((double)(x + 0), (double)(y + 0), (double)this.zLevel, (double)icon.getMinU(), (double)icon.getMinV()); tessellator.draw(); } /** * Draws a textured rectangle at z = 0. Args: x, y, u, v, width, height, textureWidth, textureHeight */ public static void drawModalRectWithCustomSizedTexture(int x, int y, float u, float v, int width, int height, float textureWidth, float textureHeight) { float f4 = 1.0F / textureWidth; float f5 = 1.0F / textureHeight; Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)x, (double)(y + height), 0.0D, (double)(u * f4), (double)((v + (float)height) * f5)); tessellator.addVertexWithUV((double)(x + width), (double)(y + height), 0.0D, (double)((u + (float)width) * f4), (double)((v + (float)height) * f5)); tessellator.addVertexWithUV((double)(x + width), (double)y, 0.0D, (double)((u + (float)width) * f4), (double)(v * f5)); tessellator.addVertexWithUV((double)x, (double)y, 0.0D, (double)(u * f4), (double)(v * f5)); tessellator.draw(); } /** * Draws a scaled, textured, tiled modal rect at z = 0. This method isn't used anywhere in vanilla code. */ public static void drawScaledCustomSizeModalRect(int x, int y, float u, float v, int uWidth, int vHeight, int width, int height, float tileWidth, float tileHeight) { float f4 = 1.0F / tileWidth; float f5 = 1.0F / tileHeight; Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)x, (double)(y + height), 0.0D, (double)(u * f4), (double)((v + (float)vHeight) * f5)); tessellator.addVertexWithUV((double)(x + width), (double)(y + height), 0.0D, (double)((u + (float)uWidth) * f4), (double)((v + (float)vHeight) * f5)); tessellator.addVertexWithUV((double)(x + width), (double)y, 0.0D, (double)((u + (float)uWidth) * f4), (double)(v * f5)); tessellator.addVertexWithUV((double)x, (double)y, 0.0D, (double)(u * f4), (double)(v * f5)); tessellator.draw(); } }