// 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;
		if(!Container.class.isAssignableFrom(handledComponentClass))
			throw new UnsupportedOperationException();
		if(container == null)
			throw new NullPointerException();
		if(!handledComponentClass.isInstance(container))
			throw new IllegalArgumentException();
		return getContainerChildRenderArea(handledComponentClass.cast(container));
	}

	protected Rectangle getContainerChildRenderArea(T container) {
		return new Rectangle(new Point(0, 0), container.getSize());
	}

	@Override
	public Dimension getDefaultSize(Component component) {
		if(component == null)
			throw new NullPointerException();
		if(!handledComponentClass.isInstance(component))
			throw new IllegalArgumentException();
		return getDefaultComponentSize(handledComponentClass.cast(component));
	}

	protected abstract Dimension getDefaultComponentSize(T component);

	protected void translateComponent(Component component, boolean reverse) {
		Component parent = component.getParent();
		while(parent != null) {
			GL11.glTranslated((reverse ? -1 : 1) * parent.getX(), (reverse ? -1 : 1) * parent.getY(), 0);
			parent = parent.getParent();
		}
// 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;

		if(!Container.class.isAssignableFrom(handledComponentClass))
			throw new UnsupportedOperationException();
		if(container == null)
			throw new NullPointerException();
		if(!handledComponentClass.isInstance(container))
			throw new IllegalArgumentException();
		return getContainerChildRenderArea(handledComponentClass.cast(container));
	}

	protected Rectangle getContainerChildRenderArea(T container) {
		return new Rectangle(new Point(0, 0), container.getSize());
	}

	@Override
	public Dimension getDefaultSize(Component component) {
		if(component == null)
			throw new NullPointerException();
		if(!handledComponentClass.isInstance(component))
			throw new IllegalArgumentException();
		return getDefaultComponentSize(handledComponentClass.cast(component));
	}

	protected abstract Dimension getDefaultComponentSize(T component);

	protected void translateComponent(Component component, boolean reverse) {
		Component parent = component.getParent();
		while(parent != null) {
			GL11.glTranslated((reverse ? -1 : 1) * parent.getX(), (reverse ? -1 : 1) * parent.getY(), 0);
			parent = parent.getParent();
		}
		GL11.glTranslated((reverse ? -1 : 1) * component.getX(), (reverse ? -1 : 1) * component.getY(), 0);