@Override public void onDraw(Canvas canvas) { Rect2i clearButtonRegion = Rect2i.createFromMinAndSize(0, 0, 30, canvas.size().y); lastWidth = canvas.size().x - clearButtonRegion.size().x; if (isEnabled()) { canvas.addInteractionRegion(interactionListener, Rect2i.createFromMinAndMax(0, 0, canvas.size().x, canvas.size().y)); canvas.addInteractionRegion(clearInteractionListener, Rect2i.createFromMinAndMax(canvas.size().x, 0, canvas.size().x + clearButtonRegion.size().x, canvas.size().y)); } drawAll(canvas, canvas.size().x - clearButtonRegion.size().x); } }
/** * Located in the onDraw method, this draws the menu items when the scrollbar is unnecessary. * * @param canvas {@link Canvas} from the onDraw method. * @param itemMargin Margin around every menu item. * @param itemHeight Height per menu item. */ private void createNoScrollItems(Canvas canvas, Border itemMargin, int itemHeight) { for (int i = 0; i < optionListeners.size(); ++i) { readItemMouseOver(canvas, i); Rect2i itemRegion = Rect2i.createFromMinAndSize(0, canvas.size().y + itemHeight * i, canvas.size().x, itemHeight); drawItem(canvas, itemMargin, i, itemRegion); } }
/** * Handles how the widget is drawn. * * @param canvas The canvas on which the widget resides. */ @Override public void onDraw(Canvas canvas) { lastWidth = canvas.size().x; if (isEnabled()) { canvas.addInteractionRegion(interactionListener, canvas.getRegion()); } drawAll(canvas, canvas.size().x); }
@Override public void onDraw(Canvas canvas) { for (HUDElement element : elementsLookup.values()) { int minX = TeraMath.floorToInt(element.region.minX() * canvas.size().x); int minY = TeraMath.floorToInt(element.region.minY() * canvas.size().y); int sizeX = TeraMath.floorToInt(element.region.width() * canvas.size().x); int sizeY = TeraMath.floorToInt(element.region.height() * canvas.size().y); Rect2i region = Rect2i.createFromMinAndSize(minX, minY, sizeX, sizeY); canvas.drawWidget(element.widget, region); } }
@Override public void onDraw(Canvas canvas) { int filledWidth = 0; int filledHeight = 0; int heightOffset = 0; for (UIWidget widget : contents) { Vector2i size = canvas.calculatePreferredSize(widget); if (filledWidth != 0 && filledWidth + size.x > canvas.size().x) { heightOffset += filledHeight; filledWidth = 0; filledHeight = 0; } canvas.drawWidget(widget, Rect2i.createFromMinAndSize(filledWidth, heightOffset, size.x, size.y)); filledWidth += size.x; filledHeight = Math.max(filledHeight, size.y); } }
/** * Draws the widgets contained in this layout's widget list, * according to the widths calculated in {@link #calcWidths(Canvas)}. * This is called every frame. * * @param canvas The {@link Canvas} on which this {@code RowLayout} is drawn */ @Override public void onDraw(Canvas canvas) { TIntList widths = calcWidths(canvas); if (!contents.isEmpty()) { int xOffset = 0; for (int i = 0; i < contents.size(); ++i) { int itemWidth = widths.get(i); Rect2i region = Rect2i.createFromMinAndSize(xOffset, 0, itemWidth, canvas.size().y); canvas.drawWidget(contents.get(i), region); xOffset += itemWidth; xOffset += horizontalSpacing; } } }
@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)); } }
@Override public void onDraw(Canvas canvas) { setScreenSize(canvas.size()); calculateSizes(); canvas.addInteractionRegion(dragListener); for (PositionalWidget widget : widgets) { drawWidget(canvas, widget); } }
@Override public Vector2i getPreferredSize(TooltipLine value, Canvas canvas) { Font font = getFont(value); List<String> lines = TextLineBuilder.getLines(font, value.getText(), canvas.size().x); return font.getSize(lines); }
@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); } }
/** * Draws the cursor in the text field. * * @param canvas The canvas on which the widget resides */ protected void drawCursor(Canvas canvas) { if (blinkCounter < BLINK_RATE) { Font font = canvas.getCurrentStyle().getFont(); String beforeCursor = text.get(); if (getCursorPosition() < text.get().length()) { beforeCursor = beforeCursor.substring(0, getCursorPosition()); } List<String> lines = TextLineBuilder.getLines(font, beforeCursor, canvas.size().x); // TODO: Support different alignments int lastLineWidth = font.getWidth(lines.get(lines.size() - 1)); Rect2i region = Rect2i.createFromMinAndSize(lastLineWidth, (lines.size() - 1) * font.getLineHeight(), 1, font.getLineHeight()); canvas.drawTexture(cursorTexture, region, canvas.getCurrentStyle().getTextColor()); } }
@Override public Vector2i getPreferredSize(T value, Canvas canvas) { Font font = canvas.getCurrentStyle().getFont(); String text = getString(value); if (wrap) { List<String> lines = TextLineBuilder.getLines(font, text, canvas.size().x); return font.getSize(lines); } else { return new Vector2i(font.getWidth(text), font.getLineHeight()); } }
private void drawTicker(Canvas canvas, String part, Binding<Float> value, InteractionListener tickerListener, boolean rightTicker) { canvas.setPart(part); String display = String.format("%." + precision + "f", value.get()); int tickerWidth = canvas.getCurrentStyle().getFont().getWidth(formatString); tickerWidth += canvas.getCurrentStyle().getMargin().getTotalWidth(); sliderWidth = canvas.size().x - tickerWidth * 2; int drawLocation = pixelOffsetFor(value.get(), sliderWidth); if (rightTicker) { drawLocation += tickerWidth; } Rect2i tickerRegion = Rect2i.createFromMinAndSize(drawLocation, 0, tickerWidth, canvas.size().y); try (SubRegion ignored = canvas.subRegion(tickerRegion, false)) { canvas.drawBackground(); canvas.drawText(display); if (isEnabled()) { canvas.addInteractionRegion(tickerListener); } } }
@Override public void onDraw(Canvas canvas) { canvas.setPart(SLIDER); canvas.drawBackground(); canvas.setPart(TICKER); String display = getDisplayText(); int tickerWidth = canvas.getCurrentStyle().getFont().getWidth(display); tickerWidth += canvas.getCurrentStyle().getMargin().getTotalWidth(); sliderWidth = canvas.size().x - tickerWidth; int drawLocation = pixelOffsetFor(getValue(), sliderWidth); Rect2i tickerRegion = Rect2i.createFromMinAndSize(drawLocation, 0, tickerWidth, canvas.size().y); try (SubRegion ignored = canvas.subRegion(tickerRegion, false)) { canvas.drawBackground(); canvas.drawText(display); if (isEnabled()) { canvas.addInteractionRegion(tickerListener); } } }
public void layoutContainer(Canvas canvas, int[] bounds) { for (ComponentWrapper wrapper : children) { if (wrapper instanceof MigLayout) { MigLayout layout = (MigLayout) wrapper; layout.layoutContainer(canvas, bounds); } else if (wrapper instanceof MigComponent) { MigComponent migComponent = (MigComponent) wrapper; migComponent.calculatePreferredSize(canvas, canvas.size()); } } checkCache(); if (grid.layout(bounds, lc.getAlignX(), lc.getAlignY(), debug, true)) { grid = null; checkCache(); grid.layout(bounds, lc.getAlignX(), lc.getAlignY(), debug, false); } }
@Test public void testNoRelativeWidths() throws Exception { rowLayout.setHorizontalSpacing(0); Vector2i result = rowLayout.getPreferredContentSize(canvas, canvas.size()); //Preferred width should be width of canvas assertEquals(CANVAS_WIDTH, result.x); //Preferred height should be the height of the tallest widget assertEquals(15, result.y); rowLayout.onDraw(canvas); //Width split equally among 3 widgets as they have no relative widths verify(canvas).drawWidget(itemAt1x1, Rect2i.createFromMinAndSize(0, 0, CANVAS_WIDTH / 3, CANVAS_HEIGHT)); verify(canvas).drawWidget(itemAt1x2, Rect2i.createFromMinAndSize(CANVAS_WIDTH / 3, 0, CANVAS_WIDTH / 3, CANVAS_HEIGHT)); verify(canvas).drawWidget(itemAt1x3, Rect2i.createFromMinAndSize(CANVAS_WIDTH / 3 + CANVAS_WIDTH / 3, 0, CANVAS_WIDTH / 3, CANVAS_HEIGHT)); }
@Test public void testThreeColumnsAutosizedMinimallySized() throws Exception { columnLayout.setAutoSizeColumns(true); columnLayout.setFillVerticalSpace(false); Vector2i result = columnLayout.getPreferredContentSize(canvas, canvas.size()); assertEquals(75, result.x); assertEquals(20, result.y); columnLayout.onDraw(canvas); verify(canvas).drawWidget(itemAt1x1, Rect2i.createFromMinAndSize(((CANVAS_WIDTH - 75) / 2), ((CANVAS_HEIGHT - 20) / 2), 50, 10)); verify(canvas).drawWidget(itemAt2x1, Rect2i.createFromMinAndSize(((CANVAS_WIDTH - 75) / 2) + 50, ((CANVAS_HEIGHT - 20) / 2), 5, 10)); verify(canvas).drawWidget(itemAt3x1, Rect2i.createFromMinAndSize(((CANVAS_WIDTH - 75) / 2) + 50 + 5, ((CANVAS_HEIGHT - 20) / 2), 20, 10)); verify(canvas).drawWidget(itemAt1x2, Rect2i.createFromMinAndSize(((CANVAS_WIDTH - 75) / 2), ((CANVAS_HEIGHT - 20) / 2) + 10, 50, 10)); verify(canvas).drawWidget(itemAt2x2, Rect2i.createFromMinAndSize(((CANVAS_WIDTH - 75) / 2) + 50, ((CANVAS_HEIGHT - 20) / 2) + 10, 5, 10)); verify(canvas).drawWidget(itemAt3x2, Rect2i.createFromMinAndSize(((CANVAS_WIDTH - 75) / 2) + 50 + 5, ((CANVAS_HEIGHT - 20) / 2) + 10, 20, 10)); }
@Override public void onDraw(Canvas canvas) { int[] bounds = {0, 0, canvas.size().x, canvas.size().y}; layoutContainer(canvas, bounds); for (ComponentWrapper wrapper : wrappers.values()) { UIWidget component = (UIWidget) wrapper.getComponent(); Rect2i region = Rect2i.createFromMinAndSize(wrapper.getX(), wrapper.getY(), wrapper.getWidth(), wrapper.getHeight()); canvas.drawWidget(component, region); } if (debug) { grid.paintDebug(); } for (Rect2i region : debugRects) { canvas.drawLine(region.minX(), region.minY(), region.maxX(), region.minY(), Color.WHITE); canvas.drawLine(region.maxX(), region.minY(), region.maxX(), region.maxY(), Color.WHITE); canvas.drawLine(region.maxX(), region.maxY(), region.minX(), region.maxY(), Color.WHITE); canvas.drawLine(region.minX(), region.maxY(), region.minX(), region.minY(), Color.WHITE); } }
@Test public void testSwitchCard() throws Exception { Vector2i result = cardLayout.getPreferredContentSize(canvas, canvas.size()); //Preferred width should be the longest preferred width among widgets assertEquals(50, result.x); //Preferred height should be the tallest preferred height among widgets assertEquals(15, result.y); //Switch to widget1 cardLayout.setDisplayedCard("widget1"); cardLayout.onDraw(canvas); verify(canvas).drawWidget(widget1); //Switch to widget2 cardLayout.setDisplayedCard("widget2"); cardLayout.onDraw(canvas); verify(canvas).drawWidget(widget2); //Switch to widget3 cardLayout.setDisplayedCard("widget3"); cardLayout.onDraw(canvas); verify(canvas).drawWidget(widget3); } }