package com.github.czyzby.lml.parser.impl.attribute.container; import com.badlogic.gdx.scenes.scene2d.ui.Cell; import com.badlogic.gdx.scenes.scene2d.ui.Container; import com.badlogic.gdx.scenes.scene2d.ui.Value; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.tag.LmlAttribute; import com.github.czyzby.lml.parser.tag.LmlTag; import com.github.czyzby.lml.util.LmlUtilities; /** See {@link Container#minSize(com.badlogic.gdx.scenes.scene2d.ui.Value)}. If container is in a table cell, it also * calls {@link Cell#minSize(com.badlogic.gdx.scenes.scene2d.ui.Value)}. See * {@link LmlUtilities#parseHorizontalValue(LmlParser, LmlTag, com.badlogic.gdx.scenes.scene2d.Actor, String)} and * {@link LmlUtilities#parseVerticalValue(LmlParser, LmlTag, com.badlogic.gdx.scenes.scene2d.Actor, String)} for more * info on value parsing. Mapped to "minSize". * * @author MJ */ public class ContainerMinSizeLmlAttribute implements LmlAttribute<Container<?>> { // No getter for minWidthValue, so we cannot use abstract base... @Override @SuppressWarnings("unchecked") public Class<Container<?>> getHandledType() { // Double cast as there were a problem with generics - SomeClass.class cannot be returned as // <Class<SomeClass<?>>, even though casting never throws ClassCastException in the end. return (Class<Container<?>>) (Object) Container.class; } @Override public final void process(final LmlParser parser, final LmlTag tag, final Container<?> actor, final String rawAttributeData) { final Value xValue = LmlUtilities.parseHorizontalValue(parser, tag.getParent(), actor, rawAttributeData); final Value yValue = LmlUtilities.parseVerticalValue(parser, tag.getParent(), actor, rawAttributeData); actor.minWidth(xValue); actor.minHeight(yValue); final Cell<?> cell = LmlUtilities.getCell(actor, tag.getParent()); if (cell != null) { cell.minWidth(xValue); cell.minHeight(yValue); } } }