Index: content/child/webthemeengine_impl_win.cc |
diff --git a/content/child/webthemeengine_impl_win.cc b/content/child/webthemeengine_impl_win.cc |
deleted file mode 100644 |
index 562e0488c0fdeec6c489b484a70d03160821a83c..0000000000000000000000000000000000000000 |
--- a/content/child/webthemeengine_impl_win.cc |
+++ /dev/null |
@@ -1,1014 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "content/child/webthemeengine_impl_win.h" |
- |
-#include <vsstyle.h> // To convert to ui::NativeTheme::State |
- |
-#include "base/logging.h" |
-#include "skia/ext/platform_canvas.h" |
-#include "skia/ext/skia_utils_win.h" |
-#include "third_party/WebKit/public/platform/WebRect.h" |
-#include "ui/gfx/win/dpi.h" |
-#include "ui/native_theme/native_theme.h" |
- |
-using blink::WebCanvas; |
-using blink::WebColor; |
-using blink::WebRect; |
-using blink::WebSize; |
- |
-namespace content { |
- |
-static RECT WebRectToRECT(const WebRect& rect) { |
- RECT result; |
- result.left = rect.x; |
- result.top = rect.y; |
- result.right = rect.x + rect.width; |
- result.bottom = rect.y + rect.height; |
- return result; |
-} |
- |
-static ui::NativeTheme::State WebButtonStateToGfx( |
- int part, int state, ui::NativeTheme::ButtonExtraParams* extra) { |
- ui::NativeTheme::State gfx_state = ui::NativeTheme::kNormal; |
- // Native buttons have a different focus style. |
- extra->is_focused = false; |
- extra->has_border = false; |
- extra->background_color = ui::NativeTheme::instance()->GetSystemColor( |
- ui::NativeTheme::kColorId_ButtonBackgroundColor); |
- |
- if (part == BP_PUSHBUTTON) { |
- switch (state) { |
- case PBS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case PBS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case PBS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case PBS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case PBS_DEFAULTED: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = true; |
- break; |
- case PBS_DEFAULTED_ANIMATING: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = true; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- } |
- } else if (part == BP_RADIOBUTTON) { |
- switch (state) { |
- case RBS_UNCHECKEDNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case RBS_UNCHECKEDHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case RBS_UNCHECKEDPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case RBS_UNCHECKEDDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case RBS_CHECKEDNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = true; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case RBS_CHECKEDHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = true; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case RBS_CHECKEDPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = true; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case RBS_CHECKEDDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = true; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- } else if (part == BP_CHECKBOX) { |
- switch (state) { |
- case CBS_UNCHECKEDNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_UNCHECKEDHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_UNCHECKEDPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_UNCHECKEDDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_CHECKEDNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = true; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_CHECKEDHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = true; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_CHECKEDPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = true; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_CHECKEDDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = true; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_MIXEDNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = true; |
- extra->is_default = false; |
- break; |
- case CBS_MIXEDHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = false; |
- extra->indeterminate = true; |
- extra->is_default = false; |
- break; |
- case CBS_MIXEDPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = false; |
- extra->indeterminate = true; |
- extra->is_default = false; |
- break; |
- case CBS_MIXEDDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = false; |
- extra->indeterminate = true; |
- extra->is_default = false; |
- break; |
- case CBS_IMPLICITNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_IMPLICITHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_IMPLICITPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_IMPLICITDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_EXCLUDEDNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_EXCLUDEDHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_EXCLUDEDPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CBS_EXCLUDEDDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- } else if (part == BP_GROUPBOX) { |
- switch (state) { |
- case GBS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case GBS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- } else if (part == BP_COMMANDLINK) { |
- switch (state) { |
- case CMDLS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CMDLS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CMDLS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CMDLS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CMDLS_DEFAULTED: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = true; |
- break; |
- case CMDLS_DEFAULTED_ANIMATING: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = true; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- } else if (part == BP_COMMANDLINKGLYPH) { |
- switch (state) { |
- case CMDLGS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CMDLGS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CMDLGS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CMDLGS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = false; |
- break; |
- case CMDLGS_DEFAULTED: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->checked = false; |
- extra->indeterminate = false; |
- extra->is_default = true; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- } |
- return gfx_state; |
-} |
- |
-void WebThemeEngineImpl::paintButton( |
- WebCanvas* canvas, int part, int state, int classic_state, |
- const WebRect& rect) { |
- ui::NativeTheme::Part native_part = ui::NativeTheme::kPushButton; |
- switch (part) { |
- case BP_PUSHBUTTON: |
- native_part = ui::NativeTheme::kPushButton; |
- break; |
- case BP_CHECKBOX: |
- native_part = ui::NativeTheme::kCheckbox; |
- break; |
- case BP_RADIOBUTTON: |
- native_part = ui::NativeTheme::kRadio; |
- break; |
- default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
- } |
- ui::NativeTheme::ExtraParams extra; |
- ui::NativeTheme::State native_state = WebButtonStateToGfx(part, state, |
- &extra.button); |
- extra.button.classic_state = classic_state; |
- gfx::Rect gfx_rect(rect.x, rect.y, rect.width, rect.height); |
- ui::NativeTheme::instance()->Paint(canvas, native_part, |
- native_state, gfx_rect, extra); |
-} |
- |
-static ui::NativeTheme::State WebListMenuStateToGfx(int part, int state) { |
- ui::NativeTheme::State gfx_state = ui::NativeTheme::kNormal; |
- |
- switch (part) { |
- case CP_DROPDOWNBUTTON: |
- switch (state) { |
- case CBXS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- break; |
- case CBXS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- break; |
- case CBXS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- break; |
- case CBXS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- break; |
- default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
- } |
- return gfx_state; |
-} |
- |
-void WebThemeEngineImpl::paintMenuList( |
- WebCanvas* canvas, int part, int state, int classic_state, |
- const WebRect& rect) { |
- ui::NativeTheme::Part native_part = ui::NativeTheme::kMenuList; |
- switch (part) { |
- case CP_DROPDOWNBUTTON: |
- native_part = ui::NativeTheme::kMenuList; |
- break; |
- default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
- } |
- ui::NativeTheme::State native_state = WebListMenuStateToGfx(part, state); |
- gfx::Rect gfx_rect(rect.x, rect.y, rect.width, rect.height); |
- ui::NativeTheme::ExtraParams extra; |
- extra.menu_list.classic_state = classic_state; |
- ui::NativeTheme::instance()->Paint(canvas, native_part, |
- native_state, gfx_rect, extra); |
-} |
- |
-static ui::NativeTheme::State WebScrollbarArrowStateToGfx( |
- int state, ui::NativeTheme::Part* part, |
- ui::NativeTheme::ScrollbarArrowExtraParams* extra) { |
- ui::NativeTheme::State gfx_state = ui::NativeTheme::kNormal; |
- switch (state) { |
- case ABS_UPNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- *part = ui::NativeTheme::kScrollbarUpArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_UPHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- *part = ui::NativeTheme::kScrollbarUpArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_UPPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- *part = ui::NativeTheme::kScrollbarUpArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_UPDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- *part = ui::NativeTheme::kScrollbarUpArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_DOWNNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- *part = ui::NativeTheme::kScrollbarDownArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_DOWNHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- *part = ui::NativeTheme::kScrollbarDownArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_DOWNPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- *part = ui::NativeTheme::kScrollbarDownArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_DOWNDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- *part = ui::NativeTheme::kScrollbarDownArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_LEFTNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- *part = ui::NativeTheme::kScrollbarLeftArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_LEFTHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- *part = ui::NativeTheme::kScrollbarLeftArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_LEFTPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- *part = ui::NativeTheme::kScrollbarLeftArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_LEFTDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- *part = ui::NativeTheme::kScrollbarLeftArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_RIGHTNORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- *part = ui::NativeTheme::kScrollbarRightArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_RIGHTHOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- *part = ui::NativeTheme::kScrollbarRightArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_RIGHTPRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- *part = ui::NativeTheme::kScrollbarRightArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_RIGHTDISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- *part = ui::NativeTheme::kScrollbarRightArrow; |
- extra->is_hovering = false; |
- break; |
- case ABS_UPHOVER: |
- gfx_state = ui::NativeTheme::kHovered; |
- *part = ui::NativeTheme::kScrollbarUpArrow; |
- extra->is_hovering = true; |
- break; |
- case ABS_DOWNHOVER: |
- gfx_state = ui::NativeTheme::kHovered; |
- *part = ui::NativeTheme::kScrollbarDownArrow; |
- extra->is_hovering = true; |
- break; |
- case ABS_LEFTHOVER: |
- gfx_state = ui::NativeTheme::kHovered; |
- *part = ui::NativeTheme::kScrollbarLeftArrow; |
- extra->is_hovering = true; |
- break; |
- case ABS_RIGHTHOVER: |
- gfx_state = ui::NativeTheme::kHovered; |
- *part = ui::NativeTheme::kScrollbarRightArrow; |
- extra->is_hovering = true; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- return gfx_state; |
-} |
- |
-void WebThemeEngineImpl::paintScrollbarArrow( |
- WebCanvas* canvas, int state, int classic_state, const WebRect& rect) { |
- ui::NativeTheme::Part native_part; |
- ui::NativeTheme::ExtraParams extra; |
- ui::NativeTheme::State native_state = WebScrollbarArrowStateToGfx( |
- state, &native_part, &extra.scrollbar_arrow); |
- gfx::Rect gfx_rect(rect.x, rect.y, rect.width, rect.height); |
- ui::NativeTheme::instance()->Paint(canvas, native_part, |
- native_state, gfx_rect, extra); |
-} |
- |
-static ui::NativeTheme::State WebScrollbarThumbStateToGfx( |
- int state, ui::NativeTheme::ScrollbarThumbExtraParams* extra) { |
- ui::NativeTheme::State gfx_state = ui::NativeTheme::kNormal; |
- switch (state) { |
- case SCRBS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->is_hovering = false; |
- break; |
- case SCRBS_HOVER: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->is_hovering = true; |
- break; |
- case SCRBS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->is_hovering = false; |
- break; |
- case SCRBS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->is_hovering = false; |
- break; |
- case SCRBS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->is_hovering = false; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- return gfx_state; |
-} |
- |
-void WebThemeEngineImpl::paintScrollbarThumb( |
- WebCanvas* canvas, int part, int state, int classic_state, |
- const WebRect& rect) { |
- ui::NativeTheme::Part native_part; |
- if (part == SBP_THUMBBTNHORZ) { |
- native_part = ui::NativeTheme::kScrollbarHorizontalThumb; |
- } else if (part == SBP_THUMBBTNVERT) { |
- native_part = ui::NativeTheme::kScrollbarVerticalThumb; |
- } else if (part == SBP_GRIPPERHORZ) { |
- native_part = ui::NativeTheme::kScrollbarHorizontalGripper; |
- } else if (part == SBP_GRIPPERVERT) { |
- native_part = ui::NativeTheme::kScrollbarVerticalGripper; |
- } else { |
- NOTREACHED() << "Invalid part: " << part; |
- } |
- |
- ui::NativeTheme::ExtraParams extra; |
- ui::NativeTheme::State native_state = WebScrollbarThumbStateToGfx( |
- state, &extra.scrollbar_thumb); |
- |
- gfx::Rect gfx_rect(rect.x, rect.y, rect.width, rect.height); |
- ui::NativeTheme::instance()->Paint(canvas, native_part, |
- native_state, gfx_rect, extra); |
-} |
- |
-static ui::NativeTheme::State WebScrollbarTrackStateToGfx( |
- int part, int state, ui::NativeTheme::Part* gfx_part, |
- ui::NativeTheme::ScrollbarTrackExtraParams* extra) { |
- ui::NativeTheme::State gfx_state = ui::NativeTheme::kNormal; |
- switch (part) { |
- case SBP_LOWERTRACKHORZ: |
- switch (state) { |
- case SCRBS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- *gfx_part = ui::NativeTheme::kScrollbarHorizontalTrack; |
- extra->is_upper = false; |
- break; |
- case SCRBS_HOVER: |
- case SCRBS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- *gfx_part = ui::NativeTheme::kScrollbarHorizontalTrack; |
- extra->is_upper = false; |
- break; |
- case SCRBS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- *gfx_part = ui::NativeTheme::kScrollbarHorizontalTrack; |
- extra->is_upper = false; |
- break; |
- case SCRBS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- *gfx_part = ui::NativeTheme::kScrollbarHorizontalTrack; |
- extra->is_upper = false; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- break; |
- case SBP_UPPERTRACKHORZ: |
- switch (state) { |
- case SCRBS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- *gfx_part = ui::NativeTheme::kScrollbarHorizontalTrack; |
- extra->is_upper = true; |
- break; |
- case SCRBS_HOVER: |
- case SCRBS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- *gfx_part = ui::NativeTheme::kScrollbarHorizontalTrack; |
- extra->is_upper = true; |
- break; |
- case SCRBS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- *gfx_part = ui::NativeTheme::kScrollbarHorizontalTrack; |
- extra->is_upper = true; |
- break; |
- case SCRBS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- *gfx_part = ui::NativeTheme::kScrollbarHorizontalTrack; |
- extra->is_upper = true; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- break; |
- case SBP_LOWERTRACKVERT: |
- switch (state) { |
- case SCRBS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- *gfx_part = ui::NativeTheme::kScrollbarVerticalTrack; |
- extra->is_upper = false; |
- break; |
- case SCRBS_HOVER: |
- case SCRBS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- *gfx_part = ui::NativeTheme::kScrollbarVerticalTrack; |
- extra->is_upper = false; |
- break; |
- case SCRBS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- *gfx_part = ui::NativeTheme::kScrollbarVerticalTrack; |
- extra->is_upper = false; |
- break; |
- case SCRBS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- *gfx_part = ui::NativeTheme::kScrollbarVerticalTrack; |
- extra->is_upper = false; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- break; |
- case SBP_UPPERTRACKVERT: |
- switch (state) { |
- case SCRBS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- *gfx_part = ui::NativeTheme::kScrollbarVerticalTrack; |
- extra->is_upper = true; |
- break; |
- case SCRBS_HOVER: |
- case SCRBS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- *gfx_part = ui::NativeTheme::kScrollbarVerticalTrack; |
- extra->is_upper = true; |
- break; |
- case SCRBS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- *gfx_part = ui::NativeTheme::kScrollbarVerticalTrack; |
- extra->is_upper = true; |
- break; |
- case SCRBS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- *gfx_part = ui::NativeTheme::kScrollbarVerticalTrack; |
- extra->is_upper = true; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- break; |
- default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
- } |
- return gfx_state; |
-} |
- |
-void WebThemeEngineImpl::paintScrollbarTrack( |
- WebCanvas* canvas, int part, int state, int classic_state, |
- const WebRect& rect, const WebRect& align_rect) { |
- ui::NativeTheme::Part native_part; |
- ui::NativeTheme::ExtraParams extra; |
- ui::NativeTheme::State native_state = WebScrollbarTrackStateToGfx( |
- part, state, &native_part, &extra.scrollbar_track); |
- extra.scrollbar_track.classic_state = classic_state; |
- extra.scrollbar_track.track_x = align_rect.x; |
- extra.scrollbar_track.track_y = align_rect.y; |
- extra.scrollbar_track.track_width = align_rect.width; |
- extra.scrollbar_track.track_height = align_rect.height; |
- |
- gfx::Rect gfx_rect(rect.x, rect.y, rect.width, rect.height); |
- ui::NativeTheme::instance()->Paint(canvas, native_part, |
- native_state, gfx_rect, extra); |
-} |
- |
-static ui::NativeTheme::State WebSpinButtonStateToGfx( |
- int part, int state, ui::NativeTheme::InnerSpinButtonExtraParams* extra) { |
- ui::NativeTheme::State gfx_state = ui::NativeTheme::kNormal; |
- switch (part) { |
- case SPNP_UP: |
- switch (state) { |
- case UPS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->spin_up = true; |
- extra->read_only = false; |
- break; |
- case UPS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->spin_up = true; |
- extra->read_only = false; |
- break; |
- case UPS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->spin_up = true; |
- extra->read_only = false; |
- break; |
- case UPS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->spin_up = true; |
- extra->read_only = false; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- break; |
- case SPNP_DOWN: |
- switch (state) { |
- case DNS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->spin_up = false; |
- extra->read_only = false; |
- break; |
- case DNS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->spin_up = false; |
- extra->read_only = false; |
- break; |
- case DNS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->spin_up = false; |
- extra->read_only = false; |
- break; |
- case DNS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->spin_up = false; |
- extra->read_only = false; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- break; |
- default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
- } |
- return gfx_state; |
-} |
- |
-void WebThemeEngineImpl::paintSpinButton( |
- WebCanvas* canvas, int part, int state, int classic_state, |
- const WebRect& rect) { |
- ui::NativeTheme::ExtraParams extra; |
- ui::NativeTheme::State native_state = WebSpinButtonStateToGfx( |
- part, state, &extra.inner_spin); |
- extra.inner_spin.classic_state = classic_state; |
- gfx::Rect gfx_rect(rect.x, rect.y, rect.width, rect.height); |
- ui::NativeTheme::instance()->Paint(canvas, |
- ui::NativeTheme::kInnerSpinButton, |
- native_state, |
- gfx_rect, |
- extra); |
-} |
- |
-static ui::NativeTheme::State WebTextFieldStateToGfx( |
- int part, int state, ui::NativeTheme::TextFieldExtraParams* extra) { |
- ui::NativeTheme::State gfx_state = ui::NativeTheme::kNormal; |
- switch (part) { |
- case EP_EDITTEXT: |
- switch (state) { |
- case ETS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->is_read_only = false; |
- extra->is_focused = false; |
- break; |
- case ETS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- extra->is_read_only = false; |
- extra->is_focused = false; |
- break; |
- case ETS_SELECTED: |
- gfx_state = ui::NativeTheme::kPressed; |
- extra->is_read_only = false; |
- extra->is_focused = false; |
- break; |
- case ETS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- extra->is_read_only = false; |
- extra->is_focused = false; |
- break; |
- case ETS_FOCUSED: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->is_read_only = false; |
- extra->is_focused = true; |
- break; |
- case ETS_READONLY: |
- gfx_state = ui::NativeTheme::kNormal; |
- extra->is_read_only = true; |
- extra->is_focused = false; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- break; |
- default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
- } |
- return gfx_state; |
-} |
- |
-void WebThemeEngineImpl::paintTextField( |
- WebCanvas* canvas, int part, int state, int classic_state, |
- const WebRect& rect, WebColor color, bool fill_content_area, |
- bool draw_edges) { |
- ui::NativeTheme::ExtraParams extra; |
- ui::NativeTheme::State native_state = WebTextFieldStateToGfx( |
- part, state, &extra.text_field); |
- extra.text_field.fill_content_area = fill_content_area; |
- extra.text_field.draw_edges = draw_edges; |
- extra.text_field.background_color = color; |
- extra.text_field.classic_state = classic_state; |
- gfx::Rect gfx_rect(rect.x, rect.y, rect.width, rect.height); |
- |
- ui::NativeTheme::instance()->Paint(canvas, |
- ui::NativeTheme::kTextField, native_state, gfx_rect, extra); |
-} |
- |
-static ui::NativeTheme::State WebTrackbarStateToGfx( |
- int part, |
- int state, |
- ui::NativeTheme::TrackbarExtraParams* extra) { |
- ui::NativeTheme::State gfx_state = ui::NativeTheme::kNormal; |
- switch (state) { |
- case TUS_NORMAL: |
- gfx_state = ui::NativeTheme::kNormal; |
- break; |
- case TUS_HOT: |
- gfx_state = ui::NativeTheme::kHovered; |
- break; |
- case TUS_PRESSED: |
- gfx_state = ui::NativeTheme::kPressed; |
- break; |
- case TUS_DISABLED: |
- gfx_state = ui::NativeTheme::kDisabled; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
- } |
- |
- switch (part) { |
- case TKP_TRACK: |
- case TKP_THUMBBOTTOM: |
- extra->vertical = false; |
- break; |
- case TKP_TRACKVERT: |
- case TKP_THUMBVERT: |
- extra->vertical = true; |
- break; |
- default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
- } |
- |
- return gfx_state; |
-} |
- |
-void WebThemeEngineImpl::paintTrackbar( |
- WebCanvas* canvas, int part, int state, int classic_state, |
- const WebRect& rect) { |
- ui::NativeTheme::Part native_part = ui::NativeTheme::kTrackbarTrack; |
- switch (part) { |
- case TKP_TRACK: |
- case TKP_TRACKVERT: |
- native_part = ui::NativeTheme::kTrackbarTrack; |
- break; |
- case TKP_THUMBBOTTOM: |
- case TKP_THUMBVERT: |
- native_part = ui::NativeTheme::kTrackbarThumb; |
- break; |
- default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
- } |
- |
- ui::NativeTheme::ExtraParams extra; |
- ui::NativeTheme::State native_state = WebTrackbarStateToGfx(part, state, |
- &extra.trackbar); |
- gfx::Rect gfx_rect(rect.x, rect.y, rect.width, rect.height); |
- extra.trackbar.classic_state = classic_state; |
- ui::NativeTheme::instance()->Paint(canvas, native_part, |
- native_state, gfx_rect, extra); |
-} |
- |
-void WebThemeEngineImpl::paintProgressBar( |
- WebCanvas* canvas, const WebRect& barRect, const WebRect& valueRect, |
- bool determinate, double animatedSeconds) |
-{ |
- gfx::Rect gfx_rect(barRect.x, barRect.y, barRect.width, barRect.height); |
- ui::NativeTheme::ExtraParams extra; |
- extra.progress_bar.animated_seconds = animatedSeconds; |
- extra.progress_bar.determinate = determinate; |
- extra.progress_bar.value_rect_x = valueRect.x; |
- extra.progress_bar.value_rect_y = valueRect.y; |
- extra.progress_bar.value_rect_width = valueRect.width; |
- extra.progress_bar.value_rect_height = valueRect.height; |
- ui::NativeTheme::instance()->Paint(canvas, ui::NativeTheme::kProgressBar, |
- ui::NativeTheme::kNormal, gfx_rect, |
- extra); |
-} |
- |
-WebSize WebThemeEngineImpl::getSize(int part) { |
- switch (part) { |
- case SBP_ARROWBTN: { |
- gfx::Size size = ui::NativeTheme::instance()->GetPartSize( |
- ui::NativeTheme::kScrollbarUpArrow, |
- ui::NativeTheme::kNormal, |
- ui::NativeTheme::ExtraParams()); |
- // GetPartSize returns a size of (0, 0) when not using a themed style |
- // (i.e. Windows Classic). Returning a non-zero size in this context |
- // creates repaint conflicts, particularly in the window titlebar area |
- // which significantly degrades performance. Fallback to using a system |
- // metric if required. |
- if (size.width() == 0) { |
- int width = static_cast<int>(GetSystemMetrics(SM_CXVSCROLL) / |
- gfx::win::GetDeviceScaleFactor()); |
- size = gfx::Size(width, width); |
- } |
- return WebSize(size.width(), size.height()); |
- } |
- default: |
- NOTREACHED() << "Unhandled part: " << part; |
- } |
- return WebSize(); |
-} |
- |
-} // namespace content |