revert 17709 for it break streach for windows mode. That why I did only got black...
[reactos.git] / reactos / regtests / winetests / comctl32 / tab.c
1 /* Unit test suite for tab control.
2 *
3 * Copyright 2003 Vitaliy Margolen
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20 #include <assert.h>
21 #include <windows.h>
22 #include <commctrl.h>
23
24 #include "wine/test.h"
25
26 #undef VISIBLE
27
28 #define TAB_DEFAULT_WIDTH 96
29 #define TAB_PADDING_X 2
30 #define TAB_PADDING_Y 2
31
32 #define TCS_BOTTOM 0x0002
33
34 #ifdef VISIBLE
35 #define WAIT Sleep (1000)
36 #define REDRAW(hwnd) RedrawWindow (hwnd, NULL, 0, RDW_UPDATENOW)
37 #define trace_tab(str) trace(str)
38 #else
39 #define WAIT
40 #define REDRAW(hwnd)
41 #define trace_tab(str)
42 #endif
43
44 static HWND
45 create_tabcontrol (DWORD style)
46 {
47 HWND handle;
48 TCITEM tcNewTab;
49
50 handle = CreateWindow (
51 WC_TABCONTROLA,
52 "TestTab",
53 WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | style,
54 10, 10, 300, 100,
55 NULL, NULL, NULL, 0);
56
57 assert (handle);
58
59 SetWindowLong(handle, GWL_STYLE, WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | style);
60
61 tcNewTab.mask = TCIF_TEXT | TCIF_IMAGE;
62 tcNewTab.pszText = "Tab 1";
63 tcNewTab.iImage = 0;
64 SendMessage (handle, TCM_INSERTITEM, 0, (LPARAM) &tcNewTab);
65 tcNewTab.pszText = "Wide Tab 2";
66 tcNewTab.iImage = 1;
67 SendMessage (handle, TCM_INSERTITEM, 1, (LPARAM) &tcNewTab);
68 tcNewTab.pszText = "T 3";
69 tcNewTab.iImage = 2;
70 SendMessage (handle, TCM_INSERTITEM, 2, (LPARAM) &tcNewTab);
71
72 #ifdef VISIBLE
73 ShowWindow (handle, SW_SHOW);
74 #endif
75 REDRAW(handle);
76 WAIT;
77
78 return handle;
79 }
80
81 static void CheckSize(HWND hwnd, INT width, INT height)
82 {
83 RECT rTab, r1;
84
85 r1.left=r1.top=r1.right=r1.bottom=0;
86 SendMessage (hwnd, TCM_GETITEMRECT, 0, (LPARAM) &rTab);
87 SendMessage (hwnd, TCM_ADJUSTRECT, FALSE, (LPARAM) &r1);
88 /* trace ("Got (%ld,%ld)-(%ld,%ld)\n", rTab.left, rTab.top, rTab.right, rTab.bottom); */
89 trace (" (%ld,%ld)-(%ld,%ld)\n", r1.left, r1.top, r1.right, r1.bottom);
90 if ((width >= 0) && (height < 0))
91 ok (width == rTab.right - rTab.left, "Expected [%d] got [%ld]\n", width, rTab.right - rTab.left);
92 else if ((height >= 0) && (width < 0))
93 ok (height == rTab.bottom - rTab.top, "Expected [%d] got [%ld]\n", height, rTab.bottom - rTab.top);
94 else
95 ok ((width == rTab.right - rTab.left) &&
96 (height == rTab.bottom - rTab.top ),
97 "Expected [%d,%d] got [%ld,%ld]\n", width, height, rTab.right - rTab.left, rTab.bottom - rTab.top);
98 }
99
100 static void TabCheckSetSize(HWND hwnd, INT SetWidth, INT SetHeight, INT ExpWidth, INT ExpHeight)
101 {
102 SendMessage (hwnd, TCM_SETITEMSIZE, 0,
103 (LPARAM) MAKELPARAM((SetWidth >= 0) ? SetWidth:0, (SetHeight >= 0) ? SetHeight:0));
104 REDRAW(hwnd);
105 CheckSize(hwnd, ExpWidth, ExpHeight);
106 WAIT;
107 }
108
109 START_TEST(tab)
110 {
111 HWND hwTab;
112 HIMAGELIST himl = ImageList_Create(21, 21, ILC_COLOR, 3, 4);
113
114 InitCommonControls();
115
116
117 hwTab = create_tabcontrol(TCS_FIXEDWIDTH);
118
119 trace_tab ("Testing TCS_FIXEDWIDTH tabs no icon...\n");
120 trace_tab (" default width...\n");
121 CheckSize(hwTab, TAB_DEFAULT_WIDTH, -1);
122 trace_tab (" set size...\n");
123 TabCheckSetSize(hwTab, 50, 20, 50, 20);
124 WAIT;
125 trace_tab (" min size...\n");
126 TabCheckSetSize(hwTab, 0, 1, 0, 1);
127 WAIT;
128
129 SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
130
131 trace_tab ("Testing TCS_FIXEDWIDTH tabs with icon...\n");
132 trace_tab (" set size > icon...\n");
133 TabCheckSetSize(hwTab, 50, 30, 50, 30);
134 trace_tab (" set size < icon...\n");
135 TabCheckSetSize(hwTab, 20, 20, 25, 20);
136 trace_tab (" min size...\n");
137 TabCheckSetSize(hwTab, 0, 1, 25, 1);
138
139 DestroyWindow (hwTab);
140
141 trace_tab ("Testing TCS_FIXEDWIDTH buttons no icon...\n");
142 hwTab = create_tabcontrol(TCS_FIXEDWIDTH | TCS_BUTTONS);
143
144 trace_tab (" default width...\n");
145 CheckSize(hwTab, TAB_DEFAULT_WIDTH, -1);
146 trace_tab (" set size 1...\n");
147 TabCheckSetSize(hwTab, 20, 20, 20, 20);
148 trace_tab (" set size 2...\n");
149 TabCheckSetSize(hwTab, 10, 50, 10, 50);
150 trace_tab (" min size...\n");
151 TabCheckSetSize(hwTab, 0, 1, 0, 1);
152
153 SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
154
155 trace_tab ("Testing TCS_FIXEDWIDTH buttons with icon...\n");
156 trace_tab (" set size > icon...\n");
157 TabCheckSetSize(hwTab, 50, 30, 50, 30);
158 trace_tab (" set size < icon...\n");
159 TabCheckSetSize(hwTab, 20, 20, 25, 20);
160 trace_tab (" min size...\n");
161 TabCheckSetSize(hwTab, 0, 1, 25, 1);
162 trace_tab (" Add padding...\n");
163 SendMessage(hwTab, TCM_SETPADDING, 0, MAKELPARAM(4,4));
164 trace_tab (" min size...\n");
165 TabCheckSetSize(hwTab, 0, 1, 25, 1);
166
167 DestroyWindow (hwTab);
168
169 hwTab = create_tabcontrol(TCS_FIXEDWIDTH | TCS_BOTTOM);
170 trace_tab ("Testing TCS_FIXEDWIDTH | TCS_BOTTOM tabs no icon...\n");
171
172 trace_tab (" default width...\n");
173 CheckSize(hwTab, TAB_DEFAULT_WIDTH, -1);
174 trace_tab (" set size 1...\n");
175 TabCheckSetSize(hwTab, 20, 20, 20, 20);
176 trace_tab (" set size 2...\n");
177 TabCheckSetSize(hwTab, 10, 50, 10, 50);
178 trace_tab (" min size...\n");
179 TabCheckSetSize(hwTab, 0, 1, 0, 1);
180
181 SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
182
183 trace_tab ("Testing TCS_FIXEDWIDTH | TCS_BOTTOM tabs with icon...\n");
184 trace_tab (" set size > icon...\n");
185 TabCheckSetSize(hwTab, 50, 30, 50, 30);
186 trace_tab (" set size < icon...\n");
187 TabCheckSetSize(hwTab, 20, 20, 25, 20);
188 trace_tab (" min size...\n");
189 TabCheckSetSize(hwTab, 0, 1, 25, 1);
190 trace_tab (" Add padding...\n");
191 SendMessage(hwTab, TCM_SETPADDING, 0, MAKELPARAM(4,4));
192 trace_tab (" min size...\n");
193 TabCheckSetSize(hwTab, 0, 1, 25, 1);
194
195 DestroyWindow (hwTab);
196
197
198 ImageList_Destroy(himl);
199 }