/* * Copyright (C) 2011. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 or * version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. */ package uk.me.parabola.imgfmt.app.typ; import java.nio.charset.CharsetEncoder; import java.util.ArrayList; import java.util.List; import uk.me.parabola.imgfmt.app.ImgFileWriter; /** * The new multiple icon format. * There can be several icons at different resolutions. * * @author Steve Ratcliffe */ public class TypIconSet extends TypElement { private final List<Xpm> icons = new ArrayList<Xpm>(); public void write(ImgFileWriter writer, CharsetEncoder encoder) { offset = writer.position(); // Start with the number of icons writer.put((byte) icons.size()); for (Xpm xpm : icons) { ColourInfo colourInfo = xpm.getColourInfo(); int nbits = calcBits(colourInfo); writer.putChar((char) (nbits/2)); writer.put((byte) 1); writer.put((byte) colourInfo.getWidth()); writer.put((byte) colourInfo.getHeight()); writeImage(writer, xpm); } } private int calcBits(ColourInfo colourInfo) { int bits = 0; int bpp = colourInfo.getBitsPerPixel(); bits += colourInfo.getWidth() * colourInfo.getHeight() * bpp; bits += colourInfo.getNumberOfSColoursForCM() * 3 * 8; if (colourInfo.getNumberOfColours() == 0 && colourInfo.getColourMode() == 0x10) bits += 3*8; bits += 0x2c; return bits; } public void addIcon(Xpm xpm) { icons.add(xpm); } public String getLabel() { if (labels.isEmpty()) return null; return labels.get(0).getText(); } /** * Icon sets can have full colour pixmaps. */ public boolean simpleBitmap() { return false; } }