/* * <copyright> * Copyright 2010 BBN Technologies * </copyright> */ package com.bbn.openmap.dataAccess.cgm; import java.awt.Color; import java.io.DataInputStream; import java.io.IOException; import java.util.logging.Level; /** * A color table for indexed colors. * * @author dietrick */ public class ColorTable extends Command { protected Color[] colors; protected boolean drawColorTable = false; int startingIndex = 0; public ColorTable(int ec, int eid, int l, DataInputStream in) throws IOException { super(ec, eid, l, in); if (args != null) { startingIndex = args[0]; logger.fine("starting table index: " + startingIndex); // Assuming RGB! // Subtracting one because the first argument is starting index. colors = new Color[args.length - 1 / 3]; for (int i = 1; i < args.length - 3; i += 3) { int index = i / 3; int r = args[i]; int g = args[i + 1]; int b = args[i + 2]; logger.fine("Color[" + index + "] r: " + r + ", g: " + g + ", b: " + b); colors[index] = new Color(r, g, b); } } } public String toString() { return "ColorTable has " + args.length + " colors"; } public Color get(int index) { index -= startingIndex; // Not sure what starting index means - the // number // of colors to get to 0th color or something to // subtract from provided index to get to front // of // actual array. I think second. if (colors != null && index < colors.length) { return colors[index]; } else { return Color.GRAY; } } public void paint(CGMDisplay d) { if (logger.isLoggable(Level.FINE)) { int dim = 30; int x = 0; int y = 0; int width = dim; int height = dim; int count = 0; for (Color c : colors) { if (count > 4) { count = 0; y += height; x = 0; } d.graphics().setColor(c); d.graphics().fillRect(x, y, width, height); x += width; count++; } } } }