Turtle programming game that was never finished to a playable state (but had cute graphics and sounds)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tortuga/src/net/tortuga/gui/widgets/layout/FullWidthLayout.java

199 lines
3.8 KiB

package net.tortuga.gui.widgets.layout;
import static org.lwjgl.opengl.GL11.*;
import net.tortuga.App;
import net.tortuga.gui.widgets.GuiRoot;
import net.tortuga.gui.widgets.IRefreshable;
import net.tortuga.gui.widgets.IWidget;
import net.tortuga.gui.widgets.Widget;
import net.tortuga.util.Align;
import com.porcupine.coord.Coord;
import com.porcupine.coord.Vec;
/**
* Frame for widgets (with shadow and border + background)
*
* @author Ondřej Hruška (MightyPork)
*/
public class FullWidthLayout extends Widget implements IRefreshable {
public int alignH = Align.CENTER;
public int alignV = Align.CENTER;
private Widget child = new Gap(0, 0);
public FullWidthLayout(Widget child) {
this();
add(child);
}
public FullWidthLayout(Widget child, int alignH, int alignV) {
this();
add(child);
this.alignH = alignH;
this.alignV = alignV;
}
public FullWidthLayout(int alignH, int alignV) {
this();
this.alignH = alignH;
this.alignV = alignV;
}
public FullWidthLayout() {
setMargins(0, 0, 0, 0);
}
/**
* Set the primary and only child.
*/
@Override
public void add(Widget child)
{
this.child = child;
setMinWidth(App.inst.getSize().xi());
child.setMinWidth(App.inst.getSize().xi() - child.getMargins().getHorizontal());
}
@Override
public void calcChildSizes()
{
child.calcChildSizes();
rect.setTo(0, 0, minSize.x, child.getSize().y);
//Coord lbPos = rect.getCenter();
Coord childMove = new Coord();
Coord sizeC = child.getSize();
switch (alignH) {
case Align.LEFT:
childMove.x = 0;
break;
case Align.RIGHT:
childMove.x = rect.getSize().x - sizeC.x;
break;
case Align.CENTER:
childMove.x = rect.getSize().x / 2 - sizeC.x / 2;
break;
}
// switch (alignV) {
// case Align.TOP:
// childMove.y = rect.getSize().y - sizeC.y;
// break;
// case Align.BOTTOM:
// childMove.y = 0;
// break;
// case Align.CENTER:
// childMove.y = rect.getSize().y / 2 - sizeC.y / 2;
// break;
// }
child.rect.add_ip(new Vec(childMove));
}
@Override
public Widget onKey(int key, char chr, boolean down)
{
if (!isVisible() || !isEnabled()) return null;
if (!child.isEnabled() || !child.isVisible()) return null;
return child.onKey(key, chr, down);
}
@Override
public Widget onMouseButton(Coord pos, int button, boolean down)
{
if (!isVisible() || !isEnabled()) return null;
Coord pos_r = pos.sub(rect.getMin());
if (!child.isEnabled() || !child.isVisible()) return null;
return child.onMouseButton(pos_r, button, down);
}
@Override
public Widget onScroll(Coord pos, int scroll)
{
if (!isVisible() || !isEnabled()) return null;
Coord pos_r = pos.sub(rect.getMin());
if (!child.isEnabled() || !child.isVisible()) return null;
return child.onScroll(pos_r, scroll);
}
@Override
public void handleStaticInputs(Coord pos)
{
if (!isVisible() || !isEnabled()) return;
Coord pos_r = pos.sub(rect.getMin());
if (!child.isEnabled() || !child.isVisible()) return;
child.handleStaticInputs(pos_r);
}
@Override
public void render(Coord mouse)
{
if (!isVisible()) return;
glPushMatrix();
glPushAttrib(GL_ENABLE_BIT);
glTranslated(rect.x1(), rect.y1(), 2);
child.render(mouse.sub(rect.getMin()));
glPopAttrib();
glPopMatrix();
}
public FullWidthLayout setAlignH(int align)
{
alignH = align;
return this;
}
public FullWidthLayout setAlignV(int align)
{
alignV = align;
return this;
}
@Override
public IWidget setGuiRoot(GuiRoot guiContainer)
{
super.setGuiRoot(guiContainer);
child.setGuiRoot(guiContainer);
guiContainer.scheduleRefresh(this);
return this;
}
@Override
public void refresh()
{
setMinWidth(App.inst.getSize().xi());
child.setMinWidth(App.inst.getSize().xi() - child.getMargins().getHorizontal());
calcChildSizes();
}
}