/* * Copyright (C) 2007 Clam <clamisgood@gmail.com> * Copyright (C) 2008, 2011 IsmAvatar <IsmAvatar@gmail.com> * Copyright (C) 2009 Quadduc <quadduc@gmail.com> * * This file is part of LateralGM. * LateralGM is free software and comes with ABSOLUTELY NO WARRANTY. * See LICENSE for details. */ package org.lateralgm.components.visual; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.Shape; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import org.lateralgm.components.NumberField.ValueChangeEvent; import org.lateralgm.components.NumberField.ValueChangeListener; import org.lateralgm.components.impl.SpriteStripDialog; public class SpriteStripPreview extends AbstractImagePreview implements ValueChangeListener { private static final long serialVersionUID = 1L; private final SpriteStripDialog props; public SpriteStripPreview(SpriteStripDialog sd) { super(); props = sd; enableEvents(MouseEvent.MOUSE_PRESSED); enableEvents(MouseEvent.MOUSE_DRAGGED); } public void paintComponent(Graphics g) { super.paintComponent(g); BufferedImage img = getImage(); if (img != null) { Shape oldClip = reclip(g); g.setXORMode(Color.BLACK); //XOR mode so that bbox and origin can counter g.setColor(Color.WHITE); for (Rectangle r : props) g.drawRect(r.x,r.y,r.width - 1,r.height - 1); g.setPaintMode(); //just in case g.setClip(oldClip); //restore the clip } else setPreferredSize(new Dimension(0,0)); } private void setBoundedOrigin(int x, int y) { Dimension d = getPreferredSize(); x = Math.max(0,Math.min(d.width - 1,x)); y = Math.max(0,Math.min(d.height - 1,y)); props.setOrigin(x,y); } protected void processMouseEvent(MouseEvent e) { if (e.getID() == MouseEvent.MOUSE_PRESSED && e.getButton() == MouseEvent.BUTTON1 && e.getX() < getPreferredSize().width && e.getY() < getPreferredSize().height) setBoundedOrigin(e.getX(),e.getY()); super.processMouseEvent(e); } protected void processMouseMotionEvent(MouseEvent e) { if (e.getID() == MouseEvent.MOUSE_DRAGGED && (e.getModifiers() & MouseEvent.BUTTON1_MASK) != 0) setBoundedOrigin(e.getX(),e.getY()); super.processMouseMotionEvent(e); } protected BufferedImage getImage() { return props == null ? null : props.img; } public void valueChange(ValueChangeEvent evt) { updateUI(); } }