/* * Copyright (c) 2020 Yoshihisa Nitta * Released under the MIT license * http://opensource.org/licenses/mit-license.php */ import java.util.*; import java.awt.geom.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class ToyGraphics extends JComponent { int width, height; BufferedImage image; protected Graphics2D g2d; public boolean isMousePressed = false; public void initImage(int w,int h) { width = w; height = h; image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); g2d = image.createGraphics(); setFont(); clear(); } public void initFrame() { JFrame frame = new JFrame("Graphic Window"); Container c = frame.getContentPane(); Dimension size = getPreferredSize(); int w = size.width; int h = size.height; c.setSize(w,h); c.add(this,BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } public Dimension getPreferredSize() { return new Dimension(image.getWidth(),image.getHeight()); } public ToyGraphics() { this(1280,720); } public ToyGraphics(int w,int h) { initImage(w,h); initFrame(); } public void setFont() { setFont("Serif",24); } public void setFont(String name,int size) { g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Font font = new Font(name,Font.PLAIN,size); g2d.setFont(font); } public void setColor(Color col) { g2d.setColor(col); } public void drawText(String txt,int x,int y) { g2d.drawString(txt,x,y); } public void paint(Graphics g) { g.drawImage(image,0,0,this); } public static int rgb2pixel(int r,int g,int b) throws IllegalArgumentException { return rgb2pixel(255,r,g,b); } public static int rgb2pixel(int a,int r,int g,int b) throws IllegalArgumentException { if (a<0 || a>255 || r<0 || r>255 || g<0 || g>255 || b<0 || b>255) throw new IllegalArgumentException("bad color:("+a+","+r+","+g+","+b+")"); return (a<<24) | (r << 16) | (g << 8) | (b); } public void drawRGB(int x,int y,int r,int g,int b) { setRGB(x,y,r,g,b); repaint(x,y,1,1); } public void drawRGB(int x,int y,int pxl) { setRGB(x,y,pxl); repaint(x,y,1,1); } public void setRGB(int x,int y,int r,int g,int b) { setRGB(x,y,rgb2pixel(r,g,b)); } public void setRGB(int x,int y,int pxl) { if (x < 0 || x>width || y<0 || y>height) return; image.setRGB(x,y,pxl); } public void clear() { for (int y=0; y