xref: /vim-8.2.3635/src/xpm_w32.c (revision 2bf24176)
1 /* vi:set ts=8 sts=4 sw=4:
2  *
3  * Load XPM image.
4  *
5  * This function is placed in separate file because Xpm headers conflict with
6  * Vim ones :(
7  *
8  * Written by Sergey Khorev.
9  * http://iamphet.nm.ru/vim/index.html
10  */
11 
12 #ifndef WIN32_LEAN_AND_MEAN
13 # define WIN32_LEAN_AND_MEAN
14 #endif
15 #include <windows.h>
16 
17 /* reduced def from Vim.h */
18 #ifndef __ARGS
19 # if defined(__STDC__) || defined(__GNUC__) || defined(WIN3264)
20 #  define __ARGS(x) x
21 # else
22 #  define __ARGS(x) ()
23 # endif
24 #endif
25 
26 #include "xpm_w32.h"
27 
28 /* Engage Windows support in libXpm */
29 #define FOR_MSW
30 
31 #include "xpm.h"
32 
33 /*
34  * Tries to load an Xpm image from the file "filename".
35  * Returns -1 on failure.
36  * Returns 0 on success and stores image and mask BITMAPS in "hImage" and
37  * "hShape".
38  */
39     int
40 LoadXpmImage(filename, hImage, hShape)
41     char    *filename;
42     HBITMAP *hImage;
43     HBITMAP *hShape;
44 {
45     XImage	    *img;  /* loaded image */
46     XImage	    *shp;  /* shapeimage */
47     XpmAttributes   attr;
48     int		    res;
49     HDC		    hdc = CreateCompatibleDC(NULL);
50 
51     attr.valuemask = 0;
52     res = XpmReadFileToImage(&hdc, filename, &img, &shp, &attr);
53     DeleteDC(hdc);
54     if (res < 0)
55 	return -1;
56     if (shp == NULL)
57     {
58 	if (img)
59 	    XDestroyImage(img);
60 	return -1;
61     }
62     *hImage = img->bitmap;
63     *hShape = shp->bitmap;
64     return 0;
65 }
66