package com.kartoflane.superluminal2.mvc.views;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import com.kartoflane.superluminal2.core.Cache;
import com.kartoflane.superluminal2.mvc.controllers.SystemController;
import com.kartoflane.superluminal2.utils.Utils;
public class SystemView extends BaseView {
protected Image interiorImage = null;
protected Rectangle cachedInteriorBounds = null;
protected String interiorPath = null;
public SystemView() {
setAlpha(255);
}
private SystemController getController() {
return (SystemController) controller;
}
@Override
public void paintControl(PaintEvent e) {
if (alpha > 0) {
// Image is icon
// InteriorImage is the interior image (duh)
paintBackgroundSquare(e, backgroundColor, alpha / 2);
paintImageCorner(e, interiorImage, cachedInteriorBounds,
controller.getX() - controller.getW() / 2,
controller.getY() - controller.getH() / 2, alpha);
paintImage(e, image, cachedImageBounds, alpha);
}
}
private void setInteriorImage(String path) {
if (interiorPath != null && path != null && interiorPath.equals(path))
return; // Don't do anything if it's the same thing
if (interiorImage != null) {
Cache.checkInImage(this, interiorPath);
}
interiorPath = null;
interiorImage = null;
if (path != null) {
interiorImage = Cache.checkOutImage(this, path);
if (interiorImage != null)
cachedInteriorBounds = interiorImage.getBounds();
interiorPath = path;
}
}
public Rectangle getInteriorBounds() {
return interiorImage == null ? new Rectangle(0, 0, 0, 0) : Utils.copy(cachedInteriorBounds);
}
@Override
public void updateView() {
setInteriorImage(getController().getInteriorPath());
setBackgroundColor(getController().isAvailableAtStart() ? defaultBackground : DENY_RGB);
setVisible(getController().isAssigned());
}
@Override
public void dispose() {
super.dispose();
if (interiorImage != null)
Cache.checkInImage(this, interiorPath);
interiorImage = null;
}
}