Package com.jcloisterzone.ui.grid.layer

Source Code of com.jcloisterzone.ui.grid.layer.TextureFactory

package com.jcloisterzone.ui.grid.layer;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.image.BufferedImage;

public class TextureFactory {

    private final int squareSize;
    private int seq;

    public TextureFactory(int squareSize) {
        this.squareSize = squareSize;
    }

    public TexturePaint create(Color c) {
        switch (seq++) {
        case 9: seq = 0;
        case 0: return createDiagonalUp(c);
        case 1: return createCheck(c);
        case 2: return createZigZagDown(c);
        case 3: return createHorizontal(c);
        case 4: return createTriangles(c);
        case 5: return createDiagonalCheck(c);
        case 6: return createDiagonalDown(c);
        case 7: return createZigZagUp(c);
        default: return createVertical(c);
        }
    }

    public TexturePaint createMultiColor(Color[] c) {
        int a = squareSize/12;
        BufferedImage bi = new BufferedImage(a, a*(c.length+1), BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        for (int i = 0; i < c.length; i++) {
            g2.setColor(c[i]);
            g2.fillRect(0, i*a, a, a);
        }
        return new TexturePaint(bi, new Rectangle(0, 0, a, a*(c.length+1)));
    }

    private TexturePaint createDiagonalUp(Color c) {
        int a = squareSize/4;
        if (a % 2 == 1) a++;
        BufferedImage bi = new BufferedImage(a, a, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        g2.setColor(c);
        g2.fill(new Polygon(new int[] {a/2, a, a}, new int[] {a, a/2, a}, 3));
        g2.fill(new Polygon(new int[] {0, a/2, a, 0}, new int[] {a/2, 0, 0, a}, 4));
        return new TexturePaint(bi, new Rectangle(0, 0, a, a));
    }

    private TexturePaint createDiagonalDown(Color c) {
        int a = squareSize/4;
        if (a % 2 == 1) a++;
        BufferedImage bi = new BufferedImage(a, a, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        g2.setColor(c);
        g2.fill(new Polygon(new int[] {0, 0, a/2}, new int[] {a, a/2, a}, 3));
        g2.fill(new Polygon(new int[] {0, a/2, a, a}, new int[] {0, 0, a/2, a}, 4));
        return new TexturePaint(bi, new Rectangle(0, 0, a, a));
    }

    private TexturePaint createVertical(Color c) {
        int a = squareSize/6;
        if (a % 2 == 1) a++;
        BufferedImage bi = new BufferedImage(a, a, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        g2.setColor(c);
        g2.fillRect(0, 0, a/2, a);
        return new TexturePaint(bi, new Rectangle(0, 0, a, a));
    }

    private TexturePaint createHorizontal(Color c) {
        int a = squareSize/6;
        if (a % 2 == 1) a++;
        BufferedImage bi = new BufferedImage(a, a, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        g2.setColor(c);
        g2.fillRect(0, 0, a, a/2);
        return new TexturePaint(bi, new Rectangle(0, 0, a, a));
    }

    private TexturePaint createDiagonalCheck(Color c) {
        int a = squareSize/6;
        if (a % 2 == 1) a++;
        BufferedImage bi = new BufferedImage(a, a, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        g2.setColor(c);
        g2.fill(new Polygon(new int[] {a/2, a, a/2, 0}, new int[] {0, a/2, a, a/2}, 4));
        return new TexturePaint(bi, new Rectangle(0, 0, a, a));
    }

    private TexturePaint createCheck(Color c) {
        int a = squareSize/6;
        if (a % 2 == 1) a++;
        BufferedImage bi = new BufferedImage(a, a, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        g2.setColor(c);
        g2.fillRect(0, 0, a/2, a/2);
        g2.fillRect(a/2, a/2, a/2, a/2);
        return new TexturePaint(bi, new Rectangle(0, 0, a, a));
    }

    private TexturePaint createZigZagDown(Color c) {
        int a = squareSize/4;
        if (a % 4 != 0) a = ((a/4)+1)*4;
        BufferedImage bi = new BufferedImage(a, a, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        g2.setColor(c);
        g2.fillRect(0, 3*a/4, a/2, a/4);
        g2.fillRect(a/4, 0, a/4, a/4);
        g2.fillRect(a/4, a/4, 3*a/4, a/4);
        g2.fillRect(3*a/4, a/2, a/4, a/2);
        return new TexturePaint(bi, new Rectangle(0, 0, a, a));
    }

    private TexturePaint createZigZagUp(Color c) {
        int a = squareSize/4;
        if (a % 4 != 0) a = ((a/4)+1)*4;
        BufferedImage bi = new BufferedImage(a, a, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        g2.setColor(c);
        g2.fillRect(a/4, 0, 3*a/4, a/4);
        g2.fillRect(a/4, a/4, a/4, a/4);
        g2.fillRect(0, a/2, a/2, a/4);
        g2.fillRect(3*a/4, a/2, a/4, a/2);
        return new TexturePaint(bi, new Rectangle(0, 0, a, a));
    }

    private TexturePaint createTriangles(Color c) {
        int a = squareSize/6;
        if (a % 2 == 1) a++;
        int b = (int) (a * Math.sqrt(3.0));
        BufferedImage bi = new BufferedImage(a, b, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();
        g2.setColor(c);
        g2.fill(new Polygon(new int[] {0, a/2, a}, new int[] {0, b/2, 0}, 3));
        g2.fill(new Polygon(new int[] {0, a/2, 0}, new int[] {b/2, b/2, b}, 3));
        g2.fill(new Polygon(new int[] {a, a/2, a}, new int[] {b/2, b/2, b}, 3));
        return new TexturePaint(bi, new Rectangle(0, 0, a, b));
    }
}
TOP

Related Classes of com.jcloisterzone.ui.grid.layer.TextureFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.