package net.blay09.mods.eirairc.client.gui.screenshot; import com.google.common.collect.Lists; import net.blay09.mods.eirairc.client.gui.EiraGui; import net.blay09.mods.eirairc.client.gui.EiraGuiScreen; import net.blay09.mods.eirairc.client.gui.base.GuiImageButton; import net.blay09.mods.eirairc.client.gui.base.image.GuiImage; import net.blay09.mods.eirairc.client.gui.base.image.GuiURLImage; import net.blay09.mods.eirairc.util.Globals; import net.blay09.mods.eirairc.util.I19n; import net.blay09.mods.eirairc.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiConfirmOpenLink; import net.minecraft.client.gui.GuiYesNoCallback; import net.minecraft.client.renderer.GlStateManager; import java.net.URL; import java.util.List; public class GuiImagePreview extends EiraGuiScreen implements GuiYesNoCallback { private static final float TOOLTIP_TIME = 30; private final URL url; private final URL directURL; private GuiImage imgPreview; private GuiImageButton btnZoom; private GuiImageButton btnClipboard; private GuiImageButton btnGoToURL; private int imgX; private int imgY; private boolean buttonsVisible; private float hoverTime; private GuiImageButton hoverObject; public GuiImagePreview(URL directURL, URL url) { super(null); this.url = url != null ? url : directURL; this.directURL = directURL; imgPreview = new GuiURLImage(directURL); } @Override public void initGui() { super.initGui(); final int leftX = width / 2 - 145; final int rightX = width / 2 + 145; final int topY = height / 2 - 100; btnZoom = new GuiImageButton(0, rightX - 37, topY + 12, EiraGui.atlas.findRegion("button_zoom")); btnZoom.setTooltipText(I19n.format("eirairc:gui.image.fullscreen")); buttonList.add(btnZoom); btnGoToURL = new GuiImageButton(1, rightX - 37, topY + 50, EiraGui.atlas.findRegion("button_upload")); btnGoToURL.setTooltipText(I19n.format("eirairc:gui.image.openBrowser")); buttonList.add(btnGoToURL); btnClipboard = new GuiImageButton(2, rightX - 37, topY + 88, EiraGui.atlas.findRegion("button_clipboard")); btnClipboard.setTooltipText(I19n.format("eirairc:gui.image.toClipboard")); buttonList.add(btnClipboard); imgX = leftX + 2; imgY = topY + 10; if(!imgPreview.isLoaded()) { imgPreview.loadTexture(); } } @Override public void onGuiClosed() { super.onGuiClosed(); imgPreview.dispose(); } @Override public void actionPerformed(GuiButton button) { if(button == btnClipboard) { Utils.setClipboardString(url.toString()); } else if(button == btnZoom) { mc.displayGuiScreen(new GuiScreenshotBigPreview(this, directURL)); } else if(button == btnGoToURL) { mc.displayGuiScreen(new GuiConfirmOpenLink(this, url.toString(), 0, true)); } } @Override public void confirmClicked(boolean result, int id) { if(result) { Utils.openWebpage(url); Minecraft.getMinecraft().displayGuiScreen(null); } else { Minecraft.getMinecraft().displayGuiScreen(this); } } private static final List<String> tooltipList = Lists.newArrayList(); @Override public void drawScreen(int mouseX, int mouseY, float par3) { drawLightBackground(menuX, menuY, menuWidth, menuHeight); // Fade all image buttons in/out on hover of image int imgWidth = 285; int imgHeight = 180; if(imgPreview != null && mouseX >= imgX && mouseX < imgX + imgWidth && mouseY >= imgY && mouseY < imgY + imgHeight) { if(!buttonsVisible) { for(Object entry : buttonList) { GuiButton button = (GuiButton) entry; if (button instanceof GuiImageButton) { ((GuiImageButton) button).setFadeMode(1); } } buttonsVisible = true; } } else { if (buttonsVisible) { for(Object entry : buttonList) { GuiButton button = (GuiButton) entry; if (button instanceof GuiImageButton) { ((GuiImageButton) button).setFadeMode(-1); } } buttonsVisible = false; } } if(imgPreview != null) { if(!imgPreview.isLoaded()) { String s = I19n.format("eirairc:gui.image.loading"); mc.fontRendererObj.drawStringWithShadow(s, width / 2 - fontRendererObj.getStringWidth(s) / 2, height / 2 - fontRendererObj.FONT_HEIGHT / 2, Globals.TEXT_COLOR); } // Render the preview image imgPreview.draw(imgX, imgY, imgWidth, imgHeight, zLevel); } GlStateManager.enableBlend(); super.drawScreen(mouseX, mouseY, par3); GlStateManager.disableBlend(); for(Object entry : buttonList) { GuiButton button = (GuiButton) entry; if (button instanceof GuiImageButton) { GuiImageButton imageButton = (GuiImageButton) button; if (imageButton.isInside(mouseX, mouseY) && imageButton.visible && imageButton.isAlphaVisible() && imageButton.getTooltipText() != null) { if (imageButton != hoverObject) { hoverObject = imageButton; hoverTime = 0f; } hoverTime++; if (hoverTime > TOOLTIP_TIME) { tooltipList.clear(); tooltipList.add(imageButton.getTooltipText()); drawTooltip(tooltipList, mouseX, mouseY); } break; } } } } }