New icons

Also update IMG_xpm.c
This commit is contained in:
Steel Titanium 2019-07-16 19:18:13 -04:00
parent 049789025f
commit 3ffb7b6192
4 changed files with 122 additions and 182 deletions

View file

@ -1,6 +1,6 @@
/*
SDL_image: An example image loading library for use with SDL
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@ -48,7 +48,7 @@
// SDLCALL terms removed from original SDL_image declarations
int IMG_isXPM(SDL_RWops *src);
SDL_Surface *IMG_LoadXPM_RW(SDL_RWops *src);
SDL_Surface *IMG_ReadXPMFromArray(const char **xpm);
SDL_Surface *IMG_ReadXPMFromArray(char **xpm);
#define IMG_SetError SDL_SetError
#define IMG_GetError SDL_GetError
#endif
@ -79,7 +79,7 @@ int IMG_isXPM(SDL_RWops *src)
#define STARTING_HASH_SIZE 256
struct hash_entry {
const char *key;
char *key;
Uint32 color;
struct hash_entry *next;
};
@ -110,7 +110,7 @@ static struct color_hash *create_colorhash(int maxnum)
/* we know how many entries we need, so we can allocate
everything here */
hash = (struct color_hash *)SDL_malloc(sizeof *hash);
hash = (struct color_hash *)SDL_calloc(1, sizeof(*hash));
if (!hash)
return NULL;
@ -119,15 +119,29 @@ static struct color_hash *create_colorhash(int maxnum)
;
hash->size = s;
hash->maxnum = maxnum;
bytes = hash->size * sizeof(struct hash_entry **);
hash->entries = NULL; /* in case malloc fails */
hash->table = (struct hash_entry **)SDL_malloc(bytes);
/* Check for overflow */
if ((bytes / sizeof(struct hash_entry **)) != hash->size) {
IMG_SetError("memory allocation overflow");
SDL_free(hash);
return NULL;
}
hash->table = (struct hash_entry **)SDL_calloc(1, bytes);
if (!hash->table) {
SDL_free(hash);
return NULL;
}
SDL_memset(hash->table, 0, bytes);
hash->entries = (struct hash_entry *)SDL_malloc(maxnum * sizeof(struct hash_entry));
bytes = maxnum * sizeof(struct hash_entry);
/* Check for overflow */
if ((bytes / sizeof(struct hash_entry)) != maxnum) {
IMG_SetError("memory allocation overflow");
SDL_free(hash->table);
SDL_free(hash);
return NULL;
}
hash->entries = (struct hash_entry *)SDL_calloc(1, bytes);
if (!hash->entries) {
SDL_free(hash->table);
SDL_free(hash);
@ -150,7 +164,7 @@ static int add_colorhash(struct color_hash *hash,
}
/* fast lookup that works if cpp == 1 */
#define QUICK_COLORHASH(hash, key) ((hash)->table[*(const Uint8 *)(key)]->color)
#define QUICK_COLORHASH(hash, key) ((hash)->table[*(Uint8 *)(key)]->color)
static Uint32 get_colorhash(struct color_hash *hash, const char *key, int cpp)
{
@ -174,14 +188,16 @@ static void free_colorhash(struct color_hash *hash)
}
}
#define EXTENDED_XPM_COLORS
/*
* convert colour spec to RGB (in 0xrrggbb format).
* return 1 if successful.
*/
static int color_to_rgb(const char *spec, int speclen, Uint32 *rgb)
static int color_to_rgb(char *spec, int speclen, Uint32 *rgb)
{
/* poor man's rgb.txt */
static struct { const char *name; Uint32 rgb; } known[] = {
static struct { char *name; Uint32 rgb; } known[] = {
{ "none", 0xFFFFFFFF },
{ "black", 0x000000 },
{ "white", 0xFFFFFF },
@ -895,7 +911,7 @@ static int color_to_rgb(const char *spec, int speclen, Uint32 *rgb)
*rgb = (Uint32)SDL_strtol(buf, NULL, 16);
return 1;
} else {
size_t i;
int i;
for (i = 0; i < SDL_arraysize(known); i++) {
if (SDL_strncasecmp(known[i].name, spec, speclen) == 0) {
*rgb = known[i].rgb;
@ -912,14 +928,14 @@ static int color_to_rgb(const char *spec, int speclen, Uint32 *rgb)
static char *linebuf;
static int buflen;
static const char *error;
static char *error;
/*
* Read next line from the source.
* If len > 0, it's assumed to be at least len chars (for efficiency).
* Return NULL and set error upon EOF or parse error.
*/
static const char *get_next_line(const char ***lines, SDL_RWops *src, int len)
static char *get_next_line(char ***lines, SDL_RWops *src, int len)
{
char *linebufnew;
@ -991,7 +1007,7 @@ do { \
} while (0)
/* read XPM from either array or RWops */
static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
static SDL_Surface *load_xpm(char **xpm, SDL_RWops *src)
{
Sint64 start = 0;
SDL_Surface *image = NULL;
@ -1003,8 +1019,8 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
struct color_hash *colors = NULL;
SDL_Color *im_colors = NULL;
char *keystrings = NULL, *nextkey;
const char *line;
const char ***xpmlines = NULL;
char *line;
char ***xpmlines = NULL;
int pixels_len;
error = NULL;
@ -1035,6 +1051,11 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
goto done;
}
/* Check for allocation overflow */
if ((size_t)(ncolors * cpp)/cpp != ncolors) {
error = "Invalid color specification";
goto done;
}
keystrings = (char *)SDL_malloc(ncolors * cpp);
if (!keystrings) {
error = "Out of memory";
@ -1066,7 +1087,7 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
goto done;
}
for (index = 0; index < ncolors; ++index ) {
const char *p;
char *p;
line = get_next_line(xpmlines, src, 0);
if (!line)
goto done;
@ -1076,7 +1097,7 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
/* parse a colour definition */
for (;;) {
char nametype;
const char *colname;
char *colname;
Uint32 rgb, pixel;
SKIPSPACE(p);
@ -1102,8 +1123,9 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
c->g = (Uint8)(rgb >> 8);
c->b = (Uint8)(rgb);
pixel = index;
} else
} else {
pixel = rgb;
}
add_colorhash(colors, nextkey, cpp, pixel);
nextkey += cpp;
if (rgb == 0xffffffff)
@ -1168,7 +1190,7 @@ SDL_Surface *IMG_LoadXPM_RW(SDL_RWops *src)
return load_xpm(NULL, src);
}
SDL_Surface *IMG_ReadXPMFromArray(const char **xpm)
SDL_Surface *IMG_ReadXPMFromArray(char **xpm)
{
if (!xpm) {
IMG_SetError("array is NULL");

View file

@ -1,163 +1,81 @@
/* XPM */
const char * SDL_icon_xpm[] = {
"96 96 64 1",
static char * SDL_icon_xpm[] = {
"32 32 46 1",
" c None",
". c #040656",
"+ c #0100B2",
"@ c #04056E",
"# c #0000BD",
"$ c #0B0C09",
"% c #0B0D26",
"& c #090C42",
"* c #060AA7",
"= c #1604DA",
"- c #020CD5",
"; c #100F8D",
"> c #040DE4",
", c #11129B",
"' c #1D1A83",
") c #2A10FD",
"! c #1318FA",
"~ c #25225B",
"{ c #252271",
"] c #312E2B",
"^ c #33334D",
"/ c #363775",
"( c #3D3B69",
"_ c #3A3B8B",
": c #373AFF",
"< c #4142AA",
"[ c #4B4864",
"} c #4D4B4A",
"| c #60492F",
"1 c #4F4C57",
"2 c #4A4A9E",
"3 c #4F4E85",
"4 c #474ADE",
"5 c #4E4FFE",
"6 c #5D5CB3",
"7 c #686663",
"8 c #666682",
"9 c #676875",
"0 c #66659E",
"a c #8B6538",
"b c #6465D5",
"c c #7F694F",
"d c #6767FF",
"e c #7272FF",
"f c #91795C",
"g c #7677FD",
"h c #828396",
"i c #A78153",
"j c #888989",
"k c #8D897E",
"l c #9190FD",
"m c #CA9048",
"n c #C09968",
"o c #A9A8A1",
"p c #A6A8B0",
"q c #B0B1FB",
"r c #EEAC61",
"s c #E3B478",
"t c #C3C4BE",
"u c #FFC68C",
"v c #FCCD90",
"w c #D4D7D3",
"x c #E3E5E0",
"y c #FCFFFB",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ttj7777777joot ",
" 9hh8830000088hh9 ",
" 9888(//__<bbbb2////3[888hpp ",
" oj}^/_6bbbbgggggggb2///_bgbbbbb631kt ",
" (80066bgeeegggggggb22262/bbggeggb66081 ",
" p9^jj pp8(_2bgggggeeeeeeeegb2~_bgb//6geegged5*'(hp ",
" ^2<3[7 j^/2bbggggeeeeeeeeeeggb2_({'4eb/2ggge5:!!!>-*{^kt ",
" &,5b60^ (02<beggggeeeeeeeeeegb62__7}~:5g/_bgd5!))))))=+;20k ",
" @#:egb3^ pp({4dgggeeeeeeeeeeeeegg6/__3im}+:e//bd:!)))))))))!#;87 ",
" p'-!:dgb3] 7['4egeeeeeeeeeeeeeeeegg2/__[armc,-523<:!)))))))))))!>*{} ",
" tp,-)!5egb3} ~_<4dgggeeeeeeeeeeeeeegb6/_2[amusf'#!<_'>))))))))))))!)>+{~ ",
" p;-))!5gb2^^'#5eggeeeeeeeeeeeeeeegg6/_23amrusi{#!+;;>))))))))))))))!!-'8p ",
" tp'#!)):d6(@*>5egeeeeeeeeeeeeeeeegg6_/<(amrrvvn{+)-,;>))))))!!!!!!)))!!>,~j ",
" p;#!))-'{'+-5eggeeeeeeeeeeeeeeeegb222(cmrruvvn{+)>,@>!)!!)!!>>>>======>-,/8 ",
" ;#)!-*.;-!5eggeeeeeeeeeeeeeeeegb2_<6|mrrsvvvn{+)!,.-!!!!>>=--######+++-#@(k ",
" h@-)+@.*>!5egeeeeeeeeeeeeeeeeeegb_</]mrrruvvvn{+))*@->>--###++++++###+;@{(9j ",
" kh,#+@@,>!:dggeeeeeeeeeeeeeeeeeeebbb_]mrruuvvsf'#)!*.+-###+++++++##+*;'3(&^9 ",
" 8*,@@*)):dggeeeeeeeeeeeeeeeeeeeeggg<(|iruvvvsc,=!!*.;*++++++++###+,@&1o ",
" 8@@@-!)!5eeeeeeeeeeeeeeeeeeeeeeeeeggb2[csvvvn^#)!!+@;*#+++++###*@~[ ",
" 9&@*!)):5geeeeeeeeeeeeeeeeeeeeeeeeegge637nsvf{>))!+;;*-######*;{.^ ",
" 9%;!!)):dgeeeeeeeeeeeeeeeeeeeeeeeeeeeggb_1ir7;>))!+;;,++++++*'(} ",
" 9{+!))!5egeeeeeeeeeeeeeeeeeddddeeeeeeeege2}|~#!))!#;@...@@@.^hp ",
" 8,=!))):dggeeeeeeeeeeeeeeeeggggeeeeeeeeggb_~,>!))!+@@@;;;;@&^o ",
" }(-)))))!:eegeeeeeeeeeeeeeegllllgeeeeeeeegd5+=))))!+;,#>--#,'/hj ",
" o8.>))))))!:dgggeeeeeeeeeeellqqqqlgeeeeggg5:!!!)))))-*+>)!:55db631 ",
" p8<*!)))))))!:5deggggggeeeegqqqqqqqqlggged5:!))))))))>->!!:5ddeegb3/ ",
" oh'#!))))))))))!:ddeeeeeeeeglqqqqqqqqlgedd:!)))))))))))))!:dggggeggg239 ",
" ^*>!))!)))))))))!::55dddeegglll600333_4:!!)))))))))))))):dggeeeeeeggb6(9o ",
" ~+=-+#>))))))))))!!!:::::5554<3889988[/,=)))))))))))))):5gggeeeeeeeggb6087 ",
" ~**@~'+>!))))))))))))))))!!>*{1kkooook7(,-!)))))))))))!:5deeeeeeeeeeeggb289 ",
" ~,'1o7(*>!))))))))))))))))=,[jtttwxxxwto^;>!))))))))))!!!::5deggeeeeeeegbb3] ",
" ~@/oxt7'#))))))))))))))))=,3ktwxxyyyyyyxk/+!))))))))))))))!:::5degggeeegggb3^ ",
" ^&8xyyt^,)))))))))))))))>,3otwxyyyyyyyyyxh'>)))))))))))))))))):5ddeeeeeeeggb3^ ",
" 771pyyyx7'=!)))))))))))!!#(jtxxyyyyyyyyyyyt3-)))))))))))))))))))!!::degggeeegb2[o ",
" 77tyyyxk/+!!)))))))))))-;9owxyyyyyyyyyyyywh*>)))))))))))))))))))))!::5ddgggggb68j ",
" owyyyyt8;>))))))))))))*(otwyyyyyyyyyyyyyxp'-)))))))))))))))))))))))!!:5deeeggg_8j ",
" jtxyyyyxh'>)))))))))!!#_ktxyyyyyyyyyyyyyyyt_+))))))))))))))))))))))))))!!:5deggg63j ",
" 7jwyyyyyyp/=))))))))))>,3owxyyyyyyyyyyyyyyyw/+))))))))))))))))))))))))))))!::5degb689 ",
" 7xyyyyyyo[#))))))))))-/jtwyyyyyyyyyyyyyyyyw/*)))))))))))))))))))))))))))))))!:5dgg_/ ",
" }xyyyyyyt9*=))))))))=*9owyyyyyyyyyyyyyyyyyw/*)))))))))))))))))))))))))))))))))!!:5d3} ",
" }xyyyyyywj'#!))))))!#@7oxyyyyyyyyyyyyyyyyyw/*)))))))))))))))))))))))))))))))))))!!:4/7 ",
" 7xyyyyyyxj&,!!))))!!,%}oyyyyyyyyyyyyyyyyyyw/*))))))))))))))))))))))))))))))))))))))>487 ",
" 7xyyyyyywk$@!!)))!!-.$]oyyyyyyyyyyyyyyyyyyw/+))))))))))))))))))))))))))))))!!!!))))!>' ",
" }xyyyyyywj$&+!!)!)>;%$]jyyyyyyyyyyyyyyyyyyt{#)))))))))))))))))))))!!!!!!))!)!!!!!!))!#' ",
" 7xyyyyyyt7$%@-!)!>*[]$$jyyyyyyyyyyyyyyyyyxp;-))))))))))))))))))!!!!!!!!!!!!>>>>>>>>>>!,^ ",
" 7xyyyyyyt}$][;-)=,(o7$$7yyyyyyyyyyyyyyyyyxp,-)))))))))))!!!!)!!!!>>>>=-----########--=+'9 ",
" jwyyyyyyo}$}o(';@~7wj$$7yyyyyyyyyyyyyyyyywh*>)))))))))))!>>>=>=---#####+########+++***;@17 ",
" otxyyyyyt}$7t7}1}7kw7$$7yyyyyyyyyyyyyyyyyt0-)))))))))!!!>--####+++++++++++++##+***,;''.&] ",
" ooowyyyyyt}$}j7owwojo}$$jyyyyyyyyyyyyyyyyyp2>)))))))!!!=##++++++++++++++###+*;@.~[8[9hph ",
" ojtyyyyywj$$}jwyyxo}$$]jyyyyyyyyyyyyyyyyyp'>))))))!>>-#++++++++++++####+,;'_3/&^}77kot ",
" 7tyyyyyxo]$$oxyyyt]$$}tyyyyyyyyyyyyyyyyx0*!)))!!!>-#++++++++++++#+##+*;.&1ko ",
" 7tyyyyyyx7]}xyyyyxj}]oxyyyyyyyyyyyyyyyyp<=)!!!!>-#++++++++++++####*;.(8h ",
" owxyxxyytooywptwwtppxyyyyyyyyyyyyyyyxp3,-=!)!>-#++++++++++###+*,'_{&1k ",
" jtwwttwtwwtj7kjowxyyyyyyyyyyyyyyyyxt7~'',+>=#+++++++++++###*;@&^j ",
" ]joojj7}]}]|innfc7jtwyyyyyyyyyyyxtjcfnnnf[@*#+++++++++###+@.&%% ",
" ]$}77}}$$$$]fsssnnifkkotwwwwwwwtpjkfinvvvsi}@*#++++++###*;@.@@&[ ",
" o7$]]]]]$$]|isvvvvvusifckopppopok7cisvvvvvvvn(,#++++++#+*@.&@*#;3o ",
" }}$]|||fnnsvvvuvvvuuvvsniffffffnnsvvvvuuuvvvc{*+#++##*@&.@*+#--<7 ",
" }]cninsuvvvvuuuuuuvvvvusnnnnnssuvvvvvuuuuvvc~*+#+++*@.@;*##=>>,^ ",
" 7fvvvvvvuuuuuuuuuuuuvvvvvvvvvvvuuuuuuuuuvvc~*+#+#+,.@*###->!!*~ ",
" pkivvvvuuuuuuuuuuuuuuuvvvvvvvvuuuvsnsuuuvvf~*+#++++*+++->!!)!#. ",
" kfsuvvuuuuuuuuuuuuuuuuuuuuuuuuuvvnfsuvuvvc{++#++++###->!!))!-;h ",
" kisvvvuuuuuuuuuuuuuuuuuuuuuuuvvvicsvvvvs1@##+++++++#>!!))))=,ho ",
" 7imuvvvuuuuuuuuuuuuuuuuuuuuvusfcivvuvvn~;##+++++++#>!!))))!#8k ",
" cimruuuuuvuuuuuuuuuuuuuuuuvsnfisuvvvsc@*#+++++++++#>!!))))-3} ",
" 7amrruuuuuuuuuuuuuuuuuuuuvsnnsvvuvvi^,##++++++++++#>!!)))>/^ ",
" kfamrruuuuvvvuuuuuuuuuuuuuvvvvvvvn1@+#++++++++++++#>!)))>{~ ",
" 7|iimrrruuuuuuuuuuuuuuuuvvvvuusn1'+#########++++++->!))>; ",
" 7cammrrrrruuuuuuvvvvvuuuuurrm|.*-#+#######+###+++->!!!*' ",
" ookcaimmrrrrrruuuuurrrrrmi|]%.@@@@@;,*,*+########->!!*6o ",
" p7}|ainiimmmmmmmmmmminnia|$%.....{3322_{''',,**+#=!!#6k ",
" j7||aaiiiiiaa||7j ookok711^&.';,*+=!><k ",
" koooook hph[~@+>><k ",
" ppppp tk7^3_,+<j ",
" o7^@3j ",
" 9jj ",
" o ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
". c #000033",
"+ c #000045",
"@ c #00006C",
"# c #01007E",
"$ c #000193",
"% c #00009F",
"& c #060766",
"* c #0F0F10",
"= c #0C11CC",
"- c #0D13B8",
"; c #1415E0",
"> c #1E1AED",
", c #1B1CFE",
"' c #272576",
") c #313179",
"! c #3A3AB1",
"~ c #3A3AFF",
"{ c #434497",
"] c #4F4AAE",
"^ c #4748FE",
"/ c #494DE8",
"( c #7A5137",
"_ c #5E57A7",
": c #5957C4",
"< c #616360",
"[ c #855E93",
"} c #796979",
"| c #9C6473",
"1 c #6D6EF4",
"2 c #7171FF",
"3 c #817F9D",
"4 c #B37C5A",
"5 c #898A8D",
"6 c #A28572",
"7 c #A3829B",
"8 c #8988FF",
"9 c #C39D82",
"0 c #ABADAB",
"a c #DCA57C",
"b c #ABAAFE",
"c c #C1C3C0",
"d c #F7C095",
"e c #CFD1CE",
"f c #DDE0DD",
"g c #FAFCF9",
" ",
" {]]]]]]) ",
" {:1222222221::) ",
" :1222222222^^>,,>% ",
" ' ]122222222:]>,,;=%$& ",
" @~] :222222221://-=%%%#. ",
" #>^{122222222:1][~&%%%@ ",
" #>=122221221:/|a4,&%$& ",
" #-!22228bb12/4ad9,&$+ ",
" ##^2221bbb2~,!ad7,@'{ ",
" )!,/22281^,,,,:d_,-221:) ",
" /,;,,>,,-_!;,,,[=>=~2222: ",
" {=,,,,;3fgg0;,,,,;,,,~^221{ ",
" 3_,,,>5ggggg3,,,,,,,,,,,>^2] ",
" 05,,,_fgg0egc>,,,,,,,,,,,,,~! ",
" 00>,>0ggf00gf;,,,,,,,,,,,,,,,- ",
" 5e%,!fggf55gf=,,,,,,,,,,>>>>,, ",
" <f+%5gggf*<ge;,,,,>==-%%%%%%$$#",
" f*@cgggg*5g0>,>-%%%%%%$@@+ ",
"5e<<cggggg5cg)%%%%%%%$@+ ",
" ***99fggggg3%%%%%%#@@ ",
" (4dd9fggf6}$%%%%$$=,% ",
" 4dddd99dda6%$$%%%;,> ",
" 4ddddda9a6$#%%%%=,,- ",
" 4addddda*#%%%%%%>,; ",
" (444 +@$%%%-,, ",
" &$%%=,$ ",
" &$%>- ",
" +#-= ",
" @- ",
" & ",
" "};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 KiB

After

Width:  |  Height:  |  Size: 62 KiB