@Override public Vector2i copy(Vector2i value) { return new Vector2i(value); } }
@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i sizeHint) { canvas.setPart(ICON_PART); if (icon != null) { Vector2i iconSize = getIconSize(canvas); int maxHorizontalIcons = sizeHint.x / iconSize.x; int rows = ((maxIcons - 1) / maxHorizontalIcons) + 1; int columns = Math.min(maxIcons, maxHorizontalIcons); return new Vector2i(columns * iconSize.x + (columns - 1) * spacing, rows * iconSize.y + (rows - 1) * spacing); } else { return Vector2i.zero(); } }
@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); }
/** * @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)); } } }
@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i sizeHint) { return Vector2i.zero(); }
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; } }
@Override public void processMousePosition(Vector2i position) { if (clickedRegion != null) { Vector2i relPos = new Vector2i(position); relPos.sub(clickedRegion.offset); clickedRegion.listener.onMouseDrag(new NUIMouseDragEvent(mouse, keyboard, relPos)); InteractionRegion next = iter.next(); if (next.region.contains(position)) { Vector2i relPos = new Vector2i(position); relPos.sub(next.offset); boolean isTopMostElement = newMouseOverRegions.isEmpty(); next.listener.onMouseOver(new NUIMouseOverEvent(mouse, keyboard, relPos, isTopMostElement)); topMouseOverRegion = newTopMouseOverRegion; tooltipTime = time.getGameTime() + newTopMouseOverRegion.element.getTooltipDelay(); lastTooltipPosition.set(position); } else { if (lastTooltipPosition.gridDistance(position) > MAX_DOUBLE_CLICK_DISTANCE) { tooltipTime = time.getGameTime() + newTopMouseOverRegion.element.getTooltipDelay(); lastTooltipPosition.set(position);
@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); } } }
@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i areaHint) { Vector2i availableSize = new Vector2i(areaHint); int numColumns = TeraMath.ceilToInt((float) widgetList.size() / rows); if (numColumns > 0) { Vector2i size = new Vector2i(); int[] rowSizes = new int[rows]; while (columns.hasNext()) { rowSizes[i] = Math.max(rowSizes[i], columnInfo.widgetSizes.get(i).getY());
@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i areaHint) { Vector2i availableSize = new Vector2i(areaHint); int numRows = TeraMath.ceilToInt((float) widgetList.size() / columns); if (numRows > 0) { Vector2i size = new Vector2i(); int[] columnSizes = new int[columns]; while (rows.hasNext()) { columnSizes[i] = Math.max(columnSizes[i], rowInfo.widgetSizes.get(i).getX());
public MouseWheelEvent(Vector2i mousePosition, int wheelTurns, float delta) { super(delta); this.wheelTurns = wheelTurns; this.mousePosition.set(mousePosition); }
@Override public boolean processMouseRelease(MouseInput button, Vector2i pos) { if (clickedRegion != null) { Vector2i relPos = new Vector2i(pos); relPos.sub(clickedRegion.region.min()); clickedRegion.listener.onMouseRelease(new NUIMouseReleaseEvent(mouse, keyboard, relPos, button)); clickedRegion = null; return true; } return false; }
@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i sizeHint) { canvas.setPart(TREE_NODE); if (model.get().getNodeCount() == 0) { return new Vector2i(); } model.get().setEnumerateExpandedOnly(false); Vector2i result = new Vector2i(); for (int i = 0; i < model.get().getNodeCount(); i++) { Tree<T> node = model.get().getNode(i); Vector2i preferredSize = canvas.getCurrentStyle().getMargin() .grow(itemRenderer.getPreferredSize(node.getValue(), canvas) .addX(node.getDepth() * levelIndent.get())); result.x = Math.max(result.x, preferredSize.x); result.y += preferredSize.y; } model.get().setEnumerateExpandedOnly(true); // Account for the expand/contract button! result.addX(levelIndent.get()); return result; }
for (RowInfo row : rowInfos) { for (int column = 0; column < row.widgetSizes.size(); column++) { minWidths[column] = Math.max(minWidths[column], row.widgetSizes.get(column).getX());
for (ColumnInfo column : columnInfos) { for (int row = 0; row < column.widgetSizes.size(); row++) { minHeights[row] = Math.max(minHeights[row], column.widgetSizes.get(row).getY());
@Override public Vector2i getPreferredSize(T value, Canvas canvas) { Font font = canvas.getCurrentStyle().getFont(); String text = getString(value); TextureRegion texture = getTexture(value); if (texture == null) { List<String> lines = TextLineBuilder.getLines(font, text, canvas.size().x); return font.getSize(lines); } else { int iconWidth = marginLeft + texture.getWidth() + marginRight; List<String> lines = TextLineBuilder.getLines(font, text, canvas.size().x - iconWidth); return font.getSize(lines).addX(iconWidth); } }
UIStyle style = canvas.getCurrentStyle(); Vector2i attachmentSize = canvas.calculatePreferredSize(attachment); attachmentSize.add(style.getMargin().getTotals());