// Path: src/org/darkstorm/minecraft/gui/component/Component.java
// public interface Component {
// 	public Theme getTheme();
// 
// 	public void setTheme(Theme theme);
// 
// 	public void render();
// 
// 	public void update();
// 
// 	public int getX();
// 
// 	public int getY();
// 
// 	public int getWidth();
// 
// 	public int getHeight();
// 
// 	public void setX(int x);
// 
// 	public void setY(int y);
// 
// 	public void setWidth(int width);
// 
// 	public void setHeight(int height);
// 
// 	public Point getLocation();
// 
// 	public Dimension getSize();
// 
// 	public Rectangle getArea();
// 
// 	public Container getParent();
// 
// 	public Color getBackgroundColor();
// 
// 	public Color getForegroundColor();
// 
// 	public void setBackgroundColor(Color color);
// 
// 	public void setForegroundColor(Color color);
// 
// 	public void setParent(Container parent);
// 
// 	public void onMousePress(int x, int y, int button);
// 
// 	public void onMouseRelease(int x, int y, int button);
// 
// 	public void resize();
// 
// 	public boolean isVisible();
// 
// 	public void setVisible(boolean visible);
// 
// 	public boolean isEnabled();
// 
// 	public void setEnabled(boolean enabled);
// }
// 
// Path: src/org/darkstorm/minecraft/gui/component/Container.java
// public interface Container extends Component {
// 	public LayoutManager getLayoutManager();
// 
// 	public void setLayoutManager(LayoutManager layoutManager);
// 
// 	public Component[] getChildren();
// 
// 	public void add(Component child, Constraint... constraints);
// 
// 	public Constraint[] getConstraints(Component child);
// 
// 	public Component getChildAt(int x, int y);
// 
// 	public boolean hasChild(Component component);
// 
// 	public boolean remove(Component child);
// 
// 	public void layoutChildren();
// }


import java.awt.*;
import org.darkstorm.minecraft.gui.component.Component;
import org.darkstorm.minecraft.gui.component.Container;
import org.lwjgl.opengl.GL11;
package org.darkstorm.minecraft.gui.theme;



public abstract class AbstractComponentUI<T extends Component> implements ComponentUI {
	protected final Class<T> handledComponentClass;
	protected Color foreground, background;

	public AbstractComponentUI(Class<T> handledComponentClass) {
		this.handledComponentClass = handledComponentClass;
	}

	public void render(Component component) {
		if(component == null)
			throw new NullPointerException();
		if(!handledComponentClass.isInstance(component))
			throw new IllegalArgumentException();
		if(!component.isVisible())
			return;
		renderComponent(handledComponentClass.cast(component));
	}

	protected abstract void renderComponent(T component);

// Path: src/org/darkstorm/minecraft/gui/component/Component.java
// public interface Component {
// 	public Theme getTheme();
// 
// 	public void setTheme(Theme theme);
// 
// 	public void render();
// 
// 	public void update();
// 
// 	public int getX();
// 
// 	public int getY();
// 
// 	public int getWidth();
// 
// 	public int getHeight();
// 
// 	public void setX(int x);
// 
// 	public void setY(int y);
// 
// 	public void setWidth(int width);
// 
// 	public void setHeight(int height);
// 
// 	public Point getLocation();
// 
// 	public Dimension getSize();
// 
// 	public Rectangle getArea();
// 
// 	public Container getParent();
// 
// 	public Color getBackgroundColor();
// 
// 	public Color getForegroundColor();
// 
// 	public void setBackgroundColor(Color color);
// 
// 	public void setForegroundColor(Color color);
// 
// 	public void setParent(Container parent);
// 
// 	public void onMousePress(int x, int y, int button);
// 
// 	public void onMouseRelease(int x, int y, int button);
// 
// 	public void resize();
// 
// 	public boolean isVisible();
// 
// 	public void setVisible(boolean visible);
// 
// 	public boolean isEnabled();
// 
// 	public void setEnabled(boolean enabled);
// }
// 
// Path: src/org/darkstorm/minecraft/gui/component/Container.java
// public interface Container extends Component {
// 	public LayoutManager getLayoutManager();
// 
// 	public void setLayoutManager(LayoutManager layoutManager);
// 
// 	public Component[] getChildren();
// 
// 	public void add(Component child, Constraint... constraints);
// 
// 	public Constraint[] getConstraints(Component child);
// 
// 	public Component getChildAt(int x, int y);
// 
// 	public boolean hasChild(Component component);
// 
// 	public boolean remove(Component child);
// 
// 	public void layoutChildren();
// }


// Path: src/org/darkstorm/minecraft/gui/theme/AbstractComponentUI.java
import java.awt.*;
import org.darkstorm.minecraft.gui.component.Component;
import org.darkstorm.minecraft.gui.component.Container;
import org.lwjgl.opengl.GL11;

package org.darkstorm.minecraft.gui.theme;



public abstract class AbstractComponentUI<T extends Component> implements ComponentUI {
	protected final Class<T> handledComponentClass;
	protected Color foreground, background;

	public AbstractComponentUI(Class<T> handledComponentClass) {
		this.handledComponentClass = handledComponentClass;
	}

	public void render(Component component) {
		if(component == null)
			throw new NullPointerException();
		if(!handledComponentClass.isInstance(component))
			throw new IllegalArgumentException();
		if(!component.isVisible())
			return;
		renderComponent(handledComponentClass.cast(component));
	}

	protected abstract void renderComponent(T component);

	@Override