Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: webkit/tools/test_shell/test_shell_webthemeengine.cc

Issue 15028002: Delete test_shell. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add dummy test_shell build target. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // This file implements a simple generic version of the WebKitThemeEngine,
6 // Since WebThemeEngine is unfortunately defined in terms of the Windows
7 // Theme parameters and values, we need to translate all the values into
8 // generic equivalents that we can more easily understand. This file does
9 // that translation (acting as a Facade design pattern) and then uses
10 // TestShellWebTheme::Control for the actual rendering of the widgets.
11 //
12
13 #include "webkit/tools/test_shell/test_shell_webthemeengine.h"
14
15 // Although all this code is generic, we include these headers
16 // to pull in the Windows #defines for the parts and states of
17 // the controls.
18 #include <vsstyle.h>
19 #include <windows.h>
20
21 #include "base/logging.h"
22 #include "third_party/WebKit/Source/Platform/chromium/public/WebCanvas.h"
23 #include "third_party/WebKit/Source/Platform/chromium/public/WebRect.h"
24 #include "third_party/skia/include/core/SkRect.h"
25 #include "webkit/tools/test_shell/test_shell_webthemecontrol.h"
26
27 // We define this for clarity, although there really should be a DFCS_NORMAL
28 // in winuser.h.
29 namespace {
30 const int kDFCSNormal = 0x0000;
31 }
32
33 using WebKit::WebCanvas;
34 using WebKit::WebColor;
35 using WebKit::WebRect;
36
37 namespace TestShellWebTheme {
38
39 SkIRect webRectToSkIRect(const WebRect& web_rect) {
40 SkIRect irect;
41 irect.set(web_rect.x, web_rect.y, web_rect.x + web_rect.width,
42 web_rect.y + web_rect.height);
43 return irect;
44 }
45
46 void drawControl(WebCanvas* canvas, const WebRect& rect, Control::Type ctype,
47 Control::State cstate) {
48 Control control(canvas, webRectToSkIRect(rect), ctype, cstate);
49 control.draw();
50 }
51
52 void drawTextField(WebCanvas* canvas, const WebRect& rect,
53 Control::Type ctype, Control::State cstate,
54 bool draw_edges, bool fill_content_area, WebColor color) {
55 Control control(canvas, webRectToSkIRect(rect), ctype, cstate);
56 control.drawTextField(draw_edges, fill_content_area, color);
57 }
58
59 void drawProgressBar(WebCanvas* canvas,
60 Control::Type ctype, Control::State cstate,
61 const WebRect& bar_rect, const WebRect& fill_rect) {
62 Control control(canvas, webRectToSkIRect(bar_rect), ctype, cstate);
63 control.drawProgressBar(webRectToSkIRect(fill_rect));
64 }
65
66 void Engine::paintButton(WebCanvas* canvas, int part, int state,
67 int classic_state, const WebRect& rect) {
68 Control::Type ctype = Control::kUnknown_Type;
69 Control::State cstate = Control::kUnknown_State;
70
71 if (part == BP_CHECKBOX) {
72 switch (state) {
73 case CBS_UNCHECKEDNORMAL:
74 CHECK_EQ(classic_state, kDFCSNormal);
75 ctype = Control::kUncheckedBox_Type;
76 cstate = Control::kNormal_State;
77 break;
78 case CBS_UNCHECKEDHOT:
79 CHECK_EQ(classic_state, DFCS_BUTTONCHECK | DFCS_HOT);
80 ctype = Control::kUncheckedBox_Type;
81 cstate = Control::kHot_State;
82 break;
83 case CBS_UNCHECKEDPRESSED:
84 CHECK_EQ(classic_state, DFCS_BUTTONCHECK | DFCS_PUSHED);
85 ctype = Control::kUncheckedBox_Type;
86 cstate = Control::kPressed_State;
87 break;
88 case CBS_UNCHECKEDDISABLED:
89 CHECK_EQ(classic_state, DFCS_BUTTONCHECK | DFCS_INACTIVE);
90 ctype = Control::kUncheckedBox_Type;
91 cstate = Control::kDisabled_State;
92 break;
93 case CBS_CHECKEDNORMAL:
94 CHECK_EQ(classic_state, DFCS_BUTTONCHECK | DFCS_CHECKED);
95 ctype = Control::kCheckedBox_Type;
96 cstate = Control::kNormal_State;
97 break;
98 case CBS_CHECKEDHOT:
99 CHECK_EQ(classic_state, DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_HOT);
100 ctype = Control::kCheckedBox_Type;
101 cstate = Control::kHot_State;
102 break;
103 case CBS_CHECKEDPRESSED:
104 CHECK_EQ(classic_state, DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_PUSHED);
105 ctype = Control::kCheckedBox_Type;
106 cstate = Control::kPressed_State;
107 break;
108 case CBS_CHECKEDDISABLED:
109 CHECK_EQ(classic_state,
110 DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_INACTIVE);
111 ctype = Control::kCheckedBox_Type;
112 cstate = Control::kDisabled_State;
113 break;
114 case CBS_MIXEDNORMAL:
115 // Classic theme can't represent mixed state checkbox. We assume
116 // it's equivalent to unchecked.
117 CHECK_EQ(classic_state, DFCS_BUTTONCHECK);
118 ctype = Control::kIndeterminateCheckBox_Type;
119 cstate = Control::kNormal_State;
120 break;
121 case CBS_MIXEDHOT:
122 CHECK_EQ(classic_state, DFCS_BUTTONCHECK | DFCS_HOT);
123 ctype = Control::kIndeterminateCheckBox_Type;
124 cstate = Control::kHot_State;
125 break;
126 case CBS_MIXEDPRESSED:
127 CHECK_EQ(classic_state, DFCS_BUTTONCHECK | DFCS_PUSHED);
128 ctype = Control::kIndeterminateCheckBox_Type;
129 cstate = Control::kPressed_State;
130 break;
131 case CBS_MIXEDDISABLED:
132 CHECK_EQ(classic_state, DFCS_BUTTONCHECK | DFCS_INACTIVE);
133 ctype = Control::kIndeterminateCheckBox_Type;
134 cstate = Control::kDisabled_State;
135 break;
136 default:
137 NOTREACHED();
138 break;
139 }
140 } else if (BP_RADIOBUTTON == part) {
141 switch (state) {
142 case RBS_UNCHECKEDNORMAL:
143 CHECK_EQ(classic_state, DFCS_BUTTONRADIO);
144 ctype = Control::kUncheckedRadio_Type;
145 cstate = Control::kNormal_State;
146 break;
147 case RBS_UNCHECKEDHOT:
148 CHECK_EQ(classic_state, DFCS_BUTTONRADIO | DFCS_HOT);
149 ctype = Control::kUncheckedRadio_Type;
150 cstate = Control::kHot_State;
151 break;
152 case RBS_UNCHECKEDPRESSED:
153 CHECK_EQ(classic_state, DFCS_BUTTONRADIO | DFCS_PUSHED);
154 ctype = Control::kUncheckedRadio_Type;
155 cstate = Control::kPressed_State;
156 break;
157 case RBS_UNCHECKEDDISABLED:
158 CHECK_EQ(classic_state, DFCS_BUTTONRADIO | DFCS_INACTIVE);
159 ctype = Control::kUncheckedRadio_Type;
160 cstate = Control::kDisabled_State;
161 break;
162 case RBS_CHECKEDNORMAL:
163 CHECK_EQ(classic_state, DFCS_BUTTONRADIO | DFCS_CHECKED);
164 ctype = Control::kCheckedRadio_Type;
165 cstate = Control::kNormal_State;
166 break;
167 case RBS_CHECKEDHOT:
168 CHECK_EQ(classic_state, DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_HOT);
169 ctype = Control::kCheckedRadio_Type;
170 cstate = Control::kHot_State;
171 break;
172 case RBS_CHECKEDPRESSED:
173 CHECK_EQ(classic_state, DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_PUSHED);
174 ctype = Control::kCheckedRadio_Type;
175 cstate = Control::kPressed_State;
176 break;
177 case RBS_CHECKEDDISABLED:
178 CHECK_EQ(classic_state,
179 DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_INACTIVE);
180 ctype = Control::kCheckedRadio_Type;
181 cstate = Control::kDisabled_State;
182 break;
183 default:
184 NOTREACHED();
185 break;
186 }
187 } else if (BP_PUSHBUTTON == part) {
188 switch (state) {
189 case PBS_NORMAL:
190 CHECK_EQ(classic_state, DFCS_BUTTONPUSH);
191 ctype = Control::kPushButton_Type;
192 cstate = Control::kNormal_State;
193 break;
194 case PBS_HOT:
195 CHECK_EQ(classic_state, DFCS_BUTTONPUSH | DFCS_HOT);
196 ctype = Control::kPushButton_Type;
197 cstate = Control::kHot_State;
198 break;
199 case PBS_PRESSED:
200 CHECK_EQ(classic_state, DFCS_BUTTONPUSH | DFCS_PUSHED);
201 ctype = Control::kPushButton_Type;
202 cstate = Control::kPressed_State;
203 break;
204 case PBS_DISABLED:
205 CHECK_EQ(classic_state, DFCS_BUTTONPUSH | DFCS_INACTIVE);
206 ctype = Control::kPushButton_Type;
207 cstate = Control::kDisabled_State;
208 break;
209 case PBS_DEFAULTED:
210 CHECK_EQ(classic_state, DFCS_BUTTONPUSH);
211 ctype = Control::kPushButton_Type;
212 cstate = Control::kFocused_State;
213 break;
214 default:
215 NOTREACHED();
216 break;
217 }
218 } else {
219 NOTREACHED();
220 }
221
222 drawControl(canvas, rect, ctype, cstate);
223 }
224
225
226 void Engine::paintMenuList(WebCanvas* canvas, int part, int state,
227 int classic_state, const WebRect& rect) {
228 Control::Type ctype = Control::kUnknown_Type;
229 Control::State cstate = Control::kUnknown_State;
230
231 if (CP_DROPDOWNBUTTON == part) {
232 ctype = Control::kDropDownButton_Type;
233 switch (state) {
234 case CBXS_NORMAL:
235 CHECK_EQ(classic_state, DFCS_MENUARROW);
236 cstate = Control::kNormal_State;
237 break;
238 case CBXS_HOT:
239 CHECK_EQ(classic_state, DFCS_MENUARROW | DFCS_HOT);
240 cstate = Control::kHover_State;
241 break;
242 case CBXS_PRESSED:
243 CHECK_EQ(classic_state, DFCS_MENUARROW | DFCS_PUSHED);
244 cstate = Control::kPressed_State;
245 break;
246 case CBXS_DISABLED:
247 CHECK_EQ(classic_state, DFCS_MENUARROW | DFCS_INACTIVE);
248 cstate = Control::kDisabled_State;
249 break;
250 default:
251 CHECK(false);
252 break;
253 }
254 } else {
255 CHECK(false);
256 }
257
258 drawControl(canvas, rect, ctype, cstate);
259 }
260
261 void Engine::paintScrollbarArrow(WebCanvas* canvas, int state,
262 int classic_state, const WebRect& rect) {
263 Control::Type ctype = Control::kUnknown_Type;
264 Control::State cstate = Control::kUnknown_State;
265
266 switch (state) {
267 case ABS_UPNORMAL:
268 CHECK_EQ(classic_state, DFCS_SCROLLUP);
269 ctype = Control::kUpArrow_Type;
270 cstate = Control::kNormal_State;
271 break;
272 case ABS_DOWNNORMAL:
273 CHECK_EQ(classic_state, DFCS_SCROLLDOWN);
274 ctype = Control::kDownArrow_Type;
275 cstate = Control::kNormal_State;
276 break;
277 case ABS_LEFTNORMAL:
278 CHECK_EQ(classic_state, DFCS_SCROLLLEFT);
279 ctype = Control::kLeftArrow_Type;
280 cstate = Control::kNormal_State;
281 break;
282 case ABS_RIGHTNORMAL:
283 CHECK_EQ(classic_state, DFCS_SCROLLRIGHT);
284 ctype = Control::kRightArrow_Type;
285 cstate = Control::kNormal_State;
286 break;
287 case ABS_UPHOT:
288 CHECK_EQ(classic_state, DFCS_SCROLLUP | DFCS_HOT);
289 ctype = Control::kUpArrow_Type;
290 cstate = Control::kHot_State;
291 break;
292 case ABS_DOWNHOT:
293 CHECK_EQ(classic_state, DFCS_SCROLLDOWN | DFCS_HOT);
294 ctype = Control::kDownArrow_Type;
295 cstate = Control::kHot_State;
296 break;
297 case ABS_LEFTHOT:
298 CHECK_EQ(classic_state, DFCS_SCROLLLEFT | DFCS_HOT);
299 ctype = Control::kLeftArrow_Type;
300 cstate = Control::kHot_State;
301 break;
302 case ABS_RIGHTHOT:
303 CHECK_EQ(classic_state, DFCS_SCROLLRIGHT | DFCS_HOT);
304 ctype = Control::kRightArrow_Type;
305 cstate = Control::kHot_State;
306 break;
307 case ABS_UPHOVER:
308 CHECK_EQ(classic_state, DFCS_SCROLLUP);
309 ctype = Control::kUpArrow_Type;
310 cstate = Control::kHover_State;
311 break;
312 case ABS_DOWNHOVER:
313 CHECK_EQ(classic_state, DFCS_SCROLLDOWN);
314 ctype = Control::kDownArrow_Type;
315 cstate = Control::kHover_State;
316 break;
317 case ABS_LEFTHOVER:
318 CHECK_EQ(classic_state, DFCS_SCROLLLEFT);
319 ctype = Control::kLeftArrow_Type;
320 cstate = Control::kHover_State;
321 break;
322 case ABS_RIGHTHOVER:
323 CHECK_EQ(classic_state, DFCS_SCROLLRIGHT);
324 ctype = Control::kRightArrow_Type;
325 cstate = Control::kHover_State;
326 break;
327 case ABS_UPPRESSED:
328 CHECK_EQ(classic_state, DFCS_SCROLLUP | DFCS_PUSHED | DFCS_FLAT);
329 ctype = Control::kUpArrow_Type;
330 cstate = Control::kPressed_State;
331 break;
332 case ABS_DOWNPRESSED:
333 CHECK_EQ(classic_state, DFCS_SCROLLDOWN | DFCS_PUSHED | DFCS_FLAT);
334 ctype = Control::kDownArrow_Type;
335 cstate = Control::kPressed_State;
336 break;
337 case ABS_LEFTPRESSED:
338 CHECK_EQ(classic_state, DFCS_SCROLLLEFT | DFCS_PUSHED | DFCS_FLAT);
339 ctype = Control::kLeftArrow_Type;
340 cstate = Control::kPressed_State;
341 break;
342 case ABS_RIGHTPRESSED:
343 CHECK_EQ(classic_state, DFCS_SCROLLRIGHT | DFCS_PUSHED | DFCS_FLAT);
344 ctype = Control::kRightArrow_Type;
345 cstate = Control::kPressed_State;
346 break;
347 case ABS_UPDISABLED:
348 CHECK_EQ(classic_state, DFCS_SCROLLUP | DFCS_INACTIVE);
349 ctype = Control::kUpArrow_Type;
350 cstate = Control::kDisabled_State;
351 break;
352 case ABS_DOWNDISABLED:
353 CHECK_EQ(classic_state, DFCS_SCROLLDOWN | DFCS_INACTIVE);
354 ctype = Control::kDownArrow_Type;
355 cstate = Control::kDisabled_State;
356 break;
357 case ABS_LEFTDISABLED:
358 CHECK_EQ(classic_state, DFCS_SCROLLLEFT | DFCS_INACTIVE);
359 ctype = Control::kLeftArrow_Type;
360 cstate = Control::kDisabled_State;
361 break;
362 case ABS_RIGHTDISABLED:
363 CHECK_EQ(classic_state, DFCS_SCROLLRIGHT | DFCS_INACTIVE);
364 ctype = Control::kRightArrow_Type;
365 cstate = Control::kDisabled_State;
366 break;
367 default:
368 NOTREACHED();
369 break;
370 }
371
372 drawControl(canvas, rect, ctype, cstate);
373 }
374
375 void Engine::paintScrollbarThumb(WebCanvas* canvas, int part, int state,
376 int classic_state, const WebRect& rect) {
377 Control::Type ctype = Control::kUnknown_Type;
378 Control::State cstate = Control::kUnknown_State;
379
380 switch (part) {
381 case SBP_THUMBBTNHORZ:
382 ctype = Control::kHorizontalScrollThumb_Type;
383 break;
384 case SBP_THUMBBTNVERT:
385 ctype = Control::kVerticalScrollThumb_Type;
386 break;
387 case SBP_GRIPPERHORZ:
388 ctype = Control::kHorizontalScrollGrip_Type;
389 break;
390 case SBP_GRIPPERVERT:
391 ctype = Control::kVerticalScrollGrip_Type;
392 break;
393 default:
394 NOTREACHED();
395 break;
396 }
397
398 switch (state) {
399 case SCRBS_NORMAL:
400 CHECK_EQ(classic_state, kDFCSNormal);
401 cstate = Control::kNormal_State;
402 break;
403 case SCRBS_HOT:
404 CHECK_EQ(classic_state, DFCS_HOT);
405 cstate = Control::kHot_State;
406 break;
407 case SCRBS_HOVER:
408 CHECK_EQ(classic_state, kDFCSNormal);
409 cstate = Control::kHover_State;
410 break;
411 case SCRBS_PRESSED:
412 CHECK_EQ(classic_state, kDFCSNormal);
413 cstate = Control::kPressed_State;
414 break;
415 case SCRBS_DISABLED:
416 NOTREACHED(); // This should never happen in practice.
417 break;
418 default:
419 NOTREACHED();
420 break;
421 }
422
423 drawControl(canvas, rect, ctype, cstate);
424 }
425
426 void Engine::paintScrollbarTrack(WebCanvas* canvas, int part, int state,
427 int classic_state, const WebRect& rect,
428 const WebRect& align_rect) {
429 Control::Type ctype = Control::kUnknown_Type;
430 Control::State cstate = Control::kUnknown_State;
431
432 switch (part) {
433 case SBP_UPPERTRACKHORZ:
434 ctype = Control::kHorizontalScrollTrackBack_Type;
435 break;
436 case SBP_LOWERTRACKHORZ:
437 ctype = Control::kHorizontalScrollTrackForward_Type;
438 break;
439 case SBP_UPPERTRACKVERT:
440 ctype = Control::kVerticalScrollTrackBack_Type;
441 break;
442 case SBP_LOWERTRACKVERT:
443 ctype = Control::kVerticalScrollTrackForward_Type;
444 break;
445 default:
446 NOTREACHED();
447 break;
448 }
449
450 switch (state) {
451 case SCRBS_NORMAL:
452 CHECK_EQ(classic_state, kDFCSNormal);
453 cstate = Control::kNormal_State;
454 break;
455 case SCRBS_HOT:
456 NOTREACHED(); // This should never happen in practice.
457 break;
458 case SCRBS_HOVER:
459 CHECK_EQ(classic_state, kDFCSNormal);
460 cstate = Control::kHover_State;
461 break;
462 case SCRBS_PRESSED:
463 NOTREACHED(); // This should never happen in practice.
464 break;
465 case SCRBS_DISABLED:
466 CHECK_EQ(classic_state, DFCS_INACTIVE);
467 cstate = Control::kDisabled_State;
468 break;
469 default:
470 CHECK(false);
471 break;
472 }
473
474 drawControl(canvas, rect, ctype, cstate);
475 }
476
477 void Engine::paintTextField(WebCanvas* canvas, int part, int state,
478 int classic_state, const WebRect& rect,
479 WebColor color, bool fill_content_area,
480 bool draw_edges) {
481 Control::Type ctype = Control::kUnknown_Type;
482 Control::State cstate = Control::kUnknown_State;
483
484 CHECK_EQ(EP_EDITTEXT, part);
485 ctype = Control::kTextField_Type;
486
487 switch (state) {
488 case ETS_NORMAL:
489 CHECK_EQ(classic_state, kDFCSNormal);
490 cstate = Control::kNormal_State;
491 break;
492 case ETS_HOT:
493 CHECK_EQ(classic_state, DFCS_HOT);
494 cstate = Control::kHot_State;
495 break;
496 case ETS_DISABLED:
497 CHECK_EQ(classic_state, DFCS_INACTIVE);
498 cstate = Control::kDisabled_State;
499 break;
500 case ETS_SELECTED:
501 CHECK_EQ(classic_state, DFCS_PUSHED);
502 cstate = Control::kPressed_State;
503 break;
504 case ETS_FOCUSED:
505 CHECK_EQ(classic_state, kDFCSNormal);
506 cstate = Control::kFocused_State;
507 break;
508 case ETS_READONLY:
509 CHECK_EQ(classic_state, kDFCSNormal);
510 cstate = Control::kReadOnly_State;
511 break;
512 default:
513 NOTREACHED();
514 break;
515 }
516
517 drawTextField(canvas, rect, ctype, cstate, draw_edges, fill_content_area,
518 color);
519 }
520
521 void Engine::paintTrackbar(WebCanvas* canvas, int part, int state,
522 int classic_state, const WebRect& rect) {
523 Control::Type ctype = Control::kUnknown_Type;
524 Control::State cstate = Control::kUnknown_State;
525
526 if (TKP_THUMBBOTTOM == part) {
527 ctype = Control::kHorizontalSliderThumb_Type;
528 switch (state) {
529 case TUS_NORMAL:
530 CHECK_EQ(classic_state, kDFCSNormal);
531 cstate = Control::kNormal_State;
532 break;
533 case TUS_HOT:
534 CHECK_EQ(classic_state, DFCS_HOT);
535 cstate = Control::kHot_State;
536 break;
537 case TUS_DISABLED:
538 CHECK_EQ(classic_state, DFCS_INACTIVE);
539 cstate = Control::kDisabled_State;
540 break;
541 case TUS_PRESSED:
542 CHECK_EQ(classic_state, DFCS_PUSHED);
543 cstate = Control::kPressed_State;
544 break;
545 default:
546 NOTREACHED();
547 break;
548 }
549 } else if (TKP_TRACK == part) {
550 ctype = Control::kHorizontalSliderTrack_Type;
551 CHECK_EQ(part, TUS_NORMAL);
552 CHECK_EQ(classic_state, kDFCSNormal);
553 cstate = Control::kNormal_State;
554 } else {
555 NOTREACHED();
556 }
557
558 drawControl(canvas, rect, ctype, cstate);
559 }
560
561
562 void Engine::paintProgressBar(WebKit::WebCanvas* canvas,
563 const WebKit::WebRect& barRect,
564 const WebKit::WebRect& valueRect,
565 bool determinate, double) {
566 Control::Type ctype = Control::kProgressBar_Type;
567 Control::State cstate =
568 determinate ? Control::kNormal_State : Control::kIndeterminate_State;
569 drawProgressBar(canvas, ctype, cstate, barRect, valueRect);
570 }
571
572 WebKit::WebSize Engine::getSize(int part) {
573 return WebKit::WebSize();
574 }
575
576 } // namespace TestShellWebTheme
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698