1545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch/*
2545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Copyright (C) 2010 Google Inc. All rights reserved.
3545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *
4545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Redistribution and use in source and binary forms, with or without
5545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * modification, are permitted provided that the following conditions are
6545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * met:
7545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *
8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *     * Redistributions of source code must retain the above copyright
9545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * notice, this list of conditions and the following disclaimer.
10545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *     * Redistributions in binary form must reproduce the above
11545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * copyright notice, this list of conditions and the following disclaimer
12545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * in the documentation and/or other materials provided with the
13545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * distribution.
14545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *     * Neither the name of Google Inc. nor the names of its
15545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * contributors may be used to endorse or promote products derived from
16545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * this software without specific prior written permission.
17545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *
18545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch */
30545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
31545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "config.h"
32f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "WebThemeEngineDRTWin.h"
33545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
34a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebRect.h"
35f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "WebThemeControlDRTWin.h"
36545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "third_party/skia/include/core/SkRect.h"
37545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// Although all this code is generic, we include these headers
39545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// to pull in the Windows #defines for the parts and states of
40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// the controls.
41545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <vsstyle.h>
42545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <windows.h>
43545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
44545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <wtf/Assertions.h>
45545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
46545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochusing namespace WebKit;
47545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
48545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// We define this for clarity, although there really should be a DFCS_NORMAL in winuser.h.
49545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochstatic const int dfcsNormal = 0x0000;
50545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
51545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochstatic SkIRect webRectToSkIRect(const WebRect& webRect)
52545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
53545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    SkIRect irect;
54545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    irect.set(webRect.x, webRect.y, webRect.x + webRect.width, webRect.y + webRect.height);
55545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    return irect;
56545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
57545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
58545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochstatic void drawControl(WebCanvas* canvas,
59545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                        const WebRect& rect,
60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                        WebThemeControlDRTWin::Type ctype,
61f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                        WebThemeControlDRTWin::State cstate)
62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin control(canvas, webRectToSkIRect(rect), ctype, cstate);
64545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    control.draw();
65545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
66545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
67545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochstatic void drawTextField(WebCanvas* canvas,
68545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                          const WebRect& rect,
69f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                          WebThemeControlDRTWin::Type ctype,
70f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                          WebThemeControlDRTWin::State cstate,
71545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                          bool drawEdges,
72545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                          bool fillContentArea,
73545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                          WebColor color)
74545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
75f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin control(canvas, webRectToSkIRect(rect), ctype, cstate);
76545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    control.drawTextField(drawEdges, fillContentArea, color);
77545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
78545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
79545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochstatic void drawProgressBar(WebCanvas* canvas,
80f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                            WebThemeControlDRTWin::Type ctype,
81f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                            WebThemeControlDRTWin::State cstate,
82545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                            const WebRect& barRect,
83545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch                            const WebRect& fillRect)
84545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin control(canvas, webRectToSkIRect(barRect), ctype, cstate);
86545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    control.drawProgressBar(webRectToSkIRect(fillRect));
87545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
88545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
89f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch// WebThemeEngineDRTWin
90545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
91f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebThemeEngineDRTWin::paintButton(WebCanvas* canvas,
92f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                       int part,
93f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                       int state,
94f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                       int classicState,
95f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                       const WebRect& rect)
96545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
97f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType;
98f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState;
99545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
100545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    if (part == BP_CHECKBOX) {
101545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        switch (state) {
102545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBS_UNCHECKEDNORMAL:
103545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == dfcsNormal);
104f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::UncheckedBoxType;
105f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
106545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
107545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
108545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBS_UNCHECKEDHOT:
109545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_HOT));
110f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::UncheckedBoxType;
111f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HotState;
112545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
113545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
114545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBS_UNCHECKEDPRESSED:
115545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_PUSHED));
116f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::UncheckedBoxType;
117f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
118545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
119545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
120545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBS_UNCHECKEDDISABLED:
121545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_INACTIVE));
122f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::UncheckedBoxType;
123f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
124545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
125545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
126545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBS_CHECKEDNORMAL:
127545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED));
128f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::CheckedBoxType;
129f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
130545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
131545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
132545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBS_CHECKEDHOT:
133545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_HOT));
134f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::CheckedBoxType;
135f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HotState;
136545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
137545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
138545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBS_CHECKEDPRESSED:
139545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_PUSHED));
140f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::CheckedBoxType;
141f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
142545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
143545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
144545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBS_CHECKEDDISABLED:
145545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_INACTIVE));
146f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::CheckedBoxType;
147f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
148545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
149545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
150e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        case CBS_MIXEDNORMAL:
151e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            // Classic theme can't represent mixed state checkbox. We assume
152e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            // it's equivalent to unchecked.
153e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            ASSERT(classicState == DFCS_BUTTONCHECK);
154f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::IndeterminateCheckboxType;
155f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
156e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            break;
157e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
158e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        case CBS_MIXEDHOT:
159e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_HOT));
160f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::IndeterminateCheckboxType;
161f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HotState;
162e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            break;
163e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
164e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        case CBS_MIXEDPRESSED:
165e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_PUSHED));
166f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::IndeterminateCheckboxType;
167f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
168e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            break;
169e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
170e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        case CBS_MIXEDDISABLED:
171e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_INACTIVE));
172f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::IndeterminateCheckboxType;
173f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
174e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            break;
175e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
176545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        default:
177545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT_NOT_REACHED();
178545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
179545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        }
180545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    } else if (BP_RADIOBUTTON == part) {
181545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        switch (state) {
182545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case RBS_UNCHECKEDNORMAL:
183545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == DFCS_BUTTONRADIO);
184f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::UncheckedRadioType;
185f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
186545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
187545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
188545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case RBS_UNCHECKEDHOT:
189545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_HOT));
190f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::UncheckedRadioType;
191f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HotState;
192545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
193545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
194545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case RBS_UNCHECKEDPRESSED:
195545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_PUSHED));
196f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::UncheckedRadioType;
197f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
198545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
199545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
200545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case RBS_UNCHECKEDDISABLED:
201545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_INACTIVE));
202f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::UncheckedRadioType;
203f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
204545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
205545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
206545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case RBS_CHECKEDNORMAL:
207545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED));
208f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::CheckedRadioType;
209f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
210545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
211545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
212545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case RBS_CHECKEDHOT:
213545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_HOT));
214f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::CheckedRadioType;
215f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HotState;
216545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
217545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
218545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case RBS_CHECKEDPRESSED:
219545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_PUSHED));
220f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::CheckedRadioType;
221f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
222545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
223545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
224545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case RBS_CHECKEDDISABLED:
225545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_INACTIVE));
226f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::CheckedRadioType;
227f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
228545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
229545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
230545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        default:
231545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT_NOT_REACHED();
232545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
233545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        }
234545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    } else if (BP_PUSHBUTTON == part) {
235545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        switch (state) {
236545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case PBS_NORMAL:
237545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == DFCS_BUTTONPUSH);
238f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::PushButtonType;
239f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
240545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
241545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
242545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case PBS_HOT:
243545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONPUSH | DFCS_HOT));
244f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::PushButtonType;
245f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HotState;
246545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
247545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
248545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case PBS_PRESSED:
249545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONPUSH | DFCS_PUSHED));
250f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::PushButtonType;
251f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
252545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
253545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
254545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case PBS_DISABLED:
255545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_BUTTONPUSH | DFCS_INACTIVE));
256f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::PushButtonType;
257f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
258545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
259545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
260545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case PBS_DEFAULTED:
261545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == DFCS_BUTTONPUSH);
262f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            ctype = WebThemeControlDRTWin::PushButtonType;
263f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::FocusedState;
264545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
265545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
266545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        default:
267545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT_NOT_REACHED();
268545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
269545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        }
270545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    } else {
271545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED();
272545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
273545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
274545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    drawControl(canvas, rect, ctype, cstate);
275545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
276545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
277545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
278f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebThemeEngineDRTWin::paintMenuList(WebCanvas* canvas,
279f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                         int part,
280f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                         int state,
281f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                         int classicState,
282f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                         const WebRect& rect)
283545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
284f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType;
285f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState;
286545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
287545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    if (CP_DROPDOWNBUTTON == part) {
288f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::DropDownButtonType;
289545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        switch (state) {
290545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBXS_NORMAL:
291545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == DFCS_MENUARROW);
292f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
293545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
294545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
295545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBXS_HOT:
296545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_MENUARROW | DFCS_HOT));
297f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HoverState;
298545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
299545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
300545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBXS_PRESSED:
301545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_MENUARROW | DFCS_PUSHED));
302f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
303545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
304545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
305545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case CBXS_DISABLED:
306545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == (DFCS_MENUARROW | DFCS_INACTIVE));
307f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
308545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
309545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
310545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        default:
311545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            CRASH();
312545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
313545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        }
314545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    } else {
315545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        CRASH();
316545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
317545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
318545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    drawControl(canvas, rect, ctype, cstate);
319545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
320545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
321f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebThemeEngineDRTWin::paintScrollbarArrow(WebCanvas* canvas,
322f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               int state,
323f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               int classicState,
324f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               const WebRect& rect)
325545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
326f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType;
327f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState;
328545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
329545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    switch (state) {
330545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_UPNORMAL:
331545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_SCROLLUP);
332f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::UpArrowType;
333f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::NormalState;
334545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
335545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
336545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_DOWNNORMAL:
337545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_SCROLLDOWN);
338f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::DownArrowType;
339f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::NormalState;
340545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
341545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
342545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_LEFTNORMAL:
343545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_SCROLLLEFT);
344f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::LeftArrowType;
345f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::NormalState;
346545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
347545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
348545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_RIGHTNORMAL:
349545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_SCROLLRIGHT);
350f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::RightArrowType;
351f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::NormalState;
352545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
353545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
354545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_UPHOT:
355545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLUP | DFCS_HOT));
356f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::UpArrowType;
357f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HotState;
358545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
359545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
360545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_DOWNHOT:
361545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_HOT));
362f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::DownArrowType;
363f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HotState;
364545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
365545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
366545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_LEFTHOT:
367545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLLEFT | DFCS_HOT));
368f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::LeftArrowType;
369f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HotState;
370545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
371545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
372545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_RIGHTHOT:
373545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLRIGHT | DFCS_HOT));
374f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::RightArrowType;
375f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HotState;
376545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
377545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
378545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_UPHOVER:
379545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_SCROLLUP);
380f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::UpArrowType;
381f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HoverState;
382545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
383545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
384545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_DOWNHOVER:
385545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_SCROLLDOWN);
386f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::DownArrowType;
387f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HoverState;
388545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
389545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
390545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_LEFTHOVER:
391545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_SCROLLLEFT);
392f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::LeftArrowType;
393f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HoverState;
394545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
395545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
396545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_RIGHTHOVER:
397545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_SCROLLRIGHT);
398f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::RightArrowType;
399f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HoverState;
400545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
401545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
402545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_UPPRESSED:
403545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLUP | DFCS_PUSHED | DFCS_FLAT));
404f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::UpArrowType;
405f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::PressedState;
406545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
407545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
408545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_DOWNPRESSED:
409545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_PUSHED | DFCS_FLAT));
410f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::DownArrowType;
411f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::PressedState;
412545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
413545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
414545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_LEFTPRESSED:
415545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLLEFT | DFCS_PUSHED | DFCS_FLAT));
416f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::LeftArrowType;
417f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::PressedState;
418545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
419545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
420545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_RIGHTPRESSED:
421545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLRIGHT | DFCS_PUSHED | DFCS_FLAT));
422f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::RightArrowType;
423f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::PressedState;
424545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
425545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
426545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_UPDISABLED:
427545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLUP | DFCS_INACTIVE));
428f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::UpArrowType;
429f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::DisabledState;
430545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
431545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
432545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_DOWNDISABLED:
433545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_INACTIVE));
434f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::DownArrowType;
435f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::DisabledState;
436545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
437545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
438545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_LEFTDISABLED:
439545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLLEFT | DFCS_INACTIVE));
440f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::LeftArrowType;
441f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::DisabledState;
442545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
443545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
444545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ABS_RIGHTDISABLED:
445545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == (DFCS_SCROLLRIGHT | DFCS_INACTIVE));
446f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::RightArrowType;
447f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::DisabledState;
448545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
449545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
450545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    default:
451545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED();
452545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
453545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
454545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
455545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    drawControl(canvas, rect, ctype, cstate);
456545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
457545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
458f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebThemeEngineDRTWin::paintScrollbarThumb(WebCanvas* canvas,
459f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               int part,
460f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               int state,
461f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               int classicState,
462f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               const WebRect& rect)
463545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
464f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType;
465f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState;
466545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
467545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    switch (part) {
468545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SBP_THUMBBTNHORZ:
469f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::HorizontalScrollThumbType;
470545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
471545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
472545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SBP_THUMBBTNVERT:
473f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::VerticalScrollThumbType;
474545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
475545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
476545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SBP_GRIPPERHORZ:
477f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::HorizontalScrollGripType;
478545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
479545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
480545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SBP_GRIPPERVERT:
481f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::VerticalScrollGripType;
482545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
483545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
484545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    default:
485545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED();
486545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
487545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
488545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
489545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    switch (state) {
490545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_NORMAL:
491545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == dfcsNormal);
492f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::NormalState;
493545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
494545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
495545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_HOT:
496545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_HOT);
497f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HotState;
498545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
499545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
500545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_HOVER:
501545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == dfcsNormal);
502f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HoverState;
503545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
504545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
505545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_PRESSED:
506545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == dfcsNormal);
507f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::PressedState;
508545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
509545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
510545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_DISABLED:
511545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED(); // This should never happen in practice.
512545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
513545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
514545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    default:
515545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED();
516545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
517545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
518545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
519545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    drawControl(canvas, rect, ctype, cstate);
520545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
521545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
522f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebThemeEngineDRTWin::paintScrollbarTrack(WebCanvas* canvas,
523f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               int part,
524f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               int state,
525f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               int classicState,
526f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               const WebRect& rect,
527f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                               const WebRect& alignRect)
528545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
529f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType;
530f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState;
531545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
532545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    switch (part) {
533545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SBP_UPPERTRACKHORZ:
534f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::HorizontalScrollTrackBackType;
535545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
536545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
537545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SBP_LOWERTRACKHORZ:
538f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::HorizontalScrollTrackForwardType;
539545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
540545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
541545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SBP_UPPERTRACKVERT:
542f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::VerticalScrollTrackBackType;
543545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
544545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
545545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SBP_LOWERTRACKVERT:
546f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::VerticalScrollTrackForwardType;
547545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
548545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
549545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    default:
550545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED();
551545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
552545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
553545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
554545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    switch (state) {
555545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_NORMAL:
556545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == dfcsNormal);
557f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::NormalState;
558545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
559545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
560545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_HOT:
561545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED(); // This should never happen in practice.
562545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
563545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
564545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_HOVER:
565545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == dfcsNormal);
566f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HoverState;
567545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
568545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
569545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_PRESSED:
570545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED(); // This should never happen in practice.
571545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
572545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
573545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case SCRBS_DISABLED:
574545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_INACTIVE);
575f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::DisabledState;
576545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
577545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
578545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    default:
579545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        CRASH();
580545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
581545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
582545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
583545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    drawControl(canvas, rect, ctype, cstate);
584545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
585545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
586f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebThemeEngineDRTWin::paintSpinButton(WebCanvas* canvas,
587f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                           int part,
588f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                           int state,
589f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                           int classicState,
590f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                           const WebRect& rect)
591967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{
592f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType;
593f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState;
594967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
595967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    if (part == SPNP_UP) {
596f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::UpArrowType;
597967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        switch (state) {
598967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        case UPS_NORMAL:
599967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT(classicState == DFCS_SCROLLUP);
600f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
601967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            break;
602967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        case UPS_DISABLED:
603967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT(classicState == (DFCS_SCROLLUP | DFCS_INACTIVE));
604f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
605967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            break;
606967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        case UPS_PRESSED:
607967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT(classicState == (DFCS_SCROLLUP | DFCS_PUSHED));
608f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
609967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            break;
610967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        case UPS_HOT:
611967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT(classicState == (DFCS_SCROLLUP | DFCS_HOT));
612f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HoverState;
613967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            break;
614967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        default:
615967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT_NOT_REACHED();
616967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        }
617967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    } else if (part == SPNP_DOWN) {
618f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::DownArrowType;
619967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        switch (state) {
620967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        case DNS_NORMAL:
621967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT(classicState == DFCS_SCROLLDOWN);
622f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
623967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            break;
624967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        case DNS_DISABLED:
625967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_INACTIVE));
626f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
627967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            break;
628967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        case DNS_PRESSED:
629967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_PUSHED));
630f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
631967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            break;
632967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        case DNS_HOT:
633967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_HOT));
634f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HoverState;
635967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            break;
636967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        default:
637967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch            ASSERT_NOT_REACHED();
638967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        }
639967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    } else
640967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        ASSERT_NOT_REACHED();
641967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    drawControl(canvas, rect, ctype, cstate);
642967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch}
643967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
644f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebThemeEngineDRTWin::paintTextField(WebCanvas* canvas,
645f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                          int part,
646f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                          int state,
647f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                          int classicState,
648f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                          const WebRect& rect,
649f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                          WebColor color,
650f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                          bool fillContentArea,
651f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                          bool drawEdges)
652545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
653f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType;
654f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState;
655545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
656545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    ASSERT(EP_EDITTEXT == part);
657f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    ctype = WebThemeControlDRTWin::TextFieldType;
658545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
659545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    switch (state) {
660545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ETS_NORMAL:
661545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == dfcsNormal);
662f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::NormalState;
663545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
664545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
665545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ETS_HOT:
666545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_HOT);
667f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::HotState;
668545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
669545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
670545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ETS_DISABLED:
671545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_INACTIVE);
672f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::DisabledState;
673545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
674545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
675545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ETS_SELECTED:
676545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == DFCS_PUSHED);
677f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::PressedState;
678545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
679545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
680545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ETS_FOCUSED:
681545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == dfcsNormal);
682f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::FocusedState;
683545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
684545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
685545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    case ETS_READONLY:
686545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == dfcsNormal);
687f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::ReadOnlyState;
688545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
689545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
690545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    default:
691545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED();
692545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        break;
693545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
694545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
695545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    drawTextField(canvas, rect, ctype, cstate, drawEdges, fillContentArea, color);
696545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
697545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
698f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebThemeEngineDRTWin::paintTrackbar(WebCanvas* canvas,
699f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                         int part,
700f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                         int state,
701f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                         int classicState,
702f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                         const WebRect& rect)
703545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
704f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType;
705f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState;
706545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
707545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    if (TKP_THUMBBOTTOM == part) {
708f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::HorizontalSliderThumbType;
709545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        switch (state) {
710545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case TUS_NORMAL:
711545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == dfcsNormal);
712f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::NormalState;
713545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
714545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
715545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case TUS_HOT:
716545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == DFCS_HOT);
717f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::HotState;
718545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
719545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
720545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case TUS_DISABLED:
721545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == DFCS_INACTIVE);
722f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::DisabledState;
723545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
724545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
725545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        case TUS_PRESSED:
726545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT(classicState == DFCS_PUSHED);
727f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            cstate = WebThemeControlDRTWin::PressedState;
728545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
729545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
730545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        default:
731545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            ASSERT_NOT_REACHED();
732545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            break;
733545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        }
734545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    } else if (TKP_TRACK == part) {
735f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ctype = WebThemeControlDRTWin::HorizontalSliderTrackType;
736545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(part == TUS_NORMAL);
737545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT(classicState == dfcsNormal);
738f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        cstate = WebThemeControlDRTWin::NormalState;
739545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    } else {
740545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ASSERT_NOT_REACHED();
741545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    }
742545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
743545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    drawControl(canvas, rect, ctype, cstate);
744545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
745545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
746545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
747f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebThemeEngineDRTWin::paintProgressBar(WebKit::WebCanvas* canvas,
748f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                            const WebKit::WebRect& barRect,
749f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                            const WebKit::WebRect& valueRect,
750f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                            bool determinate,
751f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                            double)
752545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
753f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::ProgressBarType;
754f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebThemeControlDRTWin::State cstate = determinate ? WebThemeControlDRTWin::NormalState
755f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                                                      : WebThemeControlDRTWin::IndeterminateState;
756545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    drawProgressBar(canvas, ctype, cstate, barRect, valueRect);
757545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
758545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
759