001package net.minecraft.client.gui; 002 003import cpw.mods.fml.relauncher.Side; 004import cpw.mods.fml.relauncher.SideOnly; 005import net.minecraft.client.renderer.Tessellator; 006import net.minecraft.util.Icon; 007import org.lwjgl.opengl.GL11; 008 009@SideOnly(Side.CLIENT) 010public class Gui 011{ 012 protected float zLevel = 0.0F; 013 014 protected void drawHorizontalLine(int par1, int par2, int par3, int par4) 015 { 016 if (par2 < par1) 017 { 018 int i1 = par1; 019 par1 = par2; 020 par2 = i1; 021 } 022 023 drawRect(par1, par3, par2 + 1, par3 + 1, par4); 024 } 025 026 protected void drawVerticalLine(int par1, int par2, int par3, int par4) 027 { 028 if (par3 < par2) 029 { 030 int i1 = par2; 031 par2 = par3; 032 par3 = i1; 033 } 034 035 drawRect(par1, par2 + 1, par1 + 1, par3, par4); 036 } 037 038 /** 039 * Draws a solid color rectangle with the specified coordinates and color. Args: x1, y1, x2, y2, color 040 */ 041 public static void drawRect(int par0, int par1, int par2, int par3, int par4) 042 { 043 int j1; 044 045 if (par0 < par2) 046 { 047 j1 = par0; 048 par0 = par2; 049 par2 = j1; 050 } 051 052 if (par1 < par3) 053 { 054 j1 = par1; 055 par1 = par3; 056 par3 = j1; 057 } 058 059 float f = (float)(par4 >> 24 & 255) / 255.0F; 060 float f1 = (float)(par4 >> 16 & 255) / 255.0F; 061 float f2 = (float)(par4 >> 8 & 255) / 255.0F; 062 float f3 = (float)(par4 & 255) / 255.0F; 063 Tessellator tessellator = Tessellator.instance; 064 GL11.glEnable(GL11.GL_BLEND); 065 GL11.glDisable(GL11.GL_TEXTURE_2D); 066 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 067 GL11.glColor4f(f1, f2, f3, f); 068 tessellator.startDrawingQuads(); 069 tessellator.addVertex((double)par0, (double)par3, 0.0D); 070 tessellator.addVertex((double)par2, (double)par3, 0.0D); 071 tessellator.addVertex((double)par2, (double)par1, 0.0D); 072 tessellator.addVertex((double)par0, (double)par1, 0.0D); 073 tessellator.draw(); 074 GL11.glEnable(GL11.GL_TEXTURE_2D); 075 GL11.glDisable(GL11.GL_BLEND); 076 } 077 078 /** 079 * Draws a rectangle with a vertical gradient between the specified colors. 080 */ 081 protected void drawGradientRect(int par1, int par2, int par3, int par4, int par5, int par6) 082 { 083 float f = (float)(par5 >> 24 & 255) / 255.0F; 084 float f1 = (float)(par5 >> 16 & 255) / 255.0F; 085 float f2 = (float)(par5 >> 8 & 255) / 255.0F; 086 float f3 = (float)(par5 & 255) / 255.0F; 087 float f4 = (float)(par6 >> 24 & 255) / 255.0F; 088 float f5 = (float)(par6 >> 16 & 255) / 255.0F; 089 float f6 = (float)(par6 >> 8 & 255) / 255.0F; 090 float f7 = (float)(par6 & 255) / 255.0F; 091 GL11.glDisable(GL11.GL_TEXTURE_2D); 092 GL11.glEnable(GL11.GL_BLEND); 093 GL11.glDisable(GL11.GL_ALPHA_TEST); 094 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 095 GL11.glShadeModel(GL11.GL_SMOOTH); 096 Tessellator tessellator = Tessellator.instance; 097 tessellator.startDrawingQuads(); 098 tessellator.setColorRGBA_F(f1, f2, f3, f); 099 tessellator.addVertex((double)par3, (double)par2, (double)this.zLevel); 100 tessellator.addVertex((double)par1, (double)par2, (double)this.zLevel); 101 tessellator.setColorRGBA_F(f5, f6, f7, f4); 102 tessellator.addVertex((double)par1, (double)par4, (double)this.zLevel); 103 tessellator.addVertex((double)par3, (double)par4, (double)this.zLevel); 104 tessellator.draw(); 105 GL11.glShadeModel(GL11.GL_FLAT); 106 GL11.glDisable(GL11.GL_BLEND); 107 GL11.glEnable(GL11.GL_ALPHA_TEST); 108 GL11.glEnable(GL11.GL_TEXTURE_2D); 109 } 110 111 /** 112 * Renders the specified text to the screen, center-aligned. 113 */ 114 public void drawCenteredString(FontRenderer par1FontRenderer, String par2Str, int par3, int par4, int par5) 115 { 116 par1FontRenderer.drawStringWithShadow(par2Str, par3 - par1FontRenderer.getStringWidth(par2Str) / 2, par4, par5); 117 } 118 119 /** 120 * Renders the specified text to the screen. 121 */ 122 public void drawString(FontRenderer par1FontRenderer, String par2Str, int par3, int par4, int par5) 123 { 124 par1FontRenderer.drawStringWithShadow(par2Str, par3, par4, par5); 125 } 126 127 /** 128 * Draws a textured rectangle at the stored z-value. Args: x, y, u, v, width, height 129 */ 130 public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6) 131 { 132 float f = 0.00390625F; 133 float f1 = 0.00390625F; 134 Tessellator tessellator = Tessellator.instance; 135 tessellator.startDrawingQuads(); 136 tessellator.addVertexWithUV((double)(par1 + 0), (double)(par2 + par6), (double)this.zLevel, (double)((float)(par3 + 0) * f), (double)((float)(par4 + par6) * f1)); 137 tessellator.addVertexWithUV((double)(par1 + par5), (double)(par2 + par6), (double)this.zLevel, (double)((float)(par3 + par5) * f), (double)((float)(par4 + par6) * f1)); 138 tessellator.addVertexWithUV((double)(par1 + par5), (double)(par2 + 0), (double)this.zLevel, (double)((float)(par3 + par5) * f), (double)((float)(par4 + 0) * f1)); 139 tessellator.addVertexWithUV((double)(par1 + 0), (double)(par2 + 0), (double)this.zLevel, (double)((float)(par3 + 0) * f), (double)((float)(par4 + 0) * f1)); 140 tessellator.draw(); 141 } 142 143 public void drawTexturedModelRectFromIcon(int par1, int par2, Icon par3Icon, int par4, int par5) 144 { 145 Tessellator tessellator = Tessellator.instance; 146 tessellator.startDrawingQuads(); 147 tessellator.addVertexWithUV((double)(par1 + 0), (double)(par2 + par5), (double)this.zLevel, (double)par3Icon.getMinU(), (double)par3Icon.getMaxV()); 148 tessellator.addVertexWithUV((double)(par1 + par4), (double)(par2 + par5), (double)this.zLevel, (double)par3Icon.getMaxU(), (double)par3Icon.getMaxV()); 149 tessellator.addVertexWithUV((double)(par1 + par4), (double)(par2 + 0), (double)this.zLevel, (double)par3Icon.getMaxU(), (double)par3Icon.getMinV()); 150 tessellator.addVertexWithUV((double)(par1 + 0), (double)(par2 + 0), (double)this.zLevel, (double)par3Icon.getMinU(), (double)par3Icon.getMinV()); 151 tessellator.draw(); 152 } 153}