ReactOS 0.4.16-dev-1946-g52006dd
imagelist.c File Reference
#include "wine/test.h"
#include <stdio.h>
#include <windows.h>
#include <commctrl.h>
#include <comctl32_undoc.h>
Include dependency graph for imagelist.c:

Go to the source code of this file.

Macros

#define WinVerMajor()   LOBYTE(GetVersion())
 
#define ILC_COLORMASK   0xfe
 
#define IL_IMGSIZE   16
 

Functions

static BOOL IL_IsValid (HIMAGELIST himl)
 
static HRESULT IL_Destroy (HIMAGELIST himl)
 
static HIMAGELIST IL_Create (UINT flags)
 
static UINT IL_CalculateOtherBpp (UINT ilc)
 
static BOOL IL_AddImagesForTest (HIMAGELIST himl)
 
static void Test_SystemIL (void)
 
static void Test_Flags (void)
 
 START_TEST (ImageListApi)
 

Macro Definition Documentation

◆ IL_IMGSIZE

#define IL_IMGSIZE   16

Definition at line 17 of file imagelist.c.

◆ ILC_COLORMASK

#define ILC_COLORMASK   0xfe

Definition at line 16 of file imagelist.c.

◆ WinVerMajor

#define WinVerMajor ( )    LOBYTE(GetVersion())

Definition at line 14 of file imagelist.c.

Function Documentation

◆ IL_AddImagesForTest()

static BOOL IL_AddImagesForTest ( HIMAGELIST  himl)
static

Definition at line 45 of file imagelist.c.

46{
47 int idx = -1;
48 HINSTANCE hInst = LoadLibraryW(L"USER32");
49 if (!hInst)
50 return FALSE;
53 if (hIco)
54 {
55 idx = ImageList_AddIcon(himl, hIco);
56 DestroyIcon(hIco);
57 }
59 return idx != -1;
60}
HIMAGELIST himl
#define FALSE
Definition: types.h:117
unsigned int idx
Definition: utils.c:41
#define FreeLibrary(x)
Definition: compat.h:748
#define LoadLibraryW(x)
Definition: compat.h:747
#define L(x)
Definition: resources.c:13
HINSTANCE hInst
Definition: dxdiag.c:13
#define IL_IMGSIZE
Definition: imagelist.c:17
static HICON
Definition: imagelist.c:80
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
#define ImageList_AddIcon(himl, hicon)
Definition: commctrl.h:415
#define IMAGE_ICON
Definition: winuser.h:212
#define LoadImage
Definition: winuser.h:5926
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2405

Referenced by Test_Flags().

◆ IL_CalculateOtherBpp()

static UINT IL_CalculateOtherBpp ( UINT  ilc)
static

Definition at line 39 of file imagelist.c.

40{
42 return (ilc & ~ILC_COLORMASK) | bpp;
43}
DWORD bpp
Definition: surface.c:185
#define ILC_COLORMASK
Definition: imagelist.c:16
unsigned int UINT
Definition: ndis.h:50
#define ILC_COLOR16
Definition: commctrl.h:356
#define ILC_COLOR32
Definition: commctrl.h:358

Referenced by Test_Flags().

◆ IL_Create()

static HIMAGELIST IL_Create ( UINT  flags)
inlinestatic

Definition at line 34 of file imagelist.c.

35{
37}
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:814
GLbitfield flags
Definition: glext.h:7161

Referenced by Test_Flags(), and Test_SystemIL().

◆ IL_Destroy()

static HRESULT IL_Destroy ( HIMAGELIST  himl)
static

Definition at line 27 of file imagelist.c.

28{
29 if (himl && !IL_IsValid(himl))
30 return E_INVALIDARG;
32}
#define E_INVALIDARG
Definition: ddrawi.h:101
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:941
#define S_OK
Definition: intsafe.h:52
static BOOL IL_IsValid(HIMAGELIST himl)
Definition: imagelist.c:19
#define S_FALSE
Definition: winerror.h:3451

Referenced by Test_Flags(), and Test_SystemIL().

◆ IL_IsValid()

static BOOL IL_IsValid ( HIMAGELIST  himl)
static

Definition at line 19 of file imagelist.c.

20{
21 int w = -42, h;
22 if (!himl || IsBadReadPtr(himl, sizeof(void*)))
23 return FALSE;
24 return ImageList_GetIconSize(himl, &w, &h) && w != -42;
25}
BOOL WINAPI ImageList_GetIconSize(HIMAGELIST himl, INT *cx, INT *cy)
Definition: imagelist.c:2055
BOOL WINAPI IsBadReadPtr(IN LPCVOID lp, IN UINT_PTR ucb)
Definition: except.c:805
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723

Referenced by IL_Destroy(), and Test_SystemIL().

◆ START_TEST()

START_TEST ( ImageListApi  )

Definition at line 143 of file imagelist.c.

144{
147 Test_Flags();
148}
VOID WINAPI InitCommonControls(void)
Definition: commctrl.c:874
static void Test_SystemIL(void)
Definition: imagelist.c:62
static void Test_Flags(void)
Definition: imagelist.c:82

◆ Test_Flags()

static void Test_Flags ( void  )
static

Definition at line 82 of file imagelist.c.

83{
85 UINT flagsIn, flagsOut;
87
88 himl = IL_Create(flagsIn = flags);
89 flagsOut = ImageList_GetFlags(himl);
90 if (himl ? TRUE : (skip("Could not initialize\n"), FALSE))
91 {
92 ok((flagsOut & ILC_COLORMASK) == (flagsIn & ILC_COLORMASK), "ILC_COLOR\n");
93 ok(!(flagsOut & ILC_SYSTEM), "!ILC_SYSTEM\n");
94
95 ok(IL_AddImagesForTest(himl), "Initialize\n");
96 flagsIn = IL_CalculateOtherBpp(flagsIn);
97 ok(ImageList_SetFlags(himl, flagsIn), "Can change BPP\n");
98 ok(ImageList_GetImageCount(himl) == 0, "SetFlags deletes all images\n");
99
100 ok(IL_AddImagesForTest(himl), "Initialize\n");
101 ok(ImageList_SetFlags(himl, ImageList_GetFlags(himl)), "Can set same flags\n");
102 if (WinVerMajor() >= 6)
103 {
104 ok(ImageList_GetImageCount(himl) != 0, "SetFlags does not delete with same flags\n");
105 ok(ImageList_SetFlags(himl, flagsIn ^ ILC_SYSTEM), "Can change ILC_SYSTEM\n");
106 }
107 else
108 {
109 ok(ImageList_GetImageCount(himl) == 0, "SetFlags deletes all images even with same flags\n");
110 ok(!ImageList_SetFlags(himl, flagsIn ^ ILC_SYSTEM), "Can't change ILC_SYSTEM\n");
111 }
112
114 }
115
116 himl = IL_Create(flagsIn = flags | ILC_SYSTEM);
117 flagsOut = ImageList_GetFlags(himl);
118 if (himl ? TRUE : (skip("Could not initialize\n"), FALSE))
119 {
120 ok((flagsOut & ILC_SYSTEM), "ILC_SYSTEM\n"); /* Flag is not hidden */
121
122 ok(IL_AddImagesForTest(himl), "Initialize\n");
123
124 flagsIn = IL_CalculateOtherBpp(flagsIn);
125 ok(ImageList_SetFlags(himl, flagsIn), "Can change BPP\n");
126 ok(ImageList_GetImageCount(himl) == 0, "SetFlags deletes all images\n");
127
128 ok(IL_AddImagesForTest(himl), "Initialize\n");
129 ok(ImageList_SetFlags(himl, ImageList_GetFlags(himl)), "Can set same flags\n");
130 if (WinVerMajor() >= 6)
131 {
132 ok(ImageList_SetFlags(himl, flagsIn ^ ILC_SYSTEM), "Can change ILC_SYSTEM\n");
133 }
134 else
135 {
136 ok(!ImageList_SetFlags(himl, flagsIn ^ ILC_SYSTEM), "Can't change ILC_SYSTEM\n");
137 }
138
140 }
141}
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define ILC_SYSTEM
#define TRUE
Definition: types.h:120
DWORD WINAPI ImageList_SetFlags(HIMAGELIST himl, DWORD flags)
Definition: imagelist.c:3108
INT WINAPI ImageList_GetImageCount(HIMAGELIST himl)
Definition: imagelist.c:2081
DWORD WINAPI ImageList_GetFlags(HIMAGELIST himl)
Definition: imagelist.c:1952
static BOOL IL_AddImagesForTest(HIMAGELIST himl)
Definition: imagelist.c:45
static HIMAGELIST IL_Create(UINT flags)
Definition: imagelist.c:34
#define WinVerMajor()
Definition: imagelist.c:14
static HRESULT IL_Destroy(HIMAGELIST himl)
Definition: imagelist.c:27
static UINT IL_CalculateOtherBpp(UINT ilc)
Definition: imagelist.c:39
#define ILC_MASK
Definition: commctrl.h:351

Referenced by START_TEST().

◆ Test_SystemIL()

static void Test_SystemIL ( void  )
static

Definition at line 62 of file imagelist.c.

63{
66
68 ok(IL_Destroy(himl) == S_OK && !IL_IsValid(himl), "Can destroy normal\n");
69
70 /* You can (sometimes) destroy a system imagelist!
71 * On Win9x it destroys it for all processes according to
72 * https://sporks.space/2021/09/18/notes-on-the-system-image-list/ and
73 * https://www.catch22.net/tuts/win32/system-image-list/
74 */
76 if (WinVerMajor() >= 6)
77 ok(IL_Destroy(himl) == S_FALSE && IL_IsValid(himl), "Can't destroy system\n");
78 else
79 ok(IL_Destroy(himl) == S_OK && !IL_IsValid(himl), "Can destroy system\n");
80}

Referenced by START_TEST().