Rev 3408 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* 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;
}
}