    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}