1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
/********************************************************************************
* *
* I c o n S o u r c e *
* *
*********************************************************************************
* Copyright (C) 2005,2022 by Jeroen van der Zijp. All Rights Reserved. *
*********************************************************************************
* This library is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or *
* (at your option) any later version. *
* *
* This library 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 Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/> *
********************************************************************************/
#ifndef FXICONSOURCE_H
#define FXICONSOURCE_H
#ifndef FXOBJECT_H
#include "FXObject.h"
#endif
namespace FX {
class FXApp;
class FXIcon;
class FXImage;
/**
* An icon source is a class that loads an icon of any type.
* It exists purely for convenience, to make loading icons simpler by concentrating the
* knowledge of the supported icon formats into a single place.
* Needless to say, this class is subclassable, allowing users to add additional icon
* types and make them available to all widgets which deal with icons.
* When icons are loaded, they are NOT created (realized) yet; this allows users to
* manipulate the pixel data prior to realizing the icons.
* Image/icon formats can be determined by file extension type, or by their contents.
* The latter method may be less reliable for some types of file formats which don't
* have well-defined file-header signatures. File signature recognition is always
* attempted when file extension method fails, as a fallback method.
*/
class FXAPI FXIconSource : public FXObject {
FXDECLARE(FXIconSource)
private:
FXImage *scaleToSize(FXImage *image,FXint size,FXint qual) const;
public:
/**
* Default icon source provides icons and images for all types built into
* the FOX library at compile time.
*/
static FXIconSource defaultIconSource;
/**
* Determine icon type from extension string, return icon of that type.
* Return NULL if no match.
*/
virtual FXIcon *iconFromType(FXApp* app,const FXString& type) const;
/**
* Determine icon type from header bytes in stream, return icon of that type.
* Rewind the stream to the start. Return NULL if no match.
*/
virtual FXIcon *iconFromStream(FXApp* app,FXStream& store) const;
/**
* Load an icon from the file filename. By default, the file extension is
* stripped and used as the icon type; if an explicit icon type is forced,
* then that type is used and the extension is ignored.
* For example, loadIcon("icon","gif") will try to load a CompuServe GIF
* file, since the filename does not give any clue as to the type of the
* icon.
*/
virtual FXIcon *loadIconFile(FXApp* app,const FXString& filename,const FXString& type=FXString::null) const;
/**
* Load an icon of a given type (e.g. "gif") from reswrapped data.
* Returns NULL if there's some error loading the icon. [The optional
* parameter is actually mandatory at the time of this writing; future
* versions will attempt to inspect the first few bytes of the stream
* to divine the icon format if the parameter is omitted].
*/
virtual FXIcon *loadIconData(FXApp* app,const FXuchar *pixels,const FXString& type=FXString::null) const;
/**
* Load an icon of a given type (e.g. "gif") from an already open stream.
* Returns NULL if there's some error loading the icon. [The optional
* parameter is actually mandatory at the time of this writing; future
* versions will attempt to inspect the first few bytes of the stream
* to divine the icon format if the parameter is omitted].
*/
virtual FXIcon *loadIconStream(FXApp* app,FXStream& store,const FXString& type=FXString::null) const;
/**
* Determine image type from extension string, return image of that type.
* Return NULL if no match.
*/
virtual FXImage *imageFromType(FXApp* app,const FXString& type) const;
/**
* Determine image type from header bytes in stream, return image of that type.
* Rewind the stream to the start. Return NULL if no match.
*/
virtual FXImage *imageFromStream(FXApp* app,FXStream& store) const;
/**
* Load an image from the file filename. By default, the file extension is
* stripped and used as the image type; if an explicit image type is forced,
* then that type is used and the extension is ignored.
* For example, loadImage("image","gif") will try to load a CompuServe GIF
* file, since the filename does not give any clue as to the type of the
* image.
*/
virtual FXImage *loadImageFile(FXApp* app,const FXString& filename,const FXString& type=FXString::null) const;
/**
* Load an image of a given type (e.g. "gif") from reswrapped data.
* Returns NULL if there's some error loading the icon. [The optional
* parameter is actually mandatory at the time of this writing; future
* versions will attempt to inspect the first few bytes of the stream
* to divine the icon format if the parameter is omitted].
*/
virtual FXImage *loadImageData(FXApp* app,const FXuchar *pixels,const FXString& type=FXString::null) const;
/**
* Load an image of a given type (e.g. "gif") from an already open stream.
* Returns NULL if there's some error loading the image. [The optional
* parameter is actually mandatory at the time of this writing; future
* versions will attempt to inspect the first few bytes of the stream
* to divine the image format if the parameter is omitted].
*/
virtual FXImage *loadImageStream(FXApp* app,FXStream& store,const FXString& type=FXString::null) const;
/**
* Load an icon from filename and scale it such that its dimensions does not exceed given size.
* The icon type is determined from the filename extension unless explicitly forced.
*/
virtual FXIcon *loadScaledIconFile(FXApp* app,const FXString& filename,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const;
/**
* Load an icon from pixels and scale it such that its dimensions does not exceed given size.
*/
virtual FXIcon *loadScaledIconData(FXApp* app,const FXuchar *pixels,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const;
/**
* Load icon from stream and scale it such that its dimensions does not exceed given size.
*/
virtual FXIcon *loadScaledIconStream(FXApp* app,FXStream& store,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const;
/**
* Load image from filename and scale it such that its dimensions does not exceed given size.
* The image type is determined from the filename extension unless explicitly forced.
*/
virtual FXImage *loadScaledImageFile(FXApp* app,const FXString& filename,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const;
/**
* Load image and scale it such that its dimensions does not exceed given size.
*/
virtual FXImage *loadScaledImageData(FXApp* app,const FXuchar *pixels,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const;
/**
* Load image and scale it such that its dimensions does not exceed given size.
*/
virtual FXImage *loadScaledImageStream(FXApp* app,FXStream& store,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const;
};
}
#endif
|