@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i sizeHint) { int numSlots = getNumSlots(); if (numSlots == 0 || cells.isEmpty()) { return Vector2i.zero(); } Vector2i cellSize = canvas.calculatePreferredSize(cells.get(0)); if (cellSize.getX() == 0 || cellSize.getY() == 0) { return Vector2i.zero(); } int horizontalCells = Math.min(Math.min(maxHorizontalCells, numSlots), sizeHint.getX() / cellSize.getX()); int verticalCells = ((numSlots - 1) / horizontalCells) + 1; return new Vector2i(horizontalCells * cellSize.x, verticalCells * cellSize.y); }
@Override public void onDraw(Canvas canvas) { int numSlots = getNumSlots(); if (numSlots == 0 || cells.isEmpty()) { return; } Vector2i cellSize = canvas.calculatePreferredSize(cells.get(0)); if (cellSize.getX() == 0 || cellSize.getY() == 0) { return; } canvas.addInteractionRegion(interactionListener); int horizontalCells = Math.max(1, Math.min(maxHorizontalCells, canvas.size().getX() / cellSize.getX())); for (int i = 0; i < numSlots && i < cells.size(); ++i) { int horizPos = i % horizontalCells; int vertPos = i / horizontalCells; canvas.drawWidget(cells.get(i), Rect2i.createFromMinAndSize(horizPos * cellSize.x, vertPos * cellSize.y, cellSize.x, cellSize.y)); } }
/** * @param atlas The texture atlas that is being used * @param atlasSize How many textures the atlas contains in it's width and height. * @param validTextures Indices of the valid textures */ public TextureOffsetGeneratorComponent(final Texture atlas, final Vector2i atlasSize, final Vector2i[] validTextures) { final float textureWidth = atlas.getWidth() / (float) atlasSize.getX(); final float textureHeight = atlas.getHeight() / (float) atlasSize.getY(); Function<Vector2i, Vector2f> absolute2Relative = (absolute) -> new Vector2f( absolute.getX() * textureWidth, absolute.getY() * textureHeight ); this.validOffsets = new LinkedList<>(); for (Vector2i offset : validTextures) { this.validOffsets.add(absolute2Relative.apply(offset)); } } }
columnSizes[i] = Math.max(columnSizes[i], rowInfo.widgetSizes.get(i).getX());
for (RowInfo row : rowInfos) { for (int column = 0; column < row.widgetSizes.size(); column++) { minWidths[column] = Math.max(minWidths[column], row.widgetSizes.get(column).getX());
@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i areaHint) { Font font = canvas.getCurrentStyle().getFont(); String text = ""; if (capturingInput) { text = "???"; } else if (newInput != null) { text = newInput.getDisplayName(); } List<String> lines = TextLineBuilder.getLines(font, text, areaHint.getX()); return font.getSize(lines); }
/** * Retrieves the preferred content size of the {@code UIButton}. * This is the minimum size this layout will take, given no space restrictions. * * @param canvas The {@code Canvas} on which the {@code UIButton} is drawn * @param areaHint A {@link Vector2i} representing the available space for this {@code UIButton} * @return A {@link Vector2i} representing the preferred content size of the {@code UIButton} */ @Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i areaHint) { Font font = canvas.getCurrentStyle().getFont(); List<String> lines = TextLineBuilder.getLines(font, text.get(), areaHint.getX()); return font.getSize(lines); }
private float[] getSubset(float[] fullData, Rect2i fullRegion, Rect2i subRegion) { if (subRegion.size().x != fullRegion.size().x || subRegion.size().y != fullRegion.size().y) { float[] result = new float[subRegion.size().x * subRegion.size().y]; Vector2i offset = new Vector2i(subRegion.minX() - fullRegion.minX(), subRegion.minY() - fullRegion.minY()); for (int y = 0; y < subRegion.size().y; ++y) { System.arraycopy(fullData, offset.getX() + fullRegion.size().x * (y + offset.getY()), result, subRegion.size().x * y, subRegion.size().x); } return result; } else { return fullData; } }
private float[] getSubset(float[] fullData, Rect2i fullRegion, Rect2i subRegion) { if (subRegion.sizeX() != fullRegion.sizeX() || subRegion.sizeY() != fullRegion.sizeY()) { float[] result = new float[subRegion.sizeX() * subRegion.sizeY()]; Vector2i offset = new Vector2i(subRegion.minX() - fullRegion.minX(), subRegion.minY() - fullRegion.minY()); for (int y = 0; y < subRegion.sizeY(); ++y) { System.arraycopy(fullData, offset.getX() + fullRegion.sizeX() * (y + offset.getY()), result, subRegion.sizeX() * y, subRegion.sizeX()); } return result; } else { return fullData; } }
@Override public void onDraw(Canvas canvas) { canvas.addInteractionRegion(mainListener); Vector2i currentPosition = null; int currentWidth = 0; for (UIList<AbstractContextMenuItem> level : menuWidgets) { if (level.isVisible()) { if (currentPosition == null) { currentPosition = new Vector2i(position); } else { currentPosition.addX(currentWidth); } Rect2i region = Rect2i.createFromMinAndSize(currentPosition, canvas.calculatePreferredSize(level)); double percentageThreshold = 0.9; if (region.maxY() > canvas.getRegion().height() * percentageThreshold) { region = Rect2i.createFromMinAndMax(region.minX(), region.minY() - (region.maxY() - canvas.getRegion().height()) - (int) (canvas.getRegion().height() * (1 - percentageThreshold)), region.maxX(), canvas.getRegion().height()); } currentWidth = canvas.calculatePreferredSize(level).getX() - 8; canvas.drawWidget(level, region); } } }