Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.ostiumcore.xworldrender.worldrenderer.data;
- import java.awt.Color;
- import java.awt.Graphics2D;
- import java.awt.image.BufferedImage;
- import static org.lwjgl.opengl.GL11.*;
- import org.lwjgl.opengl.GL30;
- import net.minecraft.client.Minecraft;
- import net.minecraft.client.gui.FontRenderer;
- import net.minecraft.client.renderer.GlStateManager;
- import net.minecraft.client.renderer.texture.SimpleTexture;
- import net.minecraft.client.renderer.texture.TextureUtil;
- import net.minecraftforge.client.MinecraftForgeClient;
- import ru.ostiumcore.utils.DrawFrameBuffers;
- import ru.ostiumcore.utils.RenderHelper;
- import ru.ostiumcore.xworldrender.core.XWorldRender;
- import ru.ostiumcore.xworldrender.dataholder.element.ScrollableTable;
- import ru.ostiumcore.xworldrender.worldrenderer.interfaces.IScrollable;
- public class WScrollableTable extends WBaseElement<ScrollableTable> implements IScrollable{
- private static final float TEXT_HEIGHT = 8.0f;
- public static FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
- public int scroll = 0;
- public int colDisplay = 3;
- public WScrollableTable(ScrollableTable table) {
- setElement(table);
- }
- @Override
- public void render(int mouseX, int mouseY, float scale, int res) {
- super.hover(mouseX, mouseY);
- int stencilBit = MinecraftForgeClient.reserveStencilBit();
- glPushMatrix();
- glScalef(scale/res, scale/res, 1);
- glTranslated(getX(), getY(), 0);
- // TMP: Generating mask here for being able to change it in debug mode
- BufferedImage imga = new BufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
- Graphics2D g = imga.createGraphics();
- g.setColor(Color.WHITE);
- g.fillOval(0, 0, 256, 256);
- g.fillRect(128, 128, 256, 256);
- int t = GlStateManager.generateTexture();
- TextureUtil.uploadTextureImage(t, imga);
- // Enabling stencil things
- glEnable(GL_STENCIL_TEST);
- GlStateManager.depthMask(false);
- glStencilFunc(GL_ALWAYS, stencilBit, 0xff);
- glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
- glStencilMask(0xFF);
- glClearStencil(0);
- glClear(GL_STENCIL_BUFFER_BIT);
- // Drawing stencil mask or whatever it called
- GlStateManager.bindTexture(t);
- RenderHelper.INSTANCE.drawImage(0, 0, getWidth(), getHeight(), -1, 1f);
- GlStateManager.deleteTexture(t);
- glPushMatrix();
- // Doing something i'm not sure about
- glStencilMask(0);
- glStencilFunc(GL_EQUAL, stencilBit, 0x00);
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- // --- START: Drawing masked table ---
- // Drawing table background
- RenderHelper.INSTANCE.drawRect(0, 0, getWidth(), getHeight(), 0, .8f);
- // Drawing other table pieces
- float rowH = (float) getHeight()/(colDisplay+1);
- for (int col = 0; col < element.headers.size(); col++) {
- float weight = element.getWeight(col);
- float colW = (float) getWidth()*weight;
- for (int row = 0; row < colDisplay + 1; row++) {
- int color = 0;
- String text = "";
- if(row==0) {
- text = element.headers.get(col);
- }else {
- color = col*123123123+row*5555555; // Getting pretty much random color
- if(element.content.size()>row-1+scroll) {
- text = element.content.get(row-1+scroll).get(col);
- }
- }
- // Drawing column backgrounds
- RenderHelper.INSTANCE.drawRect(0, rowH*row, colW, rowH*0.875f, color, .3f);
- // Drawing text inside columns
- glPushMatrix();
- glScalef(rowH / TEXT_HEIGHT * 0.875f, rowH / TEXT_HEIGHT * 0.875f, 1);
- float w = colW / rowH * TEXT_HEIGHT / 0.875f;
- float h = TEXT_HEIGHT / 0.875f;
- fr.drawStringWithShadow(text, w/2 - fr.getStringWidth(text)/2, h*row, -1);
- glPopMatrix();
- }
- glTranslated(colW, 0, 0);
- }
- // --- END: Drawing masked table ---
- // Getting everything back to initial state
- glStencilMask(0xFF);
- GlStateManager.disableBlend();
- GlStateManager.depthMask(true);
- glDisable(GL_STENCIL_TEST);
- glPopMatrix();
- glPopMatrix();
- MinecraftForgeClient.releaseStencilBit(stencilBit);
- }
- @Override
- public void scroll(int s) {
- // TODO: change per element scroll to fixed amount of pixels
- this.scroll = Math.max(this.scroll-s, 0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement