All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mini2Dx.ui.layout.ImmediateLayoutRuleset Maven / Gradle / Ivy

There is a newer version: 2.0.0-alpha.32
Show newest version
package org.mini2Dx.ui.layout;

import org.mini2Dx.gdx.utils.Array;
import org.mini2Dx.ui.element.ScrollBox;
import org.mini2Dx.ui.element.UiElement;
import org.mini2Dx.ui.render.ParentRenderNode;
import org.mini2Dx.ui.render.RenderNode;

public class ImmediateLayoutRuleset extends LayoutRuleset {
	private final UiElement element;
	private final OffsetRule xRule, yRule;
	private final SizeRule widthRule, heightRule;

	public ImmediateLayoutRuleset(UiElement element) {
		super();
		this.element = element;
		xRule = new ImmediateXRule();
		yRule = new ImmediateYRule();
		widthRule = new ImmediateWidthRule();
		heightRule = new ImmediateHeightRule();
	}

	@Override
	public void layout(LayoutState layoutState, final ParentRenderNode parentNode, Array> children) {
		float startX = parentNode.getStyle().getPaddingLeft();
		float startY = parentNode.getStyle().getPaddingTop();

		for (int i = 0; i < children.size; i++) {
			final RenderNode node = children.get(i);
			node.layout(layoutState);
			if (!node.isIncludedInLayout()) {
				continue;
			}

			node.setRelativeX(startX + node.getXOffset());
			node.setRelativeY(startY + node.getYOffset());

			setElementSize(parentNode, node);
		}
	}

	@Override
	public float getPreferredElementRelativeX(LayoutState layoutState) {
		return xRule.getOffset(layoutState);
	}

	@Override
	public float getPreferredElementRelativeY(LayoutState layoutState) {
		return yRule.getOffset(layoutState);
	}

	@Override
	public float getPreferredElementWidth(LayoutState layoutState) {
		return widthRule.getSize(layoutState);
	}

	@Override
	public float getPreferredElementHeight(LayoutState layoutState) {
		return heightRule.getSize(layoutState);
	}

	@Override
	public boolean isHiddenByInputSource(LayoutState layoutState) {
		return false;
	}

	@Override
	public SizeRule getCurrentWidthRule() {
		return widthRule;
	}

	@Override
	public SizeRule getCurrentHeightRule() {
		return heightRule;
	}

	@Override
	public OffsetRule getCurrentOffsetXRule() {
		return xRule;
	}

	@Override
	public OffsetRule getCurrentOffsetYRule() {
		return yRule;
	}

	@Override
	public boolean isFlexLayout() {
		return false;
	}

	@Override
	public boolean equals(String rules) {
		if(rules == null) {
			return true;
		}
		if(rules.isEmpty()) {
			return true;
		}
		return false;
	}

	private class ImmediateXRule implements OffsetRule {

		@Override
		public float getOffset(LayoutState layoutState) {
			return element.getX();
		}
	}

	private class ImmediateYRule implements OffsetRule {

		@Override
		public float getOffset(LayoutState layoutState) {
			return element.getY();
		}
	}

	private class ImmediateWidthRule implements SizeRule {

		@Override
		public float getSize(LayoutState layoutState) {
			return element.getWidth();
		}

		@Override
		public boolean isAutoSize() {
			return false;
		}
	}

	private class ImmediateHeightRule implements SizeRule {

		@Override
		public float getSize(LayoutState layoutState) {
			if(element instanceof ScrollBox) {
				return ((ScrollBox) element).getScrollContentHeight();
			}
			return element.getHeight();
		}

		@Override
		public boolean isAutoSize() {
			return false;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy