package com.drawbridge.dm;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.HashSet;
import javax.swing.JPanel;
import com.drawbridge.correspondance.Spotlight;
import com.drawbridge.correspondance.Spotlightable;
import com.drawbridge.utils.BackgroundSelector;
import com.drawbridge.utils.BackgroundSelector.BackgroundSelectorListener;
import com.drawbridge.utils.GraphicUtils;
import com.drawbridge.utils.Utils;
public class DMCanvas extends JPanel implements Spotlightable, BackgroundSelectorListener
{
private static final long serialVersionUID = 4922036109659818950L;
private Color oldBackgroundColor = Color.white;
private Image backgroundImage = null;
public BackgroundSelector bSelector = null;
private final int backgroundStatus;
public static final int HAS_BACKGROUND_SELECTOR = 1;
public static final int NO_BACKGROUND_SELECTOR = 2;
// Area where objects can be manipulated, analogous to HTML5 Canvas
public DMCanvas(int backgroundSelector) {
backgroundStatus = backgroundSelector;
setLayout(null);
setBorder(null);
setBackground(Color.white);
addMouseListener(canvasMouseAdapter);
if(backgroundSelector == HAS_BACKGROUND_SELECTOR){
bSelector = new BackgroundSelector(this);
bSelector.setVisible(false);
this.add(bSelector);
}
}
MouseAdapter canvasMouseAdapter = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent me)
{
requestFocus();
if(bSelector != null)
bSelector.setVisible(false);
}
};
@Override
public void setSpotlights(HashSet<? extends Spotlight> points)// ANTI
{
// Canvas doesn't allow spotlights, do nothing
}
public void showBackgroundSelector(){
if(bSelector != null){
bSelector.setBackground(Color.white);
bSelector.setSize(new Dimension(162, 216));
Point location = new Point();
location.x = this.getWidth() - bSelector.getWidth() - 2;
location.y = 2;
bSelector.setLocation(location);
bSelector.setVisible(true);
this.setComponentZOrder(bSelector, 0);
}
}
public void hideBackgroundSelector(){
if(bSelector != null)
bSelector.setVisible(false);
}
@Override
public void setBackground(Color c)
{
super.setBackground(c);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if(backgroundStatus == HAS_BACKGROUND_SELECTOR){
Utils.out.println(getClass(), "paintComponent");
if(backgroundImage != null){
g.drawImage(this.backgroundImage, 0, 0, getWidth(), getHeight(), null);
}
}
}
@Override
public void setDimBackground(boolean b)
{
if (!b)
super.setBackground(oldBackgroundColor);
else
{
oldBackgroundColor = super.getBackground();
super.setBackground(oldBackgroundColor.darker());
}
repaint();
}
public void removeAllExceptRequired()
{
for(Component c : this.getComponents()){
if(!(c instanceof BackgroundSelector)){
this.remove(c);
}
}
}
@Override
public void onBackgroundChangeRequest(String relativeLocation)
{
BufferedImage tmp = GraphicUtils.loadImageFromResource(relativeLocation);
Dimension tmpImageSize = new Dimension(tmp.getWidth(), tmp.getHeight());
Dimension bounds = new Dimension(this.getWidth(), this.getHeight());
Dimension scaledSize = GraphicUtils.getScaledDimFill(tmpImageSize, bounds);
Utils.out.println(getClass(), "scaledSize:" + scaledSize + ", bounds:" + bounds);
this.backgroundImage = tmp.getScaledInstance(scaledSize.width, scaledSize.height, Image.SCALE_SMOOTH);
this.repaint();
}
}