001package net.minecraft.client.gui;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.client.Minecraft;
006import org.lwjgl.opengl.GL11;
007
008@SideOnly(Side.CLIENT)
009public 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    protected boolean field_82253_i;
035
036    public GuiButton(int par1, int par2, int par3, String par4Str)
037    {
038        this(par1, par2, par3, 200, 20, par4Str);
039    }
040
041    public GuiButton(int par1, int par2, int par3, int par4, int par5, String par6Str)
042    {
043        this.width = 200;
044        this.height = 20;
045        this.enabled = true;
046        this.drawButton = true;
047        this.id = par1;
048        this.xPosition = par2;
049        this.yPosition = par3;
050        this.width = par4;
051        this.height = par5;
052        this.displayString = par6Str;
053    }
054
055    /**
056     * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering over
057     * this button.
058     */
059    protected int getHoverState(boolean par1)
060    {
061        byte b0 = 1;
062
063        if (!this.enabled)
064        {
065            b0 = 0;
066        }
067        else if (par1)
068        {
069            b0 = 2;
070        }
071
072        return b0;
073    }
074
075    /**
076     * Draws this button to the screen.
077     */
078    public void drawButton(Minecraft par1Minecraft, int par2, int par3)
079    {
080        if (this.drawButton)
081        {
082            FontRenderer fontrenderer = par1Minecraft.fontRenderer;
083            par1Minecraft.renderEngine.bindTexture("/gui/gui.png");
084            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
085            this.field_82253_i = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height;
086            int k = this.getHoverState(this.field_82253_i);
087            this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 46 + k * 20, this.width / 2, this.height);
088            this.drawTexturedModalRect(this.xPosition + this.width / 2, this.yPosition, 200 - this.width / 2, 46 + k * 20, this.width / 2, this.height);
089            this.mouseDragged(par1Minecraft, par2, par3);
090            int l = 14737632;
091
092            if (!this.enabled)
093            {
094                l = -6250336;
095            }
096            else if (this.field_82253_i)
097            {
098                l = 16777120;
099            }
100
101            this.drawCenteredString(fontrenderer, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, l);
102        }
103    }
104
105    /**
106     * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e).
107     */
108    protected void mouseDragged(Minecraft par1Minecraft, int par2, int par3) {}
109
110    /**
111     * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e).
112     */
113    public void mouseReleased(int par1, int par2) {}
114
115    /**
116     * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent
117     * e).
118     */
119    public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3)
120    {
121        return this.enabled && this.drawButton && par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height;
122    }
123
124    public boolean func_82252_a()
125    {
126        return this.field_82253_i;
127    }
128
129    public void func_82251_b(int par1, int par2) {}
130}