/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
******************************************************************************/
package com.badlogic.gdx.scenes.scene2d.utils;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
/**
* Provides methods for an actor to participate in layout and to provide a minimum, preferred, and maximum size.
*
* @author Nathan Sweet
*/
public interface Layout {
/**
* Computes and caches any information needed for drawing and, if this actor has children, positions and sizes each
* child, calls {@link #invalidate()} any each child whose width or height has changed, and calls
* {@link #validate()} on each child. This method should almost never be called directly, instead
* {@link #validate()} should be used.
*/
public void layout();
/**
* Invalidates this actor's layout, causing {@link #layout()} to happen the next time {@link #validate()} is called.
* This method should be called when state changes in the actor that requires a layout but does not change the
* minimum, preferred, maximum, or actual size of the actor (meaning it does not affect the parent actor's layout).
*/
public void invalidate();
/**
* Invalidates this actor and all its parents, calling {@link #invalidate()} on all involved actors. This method
* should be called when state changes in the actor that affects the minimum, preferred, maximum, or actual size of
* the actor (meaning it it potentially affects the parent actor's layout).
*/
public void invalidateHierarchy();
/**
* Ensures the actor has been laid out. Calls {@link #layout()} if {@link #invalidate()} has called since the last
* time {@link #validate()} was called, or if the actor otherwise needs to be laid out. This method is usually
* called in {@link Actor#draw(SpriteBatch, float)} before drawing is performed.
*/
public void validate();
/**
* Sizes this actor to its preferred width and height and, if this changed the size, causes the actor to be laid out
* by calling {@link #invalidate()} then {@link #validate()}.
* <p>
* Generally this method should not be called in an actor's constructor because it calls {@link #layout()}, which
* means a subclass would have layout() called before the subclass' constructor. Instead, in constructors, simply
* set the actors width and height to {@link #getPrefWidth()} and {@link #getPrefHeight()}. This allows the actor to
* have a size at construction time for more convenient use outside of a {@link Table}.
*/
public void pack();
/**
* If true, this actor will be sized to the parent in {@link #validate()}. If the parent is the stage, the actor
* will be sized to the stage.
*/
public void setFillParent(boolean fillParent);
/**
* Enables or disables the layout for this actor and all child actors, recursively. When false, {@link #validate()}
* will not cause a layout to occur. This is useful when an actor will be manipulated externally, such as with
* actions. Default is true.
*/
public void setLayoutEnabled(boolean enabled);
public float getMinWidth();
public float getMinHeight();
public float getPrefWidth();
public float getPrefHeight();
public float getMaxWidth();
public float getMaxHeight();
}