| /* |
| * Copyright (C) 2010 Google Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following disclaimer |
| * in the documentation and/or other materials provided with the |
| * distribution. |
| * * Neither the name of Google Inc. nor the names of its |
| * contributors may be used to endorse or promote products derived from |
| * this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #include "config.h" |
| #include "WebThemeEngineDRTWin.h" |
| |
| #include "WebRect.h" |
| #include "WebThemeControlDRTWin.h" |
| #include "third_party/skia/include/core/SkRect.h" |
| |
| // Although all this code is generic, we include these headers |
| // to pull in the Windows #defines for the parts and states of |
| // the controls. |
| #include <vsstyle.h> |
| #include <windows.h> |
| |
| #include <wtf/Assertions.h> |
| |
| using namespace WebKit; |
| |
| // We define this for clarity, although there really should be a DFCS_NORMAL in winuser.h. |
| static const int dfcsNormal = 0x0000; |
| |
| static SkIRect webRectToSkIRect(const WebRect& webRect) |
| { |
| SkIRect irect; |
| irect.set(webRect.x, webRect.y, webRect.x + webRect.width, webRect.y + webRect.height); |
| return irect; |
| } |
| |
| static void drawControl(WebCanvas* canvas, |
| const WebRect& rect, |
| WebThemeControlDRTWin::Type ctype, |
| WebThemeControlDRTWin::State cstate) |
| { |
| WebThemeControlDRTWin control(canvas, webRectToSkIRect(rect), ctype, cstate); |
| control.draw(); |
| } |
| |
| static void drawTextField(WebCanvas* canvas, |
| const WebRect& rect, |
| WebThemeControlDRTWin::Type ctype, |
| WebThemeControlDRTWin::State cstate, |
| bool drawEdges, |
| bool fillContentArea, |
| WebColor color) |
| { |
| WebThemeControlDRTWin control(canvas, webRectToSkIRect(rect), ctype, cstate); |
| control.drawTextField(drawEdges, fillContentArea, color); |
| } |
| |
| static void drawProgressBar(WebCanvas* canvas, |
| WebThemeControlDRTWin::Type ctype, |
| WebThemeControlDRTWin::State cstate, |
| const WebRect& barRect, |
| const WebRect& fillRect) |
| { |
| WebThemeControlDRTWin control(canvas, webRectToSkIRect(barRect), ctype, cstate); |
| control.drawProgressBar(webRectToSkIRect(fillRect)); |
| } |
| |
| // WebThemeEngineDRTWin |
| |
| void WebThemeEngineDRTWin::paintButton(WebCanvas* canvas, |
| int part, |
| int state, |
| int classicState, |
| const WebRect& rect) |
| { |
| WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; |
| WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; |
| |
| if (part == BP_CHECKBOX) { |
| switch (state) { |
| case CBS_UNCHECKEDNORMAL: |
| ASSERT(classicState == dfcsNormal); |
| ctype = WebThemeControlDRTWin::UncheckedBoxType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case CBS_UNCHECKEDHOT: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::UncheckedBoxType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case CBS_UNCHECKEDPRESSED: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_PUSHED)); |
| ctype = WebThemeControlDRTWin::UncheckedBoxType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case CBS_UNCHECKEDDISABLED: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::UncheckedBoxType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| case CBS_CHECKEDNORMAL: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED)); |
| ctype = WebThemeControlDRTWin::CheckedBoxType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case CBS_CHECKEDHOT: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::CheckedBoxType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case CBS_CHECKEDPRESSED: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_PUSHED)); |
| ctype = WebThemeControlDRTWin::CheckedBoxType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case CBS_CHECKEDDISABLED: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::CheckedBoxType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| case CBS_MIXEDNORMAL: |
| // Classic theme can't represent mixed state checkbox. We assume |
| // it's equivalent to unchecked. |
| ASSERT(classicState == DFCS_BUTTONCHECK); |
| ctype = WebThemeControlDRTWin::IndeterminateCheckboxType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case CBS_MIXEDHOT: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::IndeterminateCheckboxType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case CBS_MIXEDPRESSED: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_PUSHED)); |
| ctype = WebThemeControlDRTWin::IndeterminateCheckboxType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case CBS_MIXEDDISABLED: |
| ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::IndeterminateCheckboxType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| default: |
| ASSERT_NOT_REACHED(); |
| break; |
| } |
| } else if (BP_RADIOBUTTON == part) { |
| switch (state) { |
| case RBS_UNCHECKEDNORMAL: |
| ASSERT(classicState == DFCS_BUTTONRADIO); |
| ctype = WebThemeControlDRTWin::UncheckedRadioType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case RBS_UNCHECKEDHOT: |
| ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::UncheckedRadioType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case RBS_UNCHECKEDPRESSED: |
| ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_PUSHED)); |
| ctype = WebThemeControlDRTWin::UncheckedRadioType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case RBS_UNCHECKEDDISABLED: |
| ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::UncheckedRadioType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| case RBS_CHECKEDNORMAL: |
| ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED)); |
| ctype = WebThemeControlDRTWin::CheckedRadioType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case RBS_CHECKEDHOT: |
| ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::CheckedRadioType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case RBS_CHECKEDPRESSED: |
| ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_PUSHED)); |
| ctype = WebThemeControlDRTWin::CheckedRadioType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case RBS_CHECKEDDISABLED: |
| ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::CheckedRadioType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| default: |
| ASSERT_NOT_REACHED(); |
| break; |
| } |
| } else if (BP_PUSHBUTTON == part) { |
| switch (state) { |
| case PBS_NORMAL: |
| ASSERT(classicState == DFCS_BUTTONPUSH); |
| ctype = WebThemeControlDRTWin::PushButtonType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case PBS_HOT: |
| ASSERT(classicState == (DFCS_BUTTONPUSH | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::PushButtonType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case PBS_PRESSED: |
| ASSERT(classicState == (DFCS_BUTTONPUSH | DFCS_PUSHED)); |
| ctype = WebThemeControlDRTWin::PushButtonType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case PBS_DISABLED: |
| ASSERT(classicState == (DFCS_BUTTONPUSH | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::PushButtonType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| case PBS_DEFAULTED: |
| ASSERT(classicState == DFCS_BUTTONPUSH); |
| ctype = WebThemeControlDRTWin::PushButtonType; |
| cstate = WebThemeControlDRTWin::FocusedState; |
| break; |
| |
| default: |
| ASSERT_NOT_REACHED(); |
| break; |
| } |
| } else { |
| ASSERT_NOT_REACHED(); |
| } |
| |
| drawControl(canvas, rect, ctype, cstate); |
| } |
| |
| |
| void WebThemeEngineDRTWin::paintMenuList(WebCanvas* canvas, |
| int part, |
| int state, |
| int classicState, |
| const WebRect& rect) |
| { |
| WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; |
| WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; |
| |
| if (CP_DROPDOWNBUTTON == part) { |
| ctype = WebThemeControlDRTWin::DropDownButtonType; |
| switch (state) { |
| case CBXS_NORMAL: |
| ASSERT(classicState == DFCS_MENUARROW); |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case CBXS_HOT: |
| ASSERT(classicState == (DFCS_MENUARROW | DFCS_HOT)); |
| cstate = WebThemeControlDRTWin::HoverState; |
| break; |
| |
| case CBXS_PRESSED: |
| ASSERT(classicState == (DFCS_MENUARROW | DFCS_PUSHED)); |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case CBXS_DISABLED: |
| ASSERT(classicState == (DFCS_MENUARROW | DFCS_INACTIVE)); |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| default: |
| CRASH(); |
| break; |
| } |
| } else { |
| CRASH(); |
| } |
| |
| drawControl(canvas, rect, ctype, cstate); |
| } |
| |
| void WebThemeEngineDRTWin::paintScrollbarArrow(WebCanvas* canvas, |
| int state, |
| int classicState, |
| const WebRect& rect) |
| { |
| WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; |
| WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; |
| |
| switch (state) { |
| case ABS_UPNORMAL: |
| ASSERT(classicState == DFCS_SCROLLUP); |
| ctype = WebThemeControlDRTWin::UpArrowType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case ABS_DOWNNORMAL: |
| ASSERT(classicState == DFCS_SCROLLDOWN); |
| ctype = WebThemeControlDRTWin::DownArrowType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case ABS_LEFTNORMAL: |
| ASSERT(classicState == DFCS_SCROLLLEFT); |
| ctype = WebThemeControlDRTWin::LeftArrowType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case ABS_RIGHTNORMAL: |
| ASSERT(classicState == DFCS_SCROLLRIGHT); |
| ctype = WebThemeControlDRTWin::RightArrowType; |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case ABS_UPHOT: |
| ASSERT(classicState == (DFCS_SCROLLUP | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::UpArrowType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case ABS_DOWNHOT: |
| ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::DownArrowType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case ABS_LEFTHOT: |
| ASSERT(classicState == (DFCS_SCROLLLEFT | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::LeftArrowType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case ABS_RIGHTHOT: |
| ASSERT(classicState == (DFCS_SCROLLRIGHT | DFCS_HOT)); |
| ctype = WebThemeControlDRTWin::RightArrowType; |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case ABS_UPHOVER: |
| ASSERT(classicState == DFCS_SCROLLUP); |
| ctype = WebThemeControlDRTWin::UpArrowType; |
| cstate = WebThemeControlDRTWin::HoverState; |
| break; |
| |
| case ABS_DOWNHOVER: |
| ASSERT(classicState == DFCS_SCROLLDOWN); |
| ctype = WebThemeControlDRTWin::DownArrowType; |
| cstate = WebThemeControlDRTWin::HoverState; |
| break; |
| |
| case ABS_LEFTHOVER: |
| ASSERT(classicState == DFCS_SCROLLLEFT); |
| ctype = WebThemeControlDRTWin::LeftArrowType; |
| cstate = WebThemeControlDRTWin::HoverState; |
| break; |
| |
| case ABS_RIGHTHOVER: |
| ASSERT(classicState == DFCS_SCROLLRIGHT); |
| ctype = WebThemeControlDRTWin::RightArrowType; |
| cstate = WebThemeControlDRTWin::HoverState; |
| break; |
| |
| case ABS_UPPRESSED: |
| ASSERT(classicState == (DFCS_SCROLLUP | DFCS_PUSHED | DFCS_FLAT)); |
| ctype = WebThemeControlDRTWin::UpArrowType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case ABS_DOWNPRESSED: |
| ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_PUSHED | DFCS_FLAT)); |
| ctype = WebThemeControlDRTWin::DownArrowType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case ABS_LEFTPRESSED: |
| ASSERT(classicState == (DFCS_SCROLLLEFT | DFCS_PUSHED | DFCS_FLAT)); |
| ctype = WebThemeControlDRTWin::LeftArrowType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case ABS_RIGHTPRESSED: |
| ASSERT(classicState == (DFCS_SCROLLRIGHT | DFCS_PUSHED | DFCS_FLAT)); |
| ctype = WebThemeControlDRTWin::RightArrowType; |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case ABS_UPDISABLED: |
| ASSERT(classicState == (DFCS_SCROLLUP | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::UpArrowType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| case ABS_DOWNDISABLED: |
| ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::DownArrowType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| case ABS_LEFTDISABLED: |
| ASSERT(classicState == (DFCS_SCROLLLEFT | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::LeftArrowType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| case ABS_RIGHTDISABLED: |
| ASSERT(classicState == (DFCS_SCROLLRIGHT | DFCS_INACTIVE)); |
| ctype = WebThemeControlDRTWin::RightArrowType; |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| default: |
| ASSERT_NOT_REACHED(); |
| break; |
| } |
| |
| drawControl(canvas, rect, ctype, cstate); |
| } |
| |
| void WebThemeEngineDRTWin::paintScrollbarThumb(WebCanvas* canvas, |
| int part, |
| int state, |
| int classicState, |
| const WebRect& rect) |
| { |
| WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; |
| WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; |
| |
| switch (part) { |
| case SBP_THUMBBTNHORZ: |
| ctype = WebThemeControlDRTWin::HorizontalScrollThumbType; |
| break; |
| |
| case SBP_THUMBBTNVERT: |
| ctype = WebThemeControlDRTWin::VerticalScrollThumbType; |
| break; |
| |
| case SBP_GRIPPERHORZ: |
| ctype = WebThemeControlDRTWin::HorizontalScrollGripType; |
| break; |
| |
| case SBP_GRIPPERVERT: |
| ctype = WebThemeControlDRTWin::VerticalScrollGripType; |
| break; |
| |
| default: |
| ASSERT_NOT_REACHED(); |
| break; |
| } |
| |
| switch (state) { |
| case SCRBS_NORMAL: |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case SCRBS_HOT: |
| ASSERT(classicState == DFCS_HOT); |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case SCRBS_HOVER: |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::HoverState; |
| break; |
| |
| case SCRBS_PRESSED: |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case SCRBS_DISABLED: |
| ASSERT_NOT_REACHED(); // This should never happen in practice. |
| break; |
| |
| default: |
| ASSERT_NOT_REACHED(); |
| break; |
| } |
| |
| drawControl(canvas, rect, ctype, cstate); |
| } |
| |
| void WebThemeEngineDRTWin::paintScrollbarTrack(WebCanvas* canvas, |
| int part, |
| int state, |
| int classicState, |
| const WebRect& rect, |
| const WebRect& alignRect) |
| { |
| WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; |
| WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; |
| |
| switch (part) { |
| case SBP_UPPERTRACKHORZ: |
| ctype = WebThemeControlDRTWin::HorizontalScrollTrackBackType; |
| break; |
| |
| case SBP_LOWERTRACKHORZ: |
| ctype = WebThemeControlDRTWin::HorizontalScrollTrackForwardType; |
| break; |
| |
| case SBP_UPPERTRACKVERT: |
| ctype = WebThemeControlDRTWin::VerticalScrollTrackBackType; |
| break; |
| |
| case SBP_LOWERTRACKVERT: |
| ctype = WebThemeControlDRTWin::VerticalScrollTrackForwardType; |
| break; |
| |
| default: |
| ASSERT_NOT_REACHED(); |
| break; |
| } |
| |
| switch (state) { |
| case SCRBS_NORMAL: |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case SCRBS_HOT: |
| ASSERT_NOT_REACHED(); // This should never happen in practice. |
| break; |
| |
| case SCRBS_HOVER: |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::HoverState; |
| break; |
| |
| case SCRBS_PRESSED: |
| ASSERT_NOT_REACHED(); // This should never happen in practice. |
| break; |
| |
| case SCRBS_DISABLED: |
| ASSERT(classicState == DFCS_INACTIVE); |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| default: |
| CRASH(); |
| break; |
| } |
| |
| drawControl(canvas, rect, ctype, cstate); |
| } |
| |
| void WebThemeEngineDRTWin::paintSpinButton(WebCanvas* canvas, |
| int part, |
| int state, |
| int classicState, |
| const WebRect& rect) |
| { |
| WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; |
| WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; |
| |
| if (part == SPNP_UP) { |
| ctype = WebThemeControlDRTWin::UpArrowType; |
| switch (state) { |
| case UPS_NORMAL: |
| ASSERT(classicState == DFCS_SCROLLUP); |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| case UPS_DISABLED: |
| ASSERT(classicState == (DFCS_SCROLLUP | DFCS_INACTIVE)); |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| case UPS_PRESSED: |
| ASSERT(classicState == (DFCS_SCROLLUP | DFCS_PUSHED)); |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| case UPS_HOT: |
| ASSERT(classicState == (DFCS_SCROLLUP | DFCS_HOT)); |
| cstate = WebThemeControlDRTWin::HoverState; |
| break; |
| default: |
| ASSERT_NOT_REACHED(); |
| } |
| } else if (part == SPNP_DOWN) { |
| ctype = WebThemeControlDRTWin::DownArrowType; |
| switch (state) { |
| case DNS_NORMAL: |
| ASSERT(classicState == DFCS_SCROLLDOWN); |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| case DNS_DISABLED: |
| ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_INACTIVE)); |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| case DNS_PRESSED: |
| ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_PUSHED)); |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| case DNS_HOT: |
| ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_HOT)); |
| cstate = WebThemeControlDRTWin::HoverState; |
| break; |
| default: |
| ASSERT_NOT_REACHED(); |
| } |
| } else |
| ASSERT_NOT_REACHED(); |
| drawControl(canvas, rect, ctype, cstate); |
| } |
| |
| void WebThemeEngineDRTWin::paintTextField(WebCanvas* canvas, |
| int part, |
| int state, |
| int classicState, |
| const WebRect& rect, |
| WebColor color, |
| bool fillContentArea, |
| bool drawEdges) |
| { |
| WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; |
| WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; |
| |
| ASSERT(EP_EDITTEXT == part); |
| ctype = WebThemeControlDRTWin::TextFieldType; |
| |
| switch (state) { |
| case ETS_NORMAL: |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case ETS_HOT: |
| ASSERT(classicState == DFCS_HOT); |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case ETS_DISABLED: |
| ASSERT(classicState == DFCS_INACTIVE); |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| case ETS_SELECTED: |
| ASSERT(classicState == DFCS_PUSHED); |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| case ETS_FOCUSED: |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::FocusedState; |
| break; |
| |
| case ETS_READONLY: |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::ReadOnlyState; |
| break; |
| |
| default: |
| ASSERT_NOT_REACHED(); |
| break; |
| } |
| |
| drawTextField(canvas, rect, ctype, cstate, drawEdges, fillContentArea, color); |
| } |
| |
| void WebThemeEngineDRTWin::paintTrackbar(WebCanvas* canvas, |
| int part, |
| int state, |
| int classicState, |
| const WebRect& rect) |
| { |
| WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; |
| WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; |
| |
| if (TKP_THUMBBOTTOM == part) { |
| ctype = WebThemeControlDRTWin::HorizontalSliderThumbType; |
| switch (state) { |
| case TUS_NORMAL: |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::NormalState; |
| break; |
| |
| case TUS_HOT: |
| ASSERT(classicState == DFCS_HOT); |
| cstate = WebThemeControlDRTWin::HotState; |
| break; |
| |
| case TUS_DISABLED: |
| ASSERT(classicState == DFCS_INACTIVE); |
| cstate = WebThemeControlDRTWin::DisabledState; |
| break; |
| |
| case TUS_PRESSED: |
| ASSERT(classicState == DFCS_PUSHED); |
| cstate = WebThemeControlDRTWin::PressedState; |
| break; |
| |
| default: |
| ASSERT_NOT_REACHED(); |
| break; |
| } |
| } else if (TKP_TRACK == part) { |
| ctype = WebThemeControlDRTWin::HorizontalSliderTrackType; |
| ASSERT(part == TUS_NORMAL); |
| ASSERT(classicState == dfcsNormal); |
| cstate = WebThemeControlDRTWin::NormalState; |
| } else { |
| ASSERT_NOT_REACHED(); |
| } |
| |
| drawControl(canvas, rect, ctype, cstate); |
| } |
| |
| |
| void WebThemeEngineDRTWin::paintProgressBar(WebKit::WebCanvas* canvas, |
| const WebKit::WebRect& barRect, |
| const WebKit::WebRect& valueRect, |
| bool determinate, |
| double) |
| { |
| WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::ProgressBarType; |
| WebThemeControlDRTWin::State cstate = determinate ? WebThemeControlDRTWin::NormalState |
| : WebThemeControlDRTWin::IndeterminateState; |
| drawProgressBar(canvas, ctype, cstate, barRect, valueRect); |
| } |
| |