xref: /vim-8.2.3635/src/xpm_w32.c (revision e38eab22)
1 /* vi:set ts=8 sts=4 sw=4 noet:
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 #include "xpm_w32.h"
18 
19 // Engage Windows support in libXpm
20 #define FOR_MSW
21 
22 #include "xpm.h"
23 
24 /*
25  * Tries to load an Xpm image from the file "filename".
26  * Returns -1 on failure.
27  * Returns 0 on success and stores image and mask BITMAPS in "hImage" and
28  * "hShape".
29  */
30     int
LoadXpmImage(char * filename,HBITMAP * hImage,HBITMAP * hShape)31 LoadXpmImage(
32     char    *filename,
33     HBITMAP *hImage,
34     HBITMAP *hShape)
35 {
36     XImage	    *img;  // loaded image
37     XImage	    *shp;  // shapeimage
38     XpmAttributes   attr;
39     int		    res;
40     HDC		    hdc = CreateCompatibleDC(NULL);
41 
42     attr.valuemask = 0;
43     res = XpmReadFileToImage(&hdc, filename, &img, &shp, &attr);
44     DeleteDC(hdc);
45     if (res < 0)
46 	return -1;
47     if (shp == NULL)
48     {
49 	if (img)
50 	    XDestroyImage(img);
51 	return -1;
52     }
53     *hImage = img->bitmap;
54     *hShape = shp->bitmap;
55     return 0;
56 }
57