package org.darkstorm.minecraft.gui.util;
import java.awt.Rectangle;
import java.io.IOException;
import net.minecraft.client.gui.GuiScreen;
import org.darkstorm.minecraft.gui.GuiManager;
import org.darkstorm.minecraft.gui.component.Component;
import org.darkstorm.minecraft.gui.component.Frame;
public class GuiManagerDisplayScreen extends GuiScreen {
private final GuiManager guiManager;
public GuiManagerDisplayScreen(GuiManager guiManager) {
this.guiManager = guiManager;
}
@Override
protected void mouseClicked(int x, int y, int button) throws IOException {
super.mouseClicked(x, y, button); // This line throws IOException which is why this method has to have the 'throws' declaration
for(Frame frame : guiManager.getFrames()) {
if(!frame.isVisible())
continue;
if(!frame.isMinimized() && !frame.getArea().contains(x, y)) {
for(Component component : frame.getChildren()) {
for(Rectangle area : component.getTheme().getUIForComponent (component).getInteractableRegions(component)) {
if(area.contains(x - frame.getX() - component.getX(), y - frame.getY() - component.getY())) {
frame.onMousePress(x - frame.getX(), y - frame.getY(), button);
guiManager.bringForward(frame);
return;
}
}
}
}
}
for(Frame frame : guiManager.getFrames()) {
if(!frame.isVisible())
continue;
if(!frame.isMinimized() && frame.getArea().contains(x, y)) {
frame.onMousePress(x - frame.getX(), y - frame.getY(), button);
guiManager.bringForward(frame);
break;
} else if(frame.isMinimized()) {
for(Rectangle area : frame.getTheme().getUIForComponent(frame).getInteractableRegions(frame)) {
if(area.contains(x - frame.getX(), y - frame.getY())) {
frame.onMousePress(x - frame.getX(), y - frame.getY(), button);
guiManager.bringForward(frame);
return;
}
}
}
}
}
@Override
public void mouseReleased(int x, int y, int button) {
super.mouseReleased(x, y, button);
for(Frame frame : guiManager.getFrames()) {
if(!frame.isVisible())
continue;
if(!frame.isMinimized() && !frame.getArea().contains(x, y)) {
for(Component component : frame.getChildren()) {
for(Rectangle area : component.getTheme().getUIForComponent(component).getInteractableRegions(component)) {
if(area.contains(x - frame.getX() - component.getX(), y - frame.getY() - component.getY())) {
frame.onMouseRelease(x - frame.getX(), y - frame.getY(), button);
guiManager.bringForward(frame);
return;
}
}
}
}
}
for(Frame frame : guiManager.getFrames()) {
if(!frame.isVisible())
continue;
if(!frame.isMinimized() && frame.getArea().contains(x, y)) {
frame.onMouseRelease(x - frame.getX(), y - frame.getY(), button);
guiManager.bringForward(frame);
break;
} else if(frame.isMinimized()) {
for(Rectangle area : frame.getTheme().getUIForComponent(frame).getInteractableRegions(frame)) {
if(area.contains(x - frame.getX(), y - frame.getY())) {
frame.onMouseRelease(x - frame.getX(), y - frame.getY(), button);
guiManager.bringForward(frame);
return;
}
}
}
}
}
@Override
public void drawScreen(int par2, int par3, float par4) {
guiManager.render();
super.drawScreen(par2, par3, par4);
}
}