summaryrefslogtreecommitdiff
path: root/FL/Fl_ICO_Image.H
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-11-28 17:26:37 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-12-09 10:43:20 +0100
commit36cd0a397c6d8fee7ffc5b59d607ead523226e53 (patch)
tree91f0bd3628ae3d7b7553706b24b66b1bb4620c6b /FL/Fl_ICO_Image.H
parent0bb30d8f92839af826fb389fccd625c74e981a13 (diff)
New Fl_ICO_Image class to read Windows .ico icon files
Many thanks to @darealshinji for contributing all the code for this new FLTK image class (see branch Fl_ICO_Image of https://github.com/darealshinji/fltk).
Diffstat (limited to 'FL/Fl_ICO_Image.H')
-rw-r--r--FL/Fl_ICO_Image.H55
1 files changed, 55 insertions, 0 deletions
diff --git a/FL/Fl_ICO_Image.H b/FL/Fl_ICO_Image.H
new file mode 100644
index 000000000..9693cc545
--- /dev/null
+++ b/FL/Fl_ICO_Image.H
@@ -0,0 +1,55 @@
+//
+// ICO image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2022 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+// https://en.wikipedia.org/wiki/ICO_(file_format)
+// http://www.daubnet.com/en/file-format-ico
+
+#ifndef Fl_ICO_Image_H
+# define Fl_ICO_Image_H
+# include "Fl_BMP_Image.H"
+
+/**
+ The Fl_ICO_Image class supports loading, caching, and drawing of Windows icon (.ico) files.
+ */
+class FL_EXPORT Fl_ICO_Image : public Fl_BMP_Image {
+
+public:
+ /** Windows ICONDIRENTRY structure */
+ struct IconDirEntry {
+ int bWidth; ///< Image width
+ int bHeight; ///< Image height
+ int bColorCount; ///< Number of colors (0 if ≥ 8bpp)
+ int bReserved; ///< Reserved
+ int wPlanes; ///< Color Planes
+ int wBitCount; ///< Bits per pixel
+ int dwBytesInRes; ///< Resource size in bytes
+ int dwImageOffset; ///< Offset to the image
+ };
+
+ Fl_ICO_Image(const char *filename, int id = -1, const unsigned char *data = NULL, const size_t datasize = 0);
+ ~Fl_ICO_Image();
+/** Gives the number of icons of various resolutions present in the ICO object */
+ int idcount() { return idcount_; }
+ /** Returns the array of idcount() loaded IconDirEntry structures */
+ IconDirEntry * const icondirentry() const { return icondirentry_; }
+
+private:
+ int idcount_;
+ struct IconDirEntry *icondirentry_;
+ void load_ico_(class Fl_Image_Reader &rdr, int id);
+};
+
+#endif // Fl_ICO_Image_H