buildcraft.core.lib.gui.buttons.GuiImageButton.java Source code

Java tutorial

Introduction

Here is the source code for buildcraft.core.lib.gui.buttons.GuiImageButton.java

Source

/**
 * Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team
 * http://www.mod-buildcraft.com
 * <p/>
 * BuildCraft is distributed under the terms of the Minecraft Mod Public
 * License 1.0, or MMPL. Please check the contents of the license located in
 * http://www.mod-buildcraft.com/MMPL-1.0.txt
 */

package buildcraft.core.lib.gui.buttons;

import java.util.ArrayList;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.util.ResourceLocation;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import buildcraft.core.lib.gui.tooltips.IToolTipProvider;
import buildcraft.core.lib.gui.tooltips.ToolTip;

@SideOnly(Side.CLIENT)
public class GuiImageButton extends GuiButton implements IButtonClickEventTrigger, IToolTipProvider {
    private final int size, u, v, baseU, baseV;
    private final ResourceLocation texture;

    private ArrayList<IButtonClickEventListener> listeners = new ArrayList<IButtonClickEventListener>();
    private boolean active = false;
    private ToolTip toolTip;

    public GuiImageButton(int id, int x, int y, int size, ResourceLocation texture, int u, int v) {
        this(id, x, y, size, texture, 0, 0, u, v);
    }

    public GuiImageButton(int id, int x, int y, int size, ResourceLocation texture, int baseU, int baseV, int u,
            int v) {
        super(id, x, y, size, size, "");
        this.size = size;
        this.u = u;
        this.v = v;
        this.baseU = baseU;
        this.baseV = baseV;
        this.texture = texture;
    }

    public int getSize() {
        return size;
    }

    public boolean isActive() {
        return active;
    }

    public void activate() {
        active = true;
    }

    public void deActivate() {
        active = false;
    }

    @Override
    public void drawButton(Minecraft minecraft, int x, int y) {
        if (!visible) {
            return;
        }

        minecraft.renderEngine.bindTexture(texture);

        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        GL11.glEnable(GL11.GL_ALPHA_TEST);
        GL11.glDisable(GL11.GL_BLEND);

        int buttonState = getButtonState(x, y);

        drawTexturedModalRect(xPosition, yPosition, baseU + buttonState * size, baseV, size, size);
        drawTexturedModalRect(xPosition + 1, yPosition + 1, u, v, size - 2, size - 2);

        mouseDragged(minecraft, x, y);
    }

    @Override
    public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) {
        boolean pressed = super.mousePressed(par1Minecraft, par2, par3);

        if (pressed) {
            active = !active;
            notifyAllListeners();
        }

        return pressed;
    }

    @Override
    public void registerListener(IButtonClickEventListener listener) {
        listeners.add(listener);
    }

    @Override
    public void removeListener(IButtonClickEventListener listener) {
        listeners.remove(listener);
    }

    @Override
    public void notifyAllListeners() {
        for (IButtonClickEventListener listener : listeners) {
            listener.handleButtonClick(this, this.id);
        }
    }

    private int getButtonState(int mouseX, int mouseY) {
        if (!this.enabled) {
            return 0;
        }

        if (isMouseOverButton(mouseX, mouseY)) {
            if (!this.active) {
                return 2;
            } else {
                return 4;
            }
        }

        if (!this.active) {
            return 1;
        } else {
            return 3;
        }
    }

    private boolean isMouseOverButton(int mouseX, int mouseY) {
        return mouseX >= xPosition && mouseY >= yPosition && mouseX < xPosition + size && mouseY < yPosition + size;
    }

    @Override
    public ToolTip getToolTip() {
        return toolTip;
    }

    public GuiImageButton setToolTip(ToolTip tips) {
        this.toolTip = tips;
        return this;
    }

    @Override
    public boolean isToolTipVisible() {
        return visible;
    }

    @Override
    public boolean isMouseOver(int mouseX, int mouseY) {
        return isMouseOverButton(mouseX, mouseY);
    }
}