summaryrefslogtreecommitdiffstats
path: root/image/ICOFileHeaders.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /image/ICOFileHeaders.h
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'image/ICOFileHeaders.h')
-rw-r--r--image/ICOFileHeaders.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/image/ICOFileHeaders.h b/image/ICOFileHeaders.h
new file mode 100644
index 0000000000..a47919b91a
--- /dev/null
+++ b/image/ICOFileHeaders.h
@@ -0,0 +1,77 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_image_ICOFileHeaders_h
+#define mozilla_image_ICOFileHeaders_h
+
+namespace mozilla {
+namespace image {
+
+#define ICONFILEHEADERSIZE 6
+#define ICODIRENTRYSIZE 16
+#define PNGSIGNATURESIZE 8
+#define BMPFILEHEADERSIZE 14
+
+/**
+ * The header that comes right at the start of an icon file. (This
+ * corresponds to the Windows ICONDIR structure.)
+ */
+struct IconFileHeader {
+ /**
+ * Must be set to 0;
+ */
+ uint16_t mReserved;
+ /**
+ * 1 for icon (.ICO) image (or 2 for cursor (.CUR) image (icon with the
+ * addition of a hotspot), but we don't support cursor).
+ */
+ uint16_t mType;
+ /**
+ * The number of BMP/PNG images contained in the icon file.
+ */
+ uint16_t mCount;
+};
+
+/**
+ * For each BMP/PNG image that the icon file contains there must be a
+ * corresponding icon dir entry. (This corresponds to the Windows
+ * ICONDIRENTRY structure.) These entries are encoded directly after the
+ * IconFileHeader.
+ */
+struct IconDirEntry {
+ uint8_t mWidth;
+ uint8_t mHeight;
+ /**
+ * The number of colors in the color palette of the BMP/PNG that this dir
+ * entry corresponds to, or 0 if the image does not use a color palette.
+ */
+ uint8_t mColorCount;
+ /**
+ * Should be set to 0.
+ */
+ uint8_t mReserved;
+ union {
+ uint16_t mPlanes; // ICO
+ uint16_t mXHotspot; // CUR
+ };
+ union {
+ uint16_t mBitCount; // ICO (bits per pixel)
+ uint16_t mYHotspot; // CUR
+ };
+ /**
+ * "bytes in resource" is the length of the encoded BMP/PNG that this dir
+ * entry corresponds to.
+ */
+ uint32_t mBytesInRes;
+ /**
+ * The offset of the start of the encoded BMP/PNG that this dir entry
+ * corresponds to (from the start of the icon file).
+ */
+ uint32_t mImageOffset;
+};
+
+} // namespace image
+} // namespace mozilla
+
+#endif // mozilla_image_ICOFileHeaders_h