001    package net.minecraft.src;
002    
003    import cpw.mods.fml.common.Side;
004    import cpw.mods.fml.common.asm.SideOnly;
005    import net.minecraft.client.Minecraft;
006    import org.lwjgl.opengl.GL11;
007    
008    @SideOnly(Side.CLIENT)
009    public class GuiButton extends Gui
010    {
011        /** Button width in pixels */
012        protected int width;
013    
014        /** Button height in pixels */
015        protected int height;
016    
017        /** The x position of this control. */
018        public int xPosition;
019    
020        /** The y position of this control. */
021        public int yPosition;
022    
023        /** The string displayed on this control. */
024        public String displayString;
025    
026        /** ID for this control. */
027        public int id;
028    
029        /** True if this control is enabled, false to disable. */
030        public boolean enabled;
031    
032        /** Hides the button completely if false. */
033        public boolean drawButton;
034    
035        public GuiButton(int par1, int par2, int par3, String par4Str)
036        {
037            this(par1, par2, par3, 200, 20, par4Str);
038        }
039    
040        public GuiButton(int par1, int par2, int par3, int par4, int par5, String par6Str)
041        {
042            this.width = 200;
043            this.height = 20;
044            this.enabled = true;
045            this.drawButton = true;
046            this.id = par1;
047            this.xPosition = par2;
048            this.yPosition = par3;
049            this.width = par4;
050            this.height = par5;
051            this.displayString = par6Str;
052        }
053    
054        /**
055         * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering over
056         * this button.
057         */
058        protected int getHoverState(boolean par1)
059        {
060            byte var2 = 1;
061    
062            if (!this.enabled)
063            {
064                var2 = 0;
065            }
066            else if (par1)
067            {
068                var2 = 2;
069            }
070    
071            return var2;
072        }
073    
074        /**
075         * Draws this button to the screen.
076         */
077        public void drawButton(Minecraft par1Minecraft, int par2, int par3)
078        {
079            if (this.drawButton)
080            {
081                FontRenderer var4 = par1Minecraft.fontRenderer;
082                GL11.glBindTexture(GL11.GL_TEXTURE_2D, par1Minecraft.renderEngine.getTexture("/gui/gui.png"));
083                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
084                boolean var5 = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height;
085                int var6 = this.getHoverState(var5);
086                this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 46 + var6 * 20, this.width / 2, this.height);
087                this.drawTexturedModalRect(this.xPosition + this.width / 2, this.yPosition, 200 - this.width / 2, 46 + var6 * 20, this.width / 2, this.height);
088                this.mouseDragged(par1Minecraft, par2, par3);
089                int var7 = 14737632;
090    
091                if (!this.enabled)
092                {
093                    var7 = -6250336;
094                }
095                else if (var5)
096                {
097                    var7 = 16777120;
098                }
099    
100                this.drawCenteredString(var4, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, var7);
101            }
102        }
103    
104        /**
105         * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e).
106         */
107        protected void mouseDragged(Minecraft par1Minecraft, int par2, int par3) {}
108    
109        /**
110         * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e).
111         */
112        public void mouseReleased(int par1, int par2) {}
113    
114        /**
115         * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent
116         * e).
117         */
118        public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3)
119        {
120            return this.enabled && this.drawButton && par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height;
121        }
122    }