/*
* This file is part of Spoutcraft (http://wiki.getspout.org/).
*
* Spoutcraft is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Spoutcraft is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.getspout.spout.gui;
import org.lwjgl.opengl.GL11;
import net.minecraft.src.*;
import net.minecraft.client.Minecraft;
import org.getspout.spout.packet.*;
public class CustomGuiSlider extends GuiSlider {
protected Screen screen;
protected Slider slider;
public CustomGuiSlider(Screen screen, Slider slider) {
super(0, 0, 0, null, null, 0);
this.screen = screen;
this.slider = slider;
}
@Override
protected void mouseDragged(Minecraft game, int mouseX, int mouseY) {
if(slider.isVisible()) {
if(this.dragging) {
slider.setSliderPosition((float)(mouseX - (slider.getScreenX()+ 4)) / (float)(slider.getWidth() - 8));
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
float width = (float) (slider.getWidth() < 200 ? slider.getWidth() : 200) - 8;
this.drawTexturedModalRect((int) (slider.getSliderPosition() * width), 0, 0, 66, 4, 20);
this.drawTexturedModalRect((int) (slider.getSliderPosition() * width) + 4, 0, 196, 66, 4, 20);
}
}
@Override
public boolean mousePressed(Minecraft game, int mouseX, int mouseY) {
if(mousePressedWidget(game, mouseX, mouseY)) {
slider.setSliderPosition((float)(mouseX - (slider.getScreenX() + 4)) / (float)(slider.getWidth() - 8));
this.dragging = true;
return true;
} else {
return false;
}
}
@Override
public void drawButton(Minecraft game, int mouseX, int mouseY) {
if(slider.isVisible()) {
GL11.glBindTexture(GL11.GL_TEXTURE_2D, game.renderEngine.getTexture("/gui/gui.png"));
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
float width = (float) (slider.getWidth() < 200 ? slider.getWidth() : 200);
GL11.glTranslatef((float) slider.getScreenX(), (float) slider.getScreenY(), 0);
GL11.glScalef((float) slider.getWidth() / width, (float) slider.getHeight() / 20f, 1);
boolean hovering = mouseX >= slider.getScreenX() && mouseY >= slider.getScreenY() && mouseX < slider.getScreenX() + slider.getWidth() && mouseY < slider.getScreenY() + slider.getHeight();
int hoverState = this.getHoverState(hovering);
this.drawTexturedModalRect(0, 0, 0, 46 + hoverState * 20, (int) Math.ceil(width / 2), 20);
this.drawTexturedModalRect((int) Math.floor(width / 2), 0, 200 - (int) Math.ceil(width / 2), 46 + hoverState * 20, (int) Math.ceil(width / 2), 20);
this.mouseDragged(game, mouseX, mouseY);
}
}
@Override
public void mouseReleased(int mouseX, int mouseY) {
super.mouseReleased(mouseX, mouseY);
((EntityClientPlayerMP)Minecraft.theMinecraft.thePlayer).sendQueue.addToSendQueue(new CustomPacket(new PacketControlAction(screen, slider, slider.getSliderPosition())));
}
public boolean mousePressedWidget(Minecraft game, int mouseX, int mouseY) {
return slider.isEnabled() && slider.isVisible() && mouseX >= slider.getScreenX() && mouseY >= slider.getScreenY() && mouseX < slider.getScreenX() + slider.getWidth() && mouseY < slider.getScreenY() + slider.getHeight();
}
public Slider getWidget() {
return slider;
}
public boolean equals(Widget widget) {
return widget.getId().equals(slider.getId());
}
public void updateWidget(Slider widget) {
this.slider = widget;
}
}