1 /********************************************************************************
2 *                                                                               *
3 *                        I C O   I c o n   O b j e c t                          *
4 *                                                                               *
5 *********************************************************************************
6 * Copyright (C) 2001,2020 by Janusz Ganczarski.   All Rights Reserved.          *
7 *********************************************************************************
8 * This library is free software; you can redistribute it and/or modify          *
9 * it under the terms of the GNU Lesser General Public License as published by   *
10 * the Free Software Foundation; either version 3 of the License, or             *
11 * (at your option) any later version.                                           *
12 *                                                                               *
13 * This library is distributed in the hope that it will be useful,               *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                 *
16 * GNU Lesser General Public License for more details.                           *
17 *                                                                               *
18 * You should have received a copy of the GNU Lesser General Public License      *
19 * along with this program.  If not, see <http://www.gnu.org/licenses/>          *
20 ********************************************************************************/
21 #ifndef FXICOICON_H
22 #define FXICOICON_H
23 
24 #ifndef FXICON_H
25 #include "FXIcon.h"
26 #endif
27 
28 namespace FX {
29 
30 
31 /// ICO (Microsoft icon format) icon
32 class FXAPI FXICOIcon : public FXIcon {
FXDECLARE(FXICOIcon)33   FXDECLARE(FXICOIcon)
34 protected:
35   FXICOIcon(){}
36 private:
37   FXICOIcon(const FXICOIcon&);
38   FXICOIcon &operator=(const FXICOIcon&);
39 public:
40   static const FXchar fileExt[];
41   static const FXchar mimeType[];
42 public:
43 
44   /// Construct icon from memory stream formatted in Microsoft icon format
45   FXICOIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1);
46 
47   /// Save pixels into stream in Microsoft icon format format
48   virtual FXbool savePixels(FXStream& store) const;
49 
50   /// Load pixels from stream in Microsoft icon format format
51   virtual FXbool loadPixels(FXStream& store);
52 
53   /// Destroy icon
54   virtual ~FXICOIcon();
55   };
56 
57 
58 #ifndef FXLOADICO
59 #define FXLOADICO
60 
61 /**
62 * Check if stream contains a ICO, return true if so.
63 */
64 extern FXAPI FXbool fxcheckICO(FXStream& store);
65 
66 /**
67 * Load an ICO (Microsoft icon format) file from a stream.
68 * Upon successful return, the pixel array and size are returned.
69 * If an error occurred, the pixel array is set to NULL.
70 */
71 extern FXAPI FXbool fxloadICO(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXint& xspot,FXint& yspot);
72 
73 /**
74 * Save an ICO (Microsoft icon format) file to a stream.
75 * If no hot-spot given, save as an ICO instead of a CUR resource.
76 */
77 extern FXAPI FXbool fxsaveICO(FXStream& store,const FXColor *data,FXint width,FXint height,FXint xspot=-1,FXint yspot=-1);
78 
79 #endif
80 
81 }
82 
83 #endif
84