package squidpony.squidgrid.gui.gdx;
/**
* Interface to build instances of {@link SquidPanel} by taking care of
* adjusting the panel to the screen size and the available fonts.
*
* @author smelC
*/
public interface IPanelBuilder {
/**
* This method builds a panel whose number of cells is such that the cell
* size is close to {@code desiredCellSize}. This method only supports
* square cells.
*
* @param screenWidth
* The screen's width, in number of pixels, as given by libgdx.
* @param screenHeight
* The screen's height, in number of pixels, as given by libgdx.
* @param desiredCellSize
* The cell size that you would like the panel to have. Width and
* height cannot be different, because this method supports only
* square cells.
* @param tcf
* The {@link TextCellFactory} to use. Can be {@code null} to
* create the panel.
* @return A screen wide squid panel, margins-aware, and with its position
* set.
*/
SquidPanel buildScreenWide(int screenWidth, int screenHeight, int desiredCellSize,
/* @Nullable */ TextCellFactory tcf);
/**
* Builds a panel by the number of requested cells.
*
* @param hCells
* The number of horizontal cells of the panel to build.
* @param vCells
* The number of vertical cells of the panel to build.
* @param cellWidth
* The width of a cell (in pixels).
* @param cellHeight
* The height of a cell (in pixels).
* @param tcf_
* The text cell factory to use, if any.
* @return A freshly built panel.
*/
SquidPanel buildByCells(int hCells, int vCells, int cellWidth, int cellHeight,
/* @Nullable */ TextCellFactory tcf_);
/**
* @param sz
* @return A cell size close to {@code sz} that can be displayed (i.e. for
* which there's a font, according to
* {@link #fontSizeForCellSize(int)} and {@link #hasFontOfSize(int)}
* ).
*/
int adjustCellSize(int sz);
/**
* Method to check whether increasing the cell size is possible.
*
* @param cellSize
* @return {@code true} if {@code cellSize} is too big.
*/
boolean cellSizeTooBig(int cellSize);
/**
* Method to check whether decreasing the cell size is possible.
*
* @param cellSize
* @return {@code true} if {@code cellSize} is too small.
*/
boolean cellSizeTooSmall(int cellSize);
/**
* @param cellSize
* @return Whether there's a font available for a cell of size
* {@code cellSize}.
*/
boolean hasFontForCellOfSize(int cellSize);
/**
* @param cellSize
* @return The font size to use for a square cell size of {@code cellSize}.
* Generally, it is {@code cellSize}; but it can be less in case
* glyphs are too large.
*/
int fontSizeForCellSize(int cellSize);
/**
* @param sz
* @return Whether a square font of size {@code sz} is available.
*/
boolean hasFontOfSize(int sz);
/**
* A partial implementation of {@link IPanelBuilder}.
*
* @author smelC
*/
abstract class Skeleton implements IPanelBuilder {
@Override
public boolean hasFontForCellOfSize(int cellSize) {
return hasFontOfSize(fontSizeForCellSize(cellSize));
}
}
}