diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/micro/ArduinoUno.java b/diylc/diylc-library/src/main/java/org/diylc/components/micro/ArduinoUno.java index cbde1d15..191f468a 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/micro/ArduinoUno.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/micro/ArduinoUno.java @@ -260,28 +260,56 @@ public class ArduinoUno extends AbstractMakerBoard { @Override public void drawIcon(Graphics2D g2d, int width, int height) { + double boardX = 5; + double boardY = 3; + double boardW = width - boardX - 2; + double boardH = height - 6; + + // USB Type-B Jack (metallic silver, top left protruding) + double usbW = 7; + double usbH = 8; + double usbX = 1; + double usbY = boardY + 2; + + // DC Power Jack (dark body, bottom left protruding) + double dcW = 7; + double dcH = 6; + double dcX = 1; + double dcY = boardY + boardH - dcH - 3; + + // Board PCB g2d.setColor(ARDUINO_BLUE); - g2d.fill(new RoundRectangle2D.Double(2, 4, width - 4, height - 8, 6, 6)); + g2d.fill(new RoundRectangle2D.Double(boardX, boardY, boardW, boardH, 4, 4)); g2d.setColor(ARDUINO_BLUE.darker()); - g2d.draw(new RoundRectangle2D.Double(2, 4, width - 4, height - 8, 6, 6)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + g2d.draw(new RoundRectangle2D.Double(boardX, boardY, boardW, boardH, 4, 4)); - // USB / DC jacks + // Draw USB Jack g2d.setColor(USB_METAL_COLOR); - g2d.fillRect(3, 7, 7, 6); - g2d.setColor(Color.DARK_GRAY); - g2d.fillRect(3, 19, 8, 6); + g2d.fill(new RoundRectangle2D.Double(usbX, usbY, usbW, usbH, 2, 2)); + g2d.setColor(METAL_SHIELD_BORDER); + g2d.draw(new RoundRectangle2D.Double(usbX, usbY, usbW, usbH, 2, 2)); - // IC + // Draw DC Jack g2d.setColor(IC_BODY_COLOR); - g2d.fillRect(14, 12, 14, 8); + g2d.fill(new RoundRectangle2D.Double(dcX, dcY, dcW, dcH, 2, 2)); + g2d.setColor(Color.BLACK); + g2d.draw(new RoundRectangle2D.Double(dcX, dcY, dcW, dcH, 2, 2)); - // Header pin strips - g2d.setColor(HEADER_BODY_COLOR); - g2d.fillRect(12, 5, 16, 3); - g2d.fillRect(12, 24, 16, 3); + // Arduino Infinity logo + double scale = 15.0 / 95.56; + double logoW = 95.56 * scale; + double logoH = 45.33 * scale; + double logoX = boardX + (boardW - logoW) / 2.0 + 1.0; + double logoY = boardY + 3.5; + drawArduinoLogo(g2d, logoX, logoY, scale); + // UNO text below logo g2d.setColor(Color.WHITE); - g2d.setFont(new Font("SansSerif", Font.BOLD, 7)); - StringUtils.drawCenteredText(g2d, "UNO", width / 2 + 5, height / 2 + 1, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + int fontSize = Math.max(7, (int) Math.round(boardH * 0.28)); + g2d.setFont(new Font("SansSerif", Font.BOLD, fontSize)); + double textY = logoY + logoH + (boardY + boardH - (logoY + logoH)) / 2.0; + double textX = boardX + (boardW / 2.0) + 0.5; + StringUtils.drawCenteredText(g2d, "UNO", textX, textY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } } diff --git a/diylc/diylc-library/src/test/java/org/diylc/components/micro/ArduinoUnoTest.java b/diylc/diylc-library/src/test/java/org/diylc/components/micro/ArduinoUnoTest.java index bfac00fa..efabe3e2 100644 --- a/diylc/diylc-library/src/test/java/org/diylc/components/micro/ArduinoUnoTest.java +++ b/diylc/diylc-library/src/test/java/org/diylc/components/micro/ArduinoUnoTest.java @@ -127,7 +127,14 @@ public class ArduinoUnoTest { outDir.mkdirs(); File outFile = new File(outDir, "arduino_uno_rendered.png"); ImageIO.write(img, "PNG", outFile); - g2d.dispose(); + + // Render Icon (32x32) + BufferedImage iconImg = new BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB); + Graphics2D iconG2d = iconImg.createGraphics(); + iconG2d.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON); + uno.drawIcon(iconG2d, 32, 32); + iconG2d.dispose(); + ImageIO.write(iconImg, "PNG", new File(outDir, "arduino_uno_icon.png")); } }