diff options
author | rogerta@chromium.org <rogerta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-27 20:56:50 +0000 |
---|---|---|
committer | rogerta@chromium.org <rogerta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-27 20:56:50 +0000 |
commit | cf7d03ddffba3982b2e724291650a48912a3532e (patch) | |
tree | e45f93115dec1d09d0ce0e34c729d50e00c36a69 /ui/gfx/native_theme_win.cc | |
parent | 77fd0ef209269683ccaed9ff80330df3f55ec267 (diff) | |
download | chromium_src-cf7d03ddffba3982b2e724291650a48912a3532e.zip chromium_src-cf7d03ddffba3982b2e724291650a48912a3532e.tar.gz chromium_src-cf7d03ddffba3982b2e724291650a48912a3532e.tar.bz2 |
Fix checkbox in windows uninstaller.
BUG=84791
TEST=Test the checkbox in the uninstaller as mentioned in the bug, but also
all checkboxes in chrome too.
Review URL: http://codereview.chromium.org/7196002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90640 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/gfx/native_theme_win.cc')
-rw-r--r-- | ui/gfx/native_theme_win.cc | 68 |
1 files changed, 60 insertions, 8 deletions
diff --git a/ui/gfx/native_theme_win.cc b/ui/gfx/native_theme_win.cc index b0f8a47..29e1faf 100644 --- a/ui/gfx/native_theme_win.cc +++ b/ui/gfx/native_theme_win.cc @@ -126,7 +126,26 @@ gfx::Size NativeThemeWin::GetPartSize(Part part, NULL, TS_TRUE, &size); ReleaseDC(NULL, hdc); - return SUCCEEDED(hr) ? Size(size.cx, size.cy) : Size(); + if (FAILED(hr)) { + // TODO(rogerta): For now, we need to support radio buttons and checkboxes + // when theming is not enabled. Support for other parts can be added + // if/when needed. + switch (part) { + case kCheckbox: + case kRadio: + // TODO(rogerta): I was not able to find any API to get the default + // size of these controls, so determined these values empirically. + size.cx = 13; + size.cy = 13; + break; + default: + size.cx = 0; + size.cy = 0; + break; + } + } + + return Size(size.cx, size.cy); } void NativeThemeWin::PaintToNonPlatformCanvas(SkCanvas* canvas, @@ -497,8 +516,7 @@ HRESULT NativeThemeWin::PaintPushButton(HDC hdc, } RECT rect_win = rect.ToRECT(); - return PaintButton(hdc, BP_PUSHBUTTON, state_id, extra.classic_state, - &rect_win); + return PaintButton(hdc, state, extra, BP_PUSHBUTTON, state_id, &rect_win); } HRESULT NativeThemeWin::PaintRadioButton(HDC hdc, @@ -526,8 +544,7 @@ HRESULT NativeThemeWin::PaintRadioButton(HDC hdc, } RECT rect_win = rect.ToRECT(); - return PaintButton(hdc, BP_RADIOBUTTON, state_id, extra.classic_state, - &rect_win); + return PaintButton(hdc, state, extra, BP_RADIOBUTTON, state_id, &rect_win); } HRESULT NativeThemeWin::PaintCheckbox(HDC hdc, @@ -563,19 +580,54 @@ HRESULT NativeThemeWin::PaintCheckbox(HDC hdc, } RECT rect_win = rect.ToRECT(); - return PaintButton(hdc, BP_CHECKBOX, state_id, extra.classic_state, - &rect_win); + return PaintButton(hdc, state, extra, BP_CHECKBOX, state_id, &rect_win); } HRESULT NativeThemeWin::PaintButton(HDC hdc, + State state, + const ButtonExtraParams& extra, int part_id, int state_id, - int classic_state, RECT* rect) const { HANDLE handle = GetThemeHandle(BUTTON); if (handle && draw_theme_) return draw_theme_(handle, hdc, part_id, state_id, rect, NULL); + // Adjust classic_state based on part, state, and extras. + int classic_state = extra.classic_state; + switch(part_id) { + case BP_CHECKBOX: + classic_state |= DFCS_BUTTONCHECK; + break; + case BP_RADIOBUTTON: + classic_state |= DFCS_BUTTONRADIO; + break; + case BP_PUSHBUTTON: + classic_state |= DFCS_BUTTONPUSH; + break; + default: + NOTREACHED() << "Unknown part_id: " << part_id; + break; + } + + switch(state) { + case kDisabled: + classic_state |= DFCS_INACTIVE; + break; + case kPressed: + classic_state |= DFCS_PUSHED; + break; + case kNormal: + case kHovered: + break; + default: + NOTREACHED() << "Unknown state: " << state; + break; + } + + if (extra.checked) + classic_state |= DFCS_CHECKED; + // Draw it manually. // All pressed states have both low bits set, and no other states do. const bool focused = ((state_id & ETS_FOCUSED) == ETS_FOCUSED); |