@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i sizeHint) { return canvas.calculateRestrictedSize(attachment, sizeHint); }
@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i sizeHint) { return canvas.calculateRestrictedSize(icon, sizeHint); }
@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i sizeHint) { if (content != null) { return canvas.calculateRestrictedSize(content, sizeHint); } return Vector2i.zero(); }
@Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i sizeHint) { if (!contents.isEmpty()) { return canvas.calculateRestrictedSize(contents.get(currentTab), sizeHint); } return Vector2i.zero(); }
private RowInfo calculateRowSize(List<UIWidget> row, Canvas canvas, Vector2i areaHint) { int availableWidth = areaHint.x - horizontalSpacing * (columns - 1); RowInfo rowInfo = new RowInfo(); for (int i = 0; i < columns && i < row.size(); ++i) { UIWidget widget = row.get(i); Vector2i cellSize = new Vector2i(availableWidth, areaHint.y); if (!autoSizeColumns) { cellSize.x = (int) (cellSize.x * columnWidths[i]); } if (widget != null) { Vector2i contentSize = canvas.calculateRestrictedSize(widget, cellSize); rowInfo.widgetSizes.add(contentSize); rowInfo.height = Math.max(rowInfo.height, contentSize.y); } else { rowInfo.widgetSizes.add(new Vector2i(0, 0)); } } return rowInfo; }
private ColumnInfo calculateColumnSize(List<UIWidget> column, Canvas canvas, Vector2i areaHint) { int availableHeight = areaHint.y - verticalSpacing * (rows - 1); ColumnInfo columnInfo = new ColumnInfo(); for (int i = 0; i < rows && i < column.size(); ++i) { UIWidget widget = column.get(i); Vector2i cellSize = new Vector2i(areaHint.x, availableHeight); if (!autoSizeRows) { cellSize.y = (int) (cellSize.y * rowHeights[i]); } if (widget != null) { Vector2i contentSize = canvas.calculateRestrictedSize(widget, cellSize); columnInfo.widgetSizes.add(contentSize); columnInfo.width = Math.max(columnInfo.width, contentSize.x); } else { columnInfo.widgetSizes.add(new Vector2i(0, 0)); } } return columnInfo; }
/** * Retrieves the preferred content size of this {@code RowLayout}. * This is the minimum size this layout will take, given no space restrictions. * * @param canvas The {@code Canvas} on which this {@code RowLayout} is drawn * @param areaHint A {@link Vector2i} representing the space available for widgets to be drawn in this layout * @return A {@link Vector2i} representing the preferred content size of this {@code RowLayout} */ @Override public Vector2i getPreferredContentSize(Canvas canvas, Vector2i areaHint) { TIntList widths = calcWidths(canvas); Vector2i result = new Vector2i(areaHint.x, 0); for (int i = 0; i < contents.size(); ++i) { Vector2i widgetSize = canvas.calculateRestrictedSize(contents.get(i), new Vector2i(TeraMath.floorToInt(widths.get(i)), areaHint.y)); result.y = Math.max(result.y, widgetSize.y); } return result; }
@Before public void setup() { rowLayout = new RowLayout(); itemAt1x1 = mock(UIWidget.class); itemAt1x2 = mock(UIWidget.class); itemAt1x3 = mock(UIWidget.class); canvas = mock(Canvas.class); // +-----------------------------------+ +---+ +-------+ // | | |1x2| | | // | 1x1 | +---+ | | // | | | 1x3 | // +-----------------------------------+ | | // | | // +-------+ when(canvas.calculateRestrictedSize(eq(itemAt1x1), any(Vector2i.class))).thenReturn(new Vector2i(50, 10)); when(canvas.calculateRestrictedSize(eq(itemAt1x2), any(Vector2i.class))).thenReturn(new Vector2i(5, 5)); when(canvas.calculateRestrictedSize(eq(itemAt1x3), any(Vector2i.class))).thenReturn(new Vector2i(10, 15)); Vector2i availableSize = new Vector2i(CANVAS_WIDTH, CANVAS_HEIGHT); when(canvas.size()).thenReturn(availableSize); rowLayout.addWidget(itemAt1x1, null); rowLayout.addWidget(itemAt1x2, null); rowLayout.addWidget(itemAt1x3, null); }
@Override public void onDraw(Canvas canvas) { Vector2i canvasSize = canvas.size(); Vector2i contentSize = canvas.calculateRestrictedSize(content, canvasSize); int horizontalScrollbarHeight = canvas.calculateRestrictedSize(horizontalBar, canvasSize).y; int verticalScrollbarWidth = canvas.calculateRestrictedSize(verticalBar, canvasSize).x;
when(canvas.calculateRestrictedSize(eq(itemAt1x1), any(Vector2i.class))).thenReturn(new Vector2i(50, 10)); when(canvas.calculateRestrictedSize(eq(itemAt2x1), any(Vector2i.class))).thenReturn(new Vector2i(5, 5)); when(canvas.calculateRestrictedSize(eq(itemAt3x1), any(Vector2i.class))).thenReturn(new Vector2i(10, 10)); when(canvas.calculateRestrictedSize(eq(itemAt1x2), any(Vector2i.class))).thenReturn(new Vector2i(20, 10)); when(canvas.calculateRestrictedSize(eq(itemAt2x2), any(Vector2i.class))).thenReturn(new Vector2i(5, 5)); when(canvas.calculateRestrictedSize(eq(itemAt3x2), any(Vector2i.class))).thenReturn(new Vector2i(20, 10));
/** * Draw the widget with just a horizontal scrollbar. * <p> * If the content doesn't fit in the vertical axis, it will be cropped * * @param canvas The canvas to draw on * @param availableSize The available size for the layout. Does not include scrollbar size * @param contentSize The size of the widget to draw */ private void drawWithJustHorizontal(Canvas canvas, Vector2i availableSize, Vector2i contentSize) { Rect2i contentRegion = Rect2i.createFromMinAndSize(Vector2i.zero(), availableSize); canvas.addInteractionRegion(scrollListener); horizontalBar.setRange(contentSize.x - contentRegion.width()); int scrollbarHeight = canvas.calculateRestrictedSize(verticalBar, availableSize).y; canvas.drawWidget(horizontalBar, Rect2i.createFromMinAndSize( new Vector2i(0, availableSize.y), new Vector2i(availableSize.x, scrollbarHeight))); try (SubRegion ignored = canvas.subRegion(contentRegion, true)) { canvas.drawWidget(content, Rect2i.createFromMinAndSize(-horizontalBar.getValue(), 0, contentSize.x, availableSize.y)); } }
int scrollbarWidth = canvas.calculateRestrictedSize(verticalBar, new Vector2i(canvas.size().x, canvas.size().y)).x; int scrollbarHeight = frame.size().y - itemMargin.getTop(); int availableWidth = frame.size().x - scrollbarWidth;
Rect2i.createFromMinAndSize( new Vector2i(availableSize.x, 0), canvas.calculateRestrictedSize(verticalBar, availableSize))); canvas.drawWidget(horizontalBar, Rect2i.createFromMinAndSize( new Vector2i(0, availableSize.y), canvas.calculateRestrictedSize(horizontalBar, availableSize)));
/** * Draws this widget with just a vertical scrollbar. * If the content doesn't fit in the horizontal axis, it will be cropped. * * @param canvas The canvas to draw on * @param availableSize The available size for the layout. Does not include scrollbar size * @param contentSize The size of the content */ private void drawWithJustVertical(Canvas canvas, Vector2i availableSize, Vector2i contentSize) { boolean atBottom = verticalBar.getRange() == verticalBar.getValue(); Rect2i contentRegion = Rect2i.createFromMinAndSize(Vector2i.zero(), availableSize); verticalBar.setRange(contentSize.y - contentRegion.height()); if ((stickToBottom && atBottom) || moveToBottomPending) { verticalBar.setValue(verticalBar.getRange()); moveToBottomPending = false; } if (moveToTopPending) { verticalBar.setValue(0); moveToTopPending = false; } canvas.addInteractionRegion(scrollListener); int scrollbarWidth = canvas.calculateRestrictedSize(verticalBar, availableSize).x; canvas.drawWidget(verticalBar, Rect2i.createFromMinAndSize( new Vector2i(availableSize.x, 0), new Vector2i(scrollbarWidth, availableSize.y))); try (SubRegion ignored = canvas.subRegion(contentRegion, true)) { canvas.drawWidget(content, Rect2i.createFromMinAndSize(0, -verticalBar.getValue(), availableSize.x, contentSize.y)); } }
width = canvas.calculateRestrictedSize(element.widget, new Vector2i(right - left, bottom - top)).x; height = canvas.calculateRestrictedSize(element.widget, new Vector2i(width, bottom - top)).y;