Index: ui/native_theme/native_theme_win.cc |
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc |
index 16e47cb34f80f4ad1ed10e8a4b322ccb3ea5a4fa..923f450fd3467a9679cb8753178097199c7f63a7 100644 |
--- a/ui/native_theme/native_theme_win.cc |
+++ b/ui/native_theme/native_theme_win.cc |
@@ -132,9 +132,7 @@ RECT InsetRect(const RECT* rect, int size) { |
namespace ui { |
bool NativeThemeWin::IsThemingActive() const { |
- if (is_theme_active_) |
- return !!is_theme_active_(); |
- return false; |
+ return is_theme_active_ && is_theme_active_(); |
} |
bool NativeThemeWin::IsUsingHighContrastTheme() const { |
@@ -155,15 +153,13 @@ HRESULT NativeThemeWin::GetThemeColor(ThemeName theme, |
int prop_id, |
SkColor* color) const { |
HANDLE handle = GetThemeHandle(theme); |
- if (handle && get_theme_color_) { |
- COLORREF color_ref; |
- if (get_theme_color_(handle, part_id, state_id, prop_id, &color_ref) == |
- S_OK) { |
- *color = skia::COLORREFToSkColor(color_ref); |
- return S_OK; |
- } |
- } |
- return E_NOTIMPL; |
+ if (!handle || !get_theme_color_) |
+ return E_NOTIMPL; |
+ COLORREF color_ref; |
+ if (get_theme_color_(handle, part_id, state_id, prop_id, &color_ref) != S_OK) |
+ return E_NOTIMPL; |
+ *color = skia::COLORREFToSkColor(color_ref); |
+ return S_OK; |
} |
SkColor NativeThemeWin::GetThemeColorWithDefault(ThemeName theme, |
@@ -172,25 +168,22 @@ SkColor NativeThemeWin::GetThemeColorWithDefault(ThemeName theme, |
int prop_id, |
int default_sys_color) const { |
SkColor color; |
- if (GetThemeColor(theme, part_id, state_id, prop_id, &color) != S_OK) |
- color = color_utils::GetSysSkColor(default_sys_color); |
- return color; |
+ return (GetThemeColor(theme, part_id, state_id, prop_id, &color) == S_OK) ? |
+ color : color_utils::GetSysSkColor(default_sys_color); |
} |
gfx::Size NativeThemeWin::GetThemeBorderSize(ThemeName theme) const { |
// For simplicity use the wildcard state==0, part==0, since it works |
// for the cases we currently depend on. |
int border; |
- if (GetThemeInt(theme, 0, 0, TMT_BORDERSIZE, &border) == S_OK) |
- return gfx::Size(border, border); |
- else |
- return gfx::Size(GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE)); |
+ return (GetThemeInt(theme, 0, 0, TMT_BORDERSIZE, &border) == S_OK) ? |
+ gfx::Size(border, border) : |
+ gfx::Size(GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE)); |
} |
void NativeThemeWin::DisableTheming() const { |
- if (!set_theme_properties_) |
- return; |
- set_theme_properties_(0); |
+ if (set_theme_properties_) |
+ set_theme_properties_(0); |
} |
void NativeThemeWin::CloseHandles() const { |
@@ -206,10 +199,7 @@ void NativeThemeWin::CloseHandles() const { |
} |
bool NativeThemeWin::IsClassicTheme(ThemeName name) const { |
- if (!theme_dll_) |
- return true; |
- |
- return !GetThemeHandle(name); |
+ return !theme_dll_ || !GetThemeHandle(name); |
} |
// static |
@@ -246,32 +236,17 @@ gfx::Size NativeThemeWin::GetPartSize(Part part, |
int part_id = GetWindowsPart(part, state, extra); |
int state_id = GetWindowsState(part, state, extra); |
+ base::win::ScopedGetDC screen_dc(NULL); |
SIZE size; |
- HDC hdc = GetDC(NULL); |
- HRESULT hr = GetThemePartSize(GetThemeName(part), hdc, part_id, state_id, |
- NULL, TS_TRUE, &size); |
- ReleaseDC(NULL, hdc); |
- |
- 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 gfx::Size(size.cx, size.cy); |
+ if (SUCCEEDED(GetThemePartSize(GetThemeName(part), screen_dc, part_id, |
+ state_id, NULL, TS_TRUE, &size))) |
+ return gfx::Size(size.cx, size.cy); |
+ |
+ // 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. |
+ return (part == kCheckbox || part == kRadio) ? |
+ gfx::Size(13, 13) : gfx::Size(); |
} |
void NativeThemeWin::Paint(SkCanvas* canvas, |
@@ -315,18 +290,14 @@ void NativeThemeWin::Paint(SkCanvas* canvas, |
case kScrollbarUpArrow: |
case kScrollbarLeftArrow: |
case kScrollbarRightArrow: |
- if (!GetThemeHandle(SCROLLBAR)) |
- needs_paint_indirect = true; |
+ needs_paint_indirect = !GetThemeHandle(SCROLLBAR); |
break; |
case kScrollbarHorizontalThumb: |
case kScrollbarVerticalThumb: |
case kScrollbarHorizontalGripper: |
case kScrollbarVerticalGripper: |
- if (!GetThemeHandle(SCROLLBAR) || |
- base::win::GetVersion() == base::win::VERSION_XP) |
- needs_paint_indirect = true; |
- break; |
- default: |
+ needs_paint_indirect = !GetThemeHandle(SCROLLBAR) || |
+ base::win::GetVersion() == base::win::VERSION_XP; |
break; |
} |
} |
@@ -413,83 +384,82 @@ void NativeThemeWin::PaintDirect(SkCanvas* canvas, |
switch (part) { |
case kCheckbox: |
PaintCheckbox(hdc, part, state, rect, extra.button); |
- break; |
+ return; |
case kRadio: |
PaintRadioButton(hdc, part, state, rect, extra.button); |
- break; |
+ return; |
case kPushButton: |
PaintPushButton(hdc, part, state, rect, extra.button); |
- break; |
+ return; |
case kMenuPopupArrow: |
PaintMenuArrow(hdc, state, rect, extra.menu_arrow); |
- break; |
+ return; |
case kMenuPopupGutter: |
PaintMenuGutter(hdc, rect); |
- break; |
+ return; |
case kMenuPopupSeparator: |
PaintMenuSeparator(hdc, rect, extra.menu_separator); |
- break; |
+ return; |
case kMenuPopupBackground: |
PaintMenuBackground(hdc, rect); |
- break; |
+ return; |
case kMenuCheck: |
PaintMenuCheck(hdc, state, rect, extra.menu_check); |
- break; |
+ return; |
case kMenuCheckBackground: |
PaintMenuCheckBackground(hdc, state, rect); |
- break; |
+ return; |
case kMenuItemBackground: |
PaintMenuItemBackground(hdc, state, rect, extra.menu_item); |
- break; |
+ return; |
case kMenuList: |
PaintMenuList(hdc, state, rect, extra.menu_list); |
- break; |
+ return; |
case kScrollbarDownArrow: |
case kScrollbarUpArrow: |
case kScrollbarLeftArrow: |
case kScrollbarRightArrow: |
PaintScrollbarArrow(hdc, part, state, rect, extra.scrollbar_arrow); |
- break; |
+ return; |
case kScrollbarHorizontalTrack: |
case kScrollbarVerticalTrack: |
PaintScrollbarTrack(canvas, hdc, part, state, rect, |
extra.scrollbar_track); |
- break; |
+ return; |
case kScrollbarCorner: |
canvas->drawColor(SK_ColorWHITE, SkXfermode::kSrc_Mode); |
- break; |
+ return; |
case kScrollbarHorizontalThumb: |
case kScrollbarVerticalThumb: |
case kScrollbarHorizontalGripper: |
case kScrollbarVerticalGripper: |
PaintScrollbarThumb(hdc, part, state, rect, extra.scrollbar_thumb); |
- break; |
+ return; |
case kInnerSpinButton: |
PaintSpinButton(hdc, part, state, rect, extra.inner_spin); |
- break; |
+ return; |
case kTrackbarThumb: |
case kTrackbarTrack: |
PaintTrackbar(canvas, hdc, part, state, rect, extra.trackbar); |
- break; |
+ return; |
case kProgressBar: |
PaintProgressBar(hdc, rect, extra.progress_bar); |
- break; |
+ return; |
case kWindowResizeGripper: |
PaintWindowResizeGripper(hdc, rect); |
- break; |
+ return; |
case kTabPanelBackground: |
PaintTabPanelBackground(hdc, rect); |
- break; |
+ return; |
case kTextField: |
PaintTextField(hdc, part, state, rect, extra.text_field); |
- break; |
+ return; |
case kSliderTrack: |
case kSliderThumb: |
default: |
- // While transitioning NativeThemeWin to the single Paint() entry point, |
- // unsupported parts will DCHECK here. |
NOTREACHED(); |
+ return; |
} |
} |
@@ -505,9 +475,9 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const { |
// Dialogs |
case kColorId_DialogBackground: |
- if (gfx::IsInvertedColorScheme()) |
- return color_utils::InvertColor(kDialogBackgroundColor); |
- return kDialogBackgroundColor; |
+ return gfx::IsInvertedColorScheme() ? |
+ color_utils::InvertColor(kDialogBackgroundColor) : |
+ kDialogBackgroundColor; |
// FocusableBorder |
case kColorId_FocusedBorderColor: |
@@ -644,9 +614,8 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const { |
default: |
NOTREACHED(); |
- break; |
+ return kInvalidColorIdColor; |
} |
- return kInvalidColorIdColor; |
} |
void NativeThemeWin::PaintIndirect(SkCanvas* canvas, |
@@ -664,8 +633,6 @@ void NativeThemeWin::PaintIndirect(SkCanvas* canvas, |
skia::BitmapPlatformDevice::Create( |
rect.width(), rect.height(), false, NULL)); |
DCHECK(device); |
- if (!device) |
- return; |
SkCanvas offscreen_canvas(device.get()); |
DCHECK(skia::SupportsPlatformPaint(&offscreen_canvas)); |
@@ -692,14 +659,9 @@ void NativeThemeWin::PaintIndirect(SkCanvas* canvas, |
adjusted_extra.scrollbar_track.track_x = 0; |
adjusted_extra.scrollbar_track.track_y = 0; |
break; |
- default: break; |
} |
// Draw the theme controls using existing HDC-drawing code. |
- PaintDirect(&offscreen_canvas, |
- part, |
- state, |
- adjusted_rect, |
- adjusted_extra); |
+ PaintDirect(&offscreen_canvas, part, state, adjusted_rect, adjusted_extra); |
// Copy the pixels to a bitmap that has ref-counted pixel storage, which is |
// necessary to have when drawing to a SkPicture. |
@@ -737,10 +699,9 @@ HRESULT NativeThemeWin::GetThemePartSize(ThemeName theme_name, |
int ts, |
SIZE* size) const { |
HANDLE handle = GetThemeHandle(theme_name); |
- if (handle && get_theme_part_size_) |
- return get_theme_part_size_(handle, hdc, part_id, state_id, rect, ts, size); |
- |
- return E_NOTIMPL; |
+ return (handle && get_theme_part_size_) ? |
+ get_theme_part_size_(handle, hdc, part_id, state_id, rect, ts, size) : |
+ E_NOTIMPL; |
} |
HRESULT NativeThemeWin::PaintButton(HDC hdc, |
@@ -766,24 +727,14 @@ HRESULT NativeThemeWin::PaintButton(HDC hdc, |
classic_state |= DFCS_BUTTONPUSH; |
break; |
default: |
- NOTREACHED() << "Unknown part_id: " << part_id; |
+ NOTREACHED(); |
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 (state == kDisabled) |
+ classic_state |= DFCS_INACTIVE; |
+ else if (state == kPressed) |
+ classic_state |= DFCS_PUSHED; |
if (extra.checked) |
classic_state |= DFCS_CHECKED; |
@@ -854,17 +805,16 @@ HRESULT NativeThemeWin::PaintMenuGutter(HDC hdc, |
const gfx::Rect& rect) const { |
RECT rect_win = rect.ToRECT(); |
HANDLE handle = GetThemeHandle(MENU); |
- if (handle && draw_theme_) |
- return draw_theme_(handle, hdc, MENU_POPUPGUTTER, MPI_NORMAL, &rect_win, |
- NULL); |
- return E_NOTIMPL; |
+ return (handle && draw_theme_) ? |
+ draw_theme_(handle, hdc, MENU_POPUPGUTTER, MPI_NORMAL, &rect_win, NULL) : |
+ E_NOTIMPL; |
} |
-HRESULT NativeThemeWin::PaintMenuArrow(HDC hdc, |
- State state, |
- const gfx::Rect& rect, |
- const MenuArrowExtraParams& extra) |
- const { |
+HRESULT NativeThemeWin::PaintMenuArrow( |
+ HDC hdc, |
+ State state, |
+ const gfx::Rect& rect, |
+ const MenuArrowExtraParams& extra) const { |
int state_id = MSM_NORMAL; |
if (state == kDisabled) |
state_id = MSM_DISABLED; |
@@ -875,39 +825,33 @@ HRESULT NativeThemeWin::PaintMenuArrow(HDC hdc, |
if (extra.pointing_right) { |
return draw_theme_(handle, hdc, MENU_POPUPSUBMENU, state_id, &rect_win, |
NULL); |
- } else { |
- // There is no way to tell the uxtheme API to draw a left pointing arrow; |
- // it doesn't have a flag equivalent to DFCS_MENUARROWRIGHT. But they |
- // are needed for RTL locales on Vista. So use a memory DC and mirror |
- // the region with GDI's StretchBlt. |
- gfx::Rect r(rect); |
- base::win::ScopedCreateDC mem_dc(CreateCompatibleDC(hdc)); |
- base::win::ScopedBitmap mem_bitmap(CreateCompatibleBitmap(hdc, r.width(), |
- r.height())); |
- base::win::ScopedSelectObject select_bitmap(mem_dc, mem_bitmap); |
- // Copy and horizontally mirror the background from hdc into mem_dc. Use |
- // a negative-width source rect, starting at the rightmost pixel. |
- StretchBlt(mem_dc, 0, 0, r.width(), r.height(), |
- hdc, r.right()-1, r.y(), -r.width(), r.height(), SRCCOPY); |
- // Draw the arrow. |
- RECT theme_rect = {0, 0, r.width(), r.height()}; |
- HRESULT result = draw_theme_(handle, mem_dc, MENU_POPUPSUBMENU, |
- state_id, &theme_rect, NULL); |
- // Copy and mirror the result back into mem_dc. |
- StretchBlt(hdc, r.x(), r.y(), r.width(), r.height(), |
- mem_dc, r.width()-1, 0, -r.width(), r.height(), SRCCOPY); |
- return result; |
} |
+ // There is no way to tell the uxtheme API to draw a left pointing arrow; it |
+ // doesn't have a flag equivalent to DFCS_MENUARROWRIGHT. But they are |
+ // needed for RTL locales on Vista. So use a memory DC and mirror the |
+ // region with GDI's StretchBlt. |
+ gfx::Rect r(rect); |
+ base::win::ScopedCreateDC mem_dc(CreateCompatibleDC(hdc)); |
+ base::win::ScopedBitmap mem_bitmap(CreateCompatibleBitmap(hdc, r.width(), |
+ r.height())); |
+ base::win::ScopedSelectObject select_bitmap(mem_dc, mem_bitmap); |
+ // Copy and horizontally mirror the background from hdc into mem_dc. Use |
+ // a negative-width source rect, starting at the rightmost pixel. |
+ StretchBlt(mem_dc, 0, 0, r.width(), r.height(), |
+ hdc, r.right()-1, r.y(), -r.width(), r.height(), SRCCOPY); |
+ // Draw the arrow. |
+ RECT theme_rect = {0, 0, r.width(), r.height()}; |
+ HRESULT result = draw_theme_(handle, mem_dc, MENU_POPUPSUBMENU, |
+ state_id, &theme_rect, NULL); |
+ // Copy and mirror the result back into mem_dc. |
+ StretchBlt(hdc, r.x(), r.y(), r.width(), r.height(), |
+ mem_dc, r.width()-1, 0, -r.width(), r.height(), SRCCOPY); |
+ return result; |
} |
// For some reason, Windows uses the name DFCS_MENUARROWRIGHT to indicate a |
- // left pointing arrow. This makes the following 'if' statement slightly |
- // counterintuitive. |
- UINT pfc_state; |
- if (extra.pointing_right) |
- pfc_state = DFCS_MENUARROW; |
- else |
- pfc_state = DFCS_MENUARROWRIGHT; |
+ // left pointing arrow. This makes the following statement counterintuitive. |
+ UINT pfc_state = extra.pointing_right ? DFCS_MENUARROW : DFCS_MENUARROWRIGHT; |
return PaintFrameControl(hdc, rect, DFC_MENU, pfc_state, extra.is_selected, |
state); |
} |
@@ -934,16 +878,13 @@ HRESULT NativeThemeWin::PaintMenuCheck( |
const gfx::Rect& rect, |
const MenuCheckExtraParams& extra) const { |
HANDLE handle = GetThemeHandle(MENU); |
- int state_id; |
- if (extra.is_radio) { |
- state_id = state == kDisabled ? MC_BULLETDISABLED : MC_BULLETNORMAL; |
- } else { |
- state_id = state == kDisabled ? MC_CHECKMARKDISABLED : MC_CHECKMARKNORMAL; |
- } |
- |
- RECT rect_win = rect.ToRECT(); |
- if (handle && draw_theme_) |
+ if (handle && draw_theme_) { |
+ const int state_id = extra.is_radio ? |
+ ((state == kDisabled) ? MC_BULLETDISABLED : MC_BULLETNORMAL) : |
+ ((state == kDisabled) ? MC_CHECKMARKDISABLED : MC_CHECKMARKNORMAL); |
Peter Kasting
2014/07/09 20:31:01
I usually try to avoid nested ternaries, but in th
|
+ RECT rect_win = rect.ToRECT(); |
return draw_theme_(handle, hdc, MENU_POPUPCHECK, state_id, &rect_win, NULL); |
+ } |
return PaintFrameControl(hdc, rect, DFC_MENU, |
extra.is_radio ? DFCS_MENUBULLET : DFCS_MENUCHECK, |
@@ -954,13 +895,13 @@ HRESULT NativeThemeWin::PaintMenuCheckBackground(HDC hdc, |
State state, |
const gfx::Rect& rect) const { |
HANDLE handle = GetThemeHandle(MENU); |
+ if (!handle || !draw_theme_) |
+ return S_OK; // Nothing to do for background. |
+ |
int state_id = state == kDisabled ? MCB_DISABLED : MCB_NORMAL; |
RECT rect_win = rect.ToRECT(); |
- if (handle && draw_theme_) |
- return draw_theme_(handle, hdc, MENU_POPUPCHECKBACKGROUND, state_id, |
- &rect_win, NULL); |
- // Nothing to do for background. |
- return S_OK; |
+ return draw_theme_(handle, hdc, MENU_POPUPCHECKBACKGROUND, state_id, |
+ &rect_win, NULL); |
} |
HRESULT NativeThemeWin::PaintMenuItemBackground( |
@@ -972,17 +913,17 @@ HRESULT NativeThemeWin::PaintMenuItemBackground( |
RECT rect_win = rect.ToRECT(); |
int state_id; |
switch (state) { |
- case kNormal: |
- state_id = MPI_NORMAL; |
- break; |
case kDisabled: |
state_id = extra.is_selected ? MPI_DISABLEDHOT : MPI_DISABLED; |
break; |
case kHovered: |
state_id = MPI_HOT; |
break; |
+ case kNormal: |
+ state_id = MPI_NORMAL; |
+ break; |
default: |
- NOTREACHED() << "Invalid state " << state; |
+ NOTREACHED(); |
break; |
} |
@@ -1014,7 +955,7 @@ HRESULT NativeThemeWin::PaintPushButton(HDC hdc, |
state_id = PBS_PRESSED; |
break; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
+ NOTREACHED(); |
break; |
} |
@@ -1042,7 +983,7 @@ HRESULT NativeThemeWin::PaintRadioButton(HDC hdc, |
state_id = extra.checked ? RBS_CHECKEDPRESSED : RBS_UNCHECKEDPRESSED; |
break; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
+ NOTREACHED(); |
break; |
} |
@@ -1058,27 +999,27 @@ HRESULT NativeThemeWin::PaintCheckbox(HDC hdc, |
int state_id; |
switch (state) { |
case kDisabled: |
- state_id = extra.checked ? CBS_CHECKEDDISABLED : |
- extra.indeterminate ? CBS_MIXEDDISABLED : |
- CBS_UNCHECKEDDISABLED; |
+ state_id = extra.checked ? |
+ CBS_CHECKEDDISABLED : |
+ (extra.indeterminate ? CBS_MIXEDDISABLED : CBS_UNCHECKEDDISABLED); |
break; |
case kHovered: |
- state_id = extra.checked ? CBS_CHECKEDHOT : |
- extra.indeterminate ? CBS_MIXEDHOT : |
- CBS_UNCHECKEDHOT; |
+ state_id = extra.checked ? |
+ CBS_CHECKEDHOT : |
+ (extra.indeterminate ? CBS_MIXEDHOT : CBS_UNCHECKEDHOT); |
break; |
case kNormal: |
- state_id = extra.checked ? CBS_CHECKEDNORMAL : |
- extra.indeterminate ? CBS_MIXEDNORMAL : |
- CBS_UNCHECKEDNORMAL; |
+ state_id = extra.checked ? |
+ CBS_CHECKEDNORMAL : |
+ (extra.indeterminate ? CBS_MIXEDNORMAL : CBS_UNCHECKEDNORMAL); |
break; |
case kPressed: |
- state_id = extra.checked ? CBS_CHECKEDPRESSED : |
- extra.indeterminate ? CBS_MIXEDPRESSED : |
- CBS_UNCHECKEDPRESSED; |
+ state_id = extra.checked ? |
+ CBS_CHECKEDPRESSED : |
+ (extra.indeterminate ? CBS_MIXEDPRESSED : CBS_UNCHECKEDPRESSED); |
break; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
+ NOTREACHED(); |
break; |
} |
@@ -1094,20 +1035,20 @@ HRESULT NativeThemeWin::PaintMenuList(HDC hdc, |
RECT rect_win = rect.ToRECT(); |
int state_id; |
switch (state) { |
- case kNormal: |
- state_id = CBXS_NORMAL; |
- break; |
case kDisabled: |
state_id = CBXS_DISABLED; |
break; |
case kHovered: |
state_id = CBXS_HOT; |
break; |
+ case kNormal: |
+ state_id = CBXS_NORMAL; |
+ break; |
case kPressed: |
state_id = CBXS_PRESSED; |
break; |
default: |
- NOTREACHED() << "Invalid state " << state; |
+ NOTREACHED(); |
break; |
} |
@@ -1127,7 +1068,7 @@ HRESULT NativeThemeWin::PaintScrollbarArrow( |
State state, |
const gfx::Rect& rect, |
const ScrollbarArrowExtraParams& extra) const { |
- static const int state_id_matrix[4][kMaxState] = { |
+ static const int state_id_matrix[4][kNumStates] = { |
ABS_DOWNDISABLED, ABS_DOWNHOT, ABS_DOWNNORMAL, ABS_DOWNPRESSED, |
ABS_LEFTDISABLED, ABS_LEFTHOT, ABS_LEFTNORMAL, ABS_LEFTPRESSED, |
ABS_RIGHTDISABLED, ABS_RIGHTHOT, ABS_RIGHTNORMAL, ABS_RIGHTPRESSED, |
@@ -1137,7 +1078,8 @@ HRESULT NativeThemeWin::PaintScrollbarArrow( |
RECT rect_win = rect.ToRECT(); |
if (handle && draw_theme_) { |
int index = part - kScrollbarDownArrow; |
- DCHECK(index >=0 && index < 4); |
+ DCHECK_GE(index, 0); |
+ DCHECK_LT(static_cast<size_t>(index), arraysize(state_id_matrix)); |
int state_id = state_id_matrix[index][state]; |
// Hovering means that the cursor is over the scroolbar, but not over the |
@@ -1158,7 +1100,7 @@ HRESULT NativeThemeWin::PaintScrollbarArrow( |
state_id = ABS_UPHOVER; |
break; |
default: |
- NOTREACHED() << "Invalid part: " << part; |
+ NOTREACHED(); |
break; |
} |
} |
@@ -1180,25 +1122,15 @@ HRESULT NativeThemeWin::PaintScrollbarArrow( |
classic_state = DFCS_SCROLLUP; |
break; |
default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
- } |
- switch (state) { |
- case kDisabled: |
- classic_state |= DFCS_INACTIVE; |
- break; |
- case kHovered: |
- classic_state |= DFCS_HOT; |
- break; |
- case kNormal: |
- break; |
- case kPressed: |
- classic_state |= DFCS_PUSHED; |
- break; |
- default: |
- NOTREACHED() << "Invalid state: " << state; |
+ NOTREACHED(); |
break; |
} |
+ if (state == kDisabled) |
+ classic_state |= DFCS_INACTIVE; |
+ else if (state == kHovered) |
+ classic_state |= DFCS_HOT; |
+ else if (state == kPressed) |
+ classic_state |= DFCS_PUSHED; |
DrawFrameControl(hdc, &rect_win, DFC_SCROLL, classic_state); |
return S_OK; |
} |
@@ -1211,9 +1143,8 @@ HRESULT NativeThemeWin::PaintScrollbarThumb( |
const ScrollbarThumbExtraParams& extra) const { |
HANDLE handle = GetThemeHandle(SCROLLBAR); |
RECT rect_win = rect.ToRECT(); |
- int part_id; |
- int state_id; |
+ int part_id; |
switch (part) { |
case NativeTheme::kScrollbarHorizontalThumb: |
part_id = SBP_THUMBBTNHORZ; |
@@ -1228,10 +1159,11 @@ HRESULT NativeThemeWin::PaintScrollbarThumb( |
part_id = SBP_GRIPPERVERT; |
break; |
default: |
- NOTREACHED() << "Invalid part: " << part; |
+ NOTREACHED(); |
break; |
} |
+ int state_id; |
switch (state) { |
case kDisabled: |
state_id = SCRBS_DISABLED; |
@@ -1246,7 +1178,7 @@ HRESULT NativeThemeWin::PaintScrollbarThumb( |
state_id = SCRBS_PRESSED; |
break; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
+ NOTREACHED(); |
break; |
} |
@@ -1269,9 +1201,8 @@ HRESULT NativeThemeWin::PaintScrollbarTrack( |
const ScrollbarTrackExtraParams& extra) const { |
HANDLE handle = GetThemeHandle(SCROLLBAR); |
RECT rect_win = rect.ToRECT(); |
- int part_id; |
- int state_id; |
+ int part_id; |
switch (part) { |
case NativeTheme::kScrollbarHorizontalTrack: |
part_id = extra.is_upper ? SBP_UPPERTRACKHORZ : SBP_LOWERTRACKHORZ; |
@@ -1280,10 +1211,11 @@ HRESULT NativeThemeWin::PaintScrollbarTrack( |
part_id = extra.is_upper ? SBP_UPPERTRACKVERT : SBP_LOWERTRACKVERT; |
break; |
default: |
- NOTREACHED() << "Invalid part: " << part; |
+ NOTREACHED(); |
break; |
} |
+ int state_id; |
switch (state) { |
case kDisabled: |
state_id = SCRBS_DISABLED; |
@@ -1298,7 +1230,7 @@ HRESULT NativeThemeWin::PaintScrollbarTrack( |
state_id = SCRBS_PRESSED; |
break; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
+ NOTREACHED(); |
break; |
} |
@@ -1345,7 +1277,7 @@ HRESULT NativeThemeWin::PaintSpinButton( |
state_id = extra.spin_up ? UPS_PRESSED : DNS_PRESSED; |
break; |
default: |
- NOTREACHED() << "Invalid state " << state; |
+ NOTREACHED(); |
break; |
} |
@@ -1362,9 +1294,9 @@ HRESULT NativeThemeWin::PaintTrackbar( |
State state, |
const gfx::Rect& rect, |
const TrackbarExtraParams& extra) const { |
- int part_id = part == kTrackbarTrack ? TKP_TRACK : TKP_THUMBBOTTOM; |
- if (extra.vertical) |
- part_id = part == kTrackbarTrack ? TKP_TRACKVERT : TKP_THUMBVERT; |
+ const int part_id = extra.vertical ? |
+ ((part == kTrackbarTrack) ? TKP_TRACKVERT : TKP_THUMBVERT) : |
+ ((part == kTrackbarTrack) ? TKP_TRACK : TKP_THUMBBOTTOM); |
int state_id = 0; |
switch (state) { |
@@ -1381,7 +1313,7 @@ HRESULT NativeThemeWin::PaintTrackbar( |
state_id = TUS_PRESSED; |
break; |
default: |
- NOTREACHED() << "Invalid state " << state; |
+ NOTREACHED(); |
break; |
} |
@@ -1469,8 +1401,8 @@ HRESULT NativeThemeWin::PaintProgressBar( |
// There is no documentation about the animation speed, frame-rate, nor |
// size of moving overlay of the indeterminate progress bar. |
// So we just observed real-world programs and guessed following parameters. |
- const int kDeteminateOverlayPixelsPerSecond = 300; |
- const int kDeteminateOverlayWidth = 120; |
+ const int kDeterminateOverlayPixelsPerSecond = 300; |
+ const int kDeterminateOverlayWidth = 120; |
const int kIndeterminateOverlayPixelsPerSecond = 175; |
const int kVistaIndeterminateOverlayWidth = 120; |
const int kXPIndeterminateOverlayWidth = 55; |
@@ -1483,79 +1415,69 @@ HRESULT NativeThemeWin::PaintProgressBar( |
extra.value_rect_width, |
extra.value_rect_height).ToRECT(); |
- bool pre_vista = base::win::GetVersion() < base::win::VERSION_VISTA; |
HANDLE handle = GetThemeHandle(PROGRESS); |
- if (handle && draw_theme_ && draw_theme_ex_) { |
- draw_theme_(handle, hdc, PP_BAR, 0, &bar_rect, NULL); |
- |
- int bar_width = bar_rect.right - bar_rect.left; |
- if (extra.determinate) { |
- // TODO(morrita): this RTL guess can be wrong. |
- // We should pass the direction from WebKit side. |
- bool is_rtl = (bar_rect.right == value_rect.right && |
- bar_rect.left != value_rect.left); |
- // We should care the direction here because PP_CNUNK painting |
- // is asymmetric. |
- DTBGOPTS value_draw_options; |
- value_draw_options.dwSize = sizeof(DTBGOPTS); |
- value_draw_options.dwFlags = is_rtl ? DTBG_MIRRORDC : 0; |
- value_draw_options.rcClip = bar_rect; |
- |
- if (pre_vista) { |
- // On XP, progress bar is chunk-style and has no glossy effect. |
- // We need to shrink destination rect to fit the part inside the bar |
- // with an appropriate margin. |
- RECT shrunk_value_rect = InsetRect(&value_rect, kXPBarPadding); |
- draw_theme_ex_(handle, hdc, PP_CHUNK, 0, |
- &shrunk_value_rect, &value_draw_options); |
- } else { |
- // On Vista or later, the progress bar part has a |
- // single-block value part. It also has glossy effect. |
- // And the value part has exactly same height as the bar part |
- // so we don't need to shrink the rect. |
- draw_theme_ex_(handle, hdc, PP_FILL, 0, |
- &value_rect, &value_draw_options); |
- |
- int dx = ComputeAnimationProgress(bar_width, |
- kDeteminateOverlayWidth, |
- kDeteminateOverlayPixelsPerSecond, |
- extra.animated_seconds); |
- RECT overlay_rect = value_rect; |
- overlay_rect.left += dx; |
- overlay_rect.right = overlay_rect.left + kDeteminateOverlayWidth; |
- draw_theme_(handle, hdc, PP_MOVEOVERLAY, 0, &overlay_rect, &value_rect); |
- } |
+ if (!handle || !draw_theme_ || !draw_theme_ex_) { |
+ FillRect(hdc, &bar_rect, GetSysColorBrush(COLOR_BTNFACE)); |
+ FillRect(hdc, &value_rect, GetSysColorBrush(COLOR_BTNSHADOW)); |
+ DrawEdge(hdc, &bar_rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST); |
+ return S_OK; |
+ } |
+ |
+ draw_theme_(handle, hdc, PP_BAR, 0, &bar_rect, NULL); |
+ |
+ bool pre_vista = base::win::GetVersion() < base::win::VERSION_VISTA; |
+ int bar_width = bar_rect.right - bar_rect.left; |
+ if (!extra.determinate) { |
+ // The glossy overlay for the indeterminate progress bar has a small pause |
+ // after each animation. We emulate this by adding an invisible margin the |
+ // animation has to traverse. |
+ int width_with_margin = bar_width + kIndeterminateOverlayPixelsPerSecond; |
+ int overlay_width = pre_vista ? |
+ kXPIndeterminateOverlayWidth : kVistaIndeterminateOverlayWidth; |
+ RECT overlay_rect = bar_rect; |
+ overlay_rect.left += ComputeAnimationProgress( |
+ width_with_margin, overlay_width, kIndeterminateOverlayPixelsPerSecond, |
+ extra.animated_seconds); |
+ overlay_rect.right = overlay_rect.left + overlay_width; |
+ if (pre_vista) { |
+ RECT shrunk_rect = InsetRect(&overlay_rect, kXPBarPadding); |
+ RECT shrunk_bar_rect = InsetRect(&bar_rect, kXPBarPadding); |
+ draw_theme_(handle, hdc, PP_CHUNK, 0, &shrunk_rect, &shrunk_bar_rect); |
} else { |
- // A glossy overlay for indeterminate progress bar has small pause |
- // after each animation. We emulate this by adding an invisible margin |
- // the animation has to traverse. |
- int width_with_margin = bar_width + kIndeterminateOverlayPixelsPerSecond; |
- int overlay_width = pre_vista ? |
- kXPIndeterminateOverlayWidth : kVistaIndeterminateOverlayWidth; |
- int dx = ComputeAnimationProgress(width_with_margin, |
- overlay_width, |
- kIndeterminateOverlayPixelsPerSecond, |
- extra.animated_seconds); |
- RECT overlay_rect = bar_rect; |
- overlay_rect.left += dx; |
- overlay_rect.right = overlay_rect.left + overlay_width; |
- if (pre_vista) { |
- RECT shrunk_rect = InsetRect(&overlay_rect, kXPBarPadding); |
- RECT shrunk_bar_rect = InsetRect(&bar_rect, kXPBarPadding); |
- draw_theme_(handle, hdc, PP_CHUNK, 0, &shrunk_rect, &shrunk_bar_rect); |
- } else { |
- draw_theme_(handle, hdc, PP_MOVEOVERLAY, 0, &overlay_rect, &bar_rect); |
- } |
+ draw_theme_(handle, hdc, PP_MOVEOVERLAY, 0, &overlay_rect, &bar_rect); |
} |
- |
return S_OK; |
} |
- HBRUSH bg_brush = GetSysColorBrush(COLOR_BTNFACE); |
- HBRUSH fg_brush = GetSysColorBrush(COLOR_BTNSHADOW); |
- FillRect(hdc, &bar_rect, bg_brush); |
- FillRect(hdc, &value_rect, fg_brush); |
- DrawEdge(hdc, &bar_rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST); |
+ // We care about the direction here because PP_CHUNK painting is asymmetric. |
+ // TODO(morrita): This RTL guess can be wrong. We should pass in the |
+ // direction from WebKit. |
+ const DTBGOPTS value_draw_options = { |
+ sizeof(DTBGOPTS), |
+ (bar_rect.right == value_rect.right && bar_rect.left != value_rect.left) ? |
+ DTBG_MIRRORDC : 0, |
+ bar_rect |
+ }; |
+ if (pre_vista) { |
+ // On XP, the progress bar is chunk-style and has no glossy effect. We need |
+ // to shrink the destination rect to fit the part inside the bar with an |
+ // appropriate margin. |
+ RECT shrunk_value_rect = InsetRect(&value_rect, kXPBarPadding); |
+ draw_theme_ex_(handle, hdc, PP_CHUNK, 0, &shrunk_value_rect, |
+ &value_draw_options); |
+ } else { |
+ // On Vista or later, the progress bar part has a single-block value part |
+ // and a glossy effect. The value part has exactly same height as the bar |
+ // part, so we don't need to shrink the rect. |
+ draw_theme_ex_(handle, hdc, PP_FILL, 0, &value_rect, &value_draw_options); |
+ |
+ RECT overlay_rect = value_rect; |
+ overlay_rect.left += ComputeAnimationProgress( |
+ bar_width, kDeterminateOverlayWidth, kDeterminateOverlayPixelsPerSecond, |
+ extra.animated_seconds); |
+ overlay_rect.right = overlay_rect.left + kDeterminateOverlayWidth; |
+ draw_theme_(handle, hdc, PP_MOVEOVERLAY, 0, &overlay_rect, &value_rect); |
+ } |
return S_OK; |
} |
@@ -1564,10 +1486,9 @@ HRESULT NativeThemeWin::PaintWindowResizeGripper(HDC hdc, |
HANDLE handle = GetThemeHandle(STATUS); |
RECT rect_win = rect.ToRECT(); |
if (handle && draw_theme_) { |
- // Paint the status bar gripper. There doesn't seem to be a |
- // standard gripper in Windows for the space between |
- // scrollbars. This is pretty close, but it's supposed to be |
- // painted over a status bar. |
+ // Paint the status bar gripper. There doesn't seem to be a standard |
+ // gripper in Windows for the space between scrollbars. This is pretty |
+ // close, but it's supposed to be painted over a status bar. |
return draw_theme_(handle, hdc, SP_GRIPPER, 0, &rect_win, NULL); |
} |
@@ -1594,34 +1515,32 @@ HRESULT NativeThemeWin::PaintTextField( |
State state, |
const gfx::Rect& rect, |
const TextFieldExtraParams& extra) const { |
- int part_id = EP_EDITTEXT; |
int state_id = ETS_NORMAL; |
switch (state) { |
+ case kDisabled: |
+ state_id = ETS_DISABLED; |
+ break; |
+ case kHovered: |
+ state_id = ETS_HOT; |
+ break; |
case kNormal: |
- if (extra.is_read_only) { |
+ if (extra.is_read_only) |
state_id = ETS_READONLY; |
- } else if (extra.is_focused) { |
+ else if (extra.is_focused) |
state_id = ETS_FOCUSED; |
- } else { |
+ else |
state_id = ETS_NORMAL; |
- } |
- break; |
- case kHovered: |
- state_id = ETS_HOT; |
break; |
case kPressed: |
state_id = ETS_SELECTED; |
break; |
- case kDisabled: |
- state_id = ETS_DISABLED; |
- break; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
+ NOTREACHED(); |
break; |
} |
RECT rect_win = rect.ToRECT(); |
- return PaintTextField(hdc, part_id, state_id, extra.classic_state, |
+ return PaintTextField(hdc, EP_EDITTEXT, state_id, extra.classic_state, |
&rect_win, |
skia::SkColorToCOLORREF(extra.background_color), |
extra.fill_content_area, extra.draw_edges); |
@@ -1642,31 +1561,10 @@ HRESULT NativeThemeWin::PaintTextField(HDC hdc, |
// TODO(mpcomplete): can we detect if the color is specified by the user, |
// and if not, just use the system color? |
// CreateSolidBrush() accepts a RGB value but alpha must be 0. |
- HBRUSH bg_brush = CreateSolidBrush(color); |
- HRESULT hr; |
+ base::win::ScopedGDIObject<HBRUSH> bg_brush(CreateSolidBrush(color)); |
// DrawThemeBackgroundEx was introduced in XP SP2, so that it's possible |
// draw_theme_ex_ is NULL and draw_theme_ is non-null. |
- if (handle && (draw_theme_ex_ || (draw_theme_ && draw_edges))) { |
- if (draw_theme_ex_) { |
- static const DTBGOPTS omit_border_options = { |
- sizeof(DTBGOPTS), |
- DTBG_OMITBORDER, |
- { 0, 0, 0, 0 } |
- }; |
- const DTBGOPTS* draw_opts = draw_edges ? NULL : &omit_border_options; |
- hr = draw_theme_ex_(handle, hdc, part_id, state_id, rect, draw_opts); |
- } else { |
- hr = draw_theme_(handle, hdc, part_id, state_id, rect, NULL); |
- } |
- |
- // TODO(maruel): Need to be fixed if get_theme_content_rect_ is NULL. |
- if (fill_content_area && get_theme_content_rect_) { |
- RECT content_rect; |
- hr = get_theme_content_rect_(handle, hdc, part_id, state_id, rect, |
- &content_rect); |
- FillRect(hdc, &content_rect, bg_brush); |
- } |
- } else { |
+ if (!handle || (!draw_theme_ex_ && (!draw_theme_ || !draw_edges))) { |
// Draw it manually. |
if (draw_edges) |
DrawEdge(hdc, rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST); |
@@ -1675,9 +1573,26 @@ HRESULT NativeThemeWin::PaintTextField(HDC hdc, |
FillRect(hdc, rect, (classic_state & DFCS_INACTIVE) ? |
reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1) : bg_brush); |
} |
- hr = S_OK; |
+ return S_OK; |
+ } |
+ |
+ static const DTBGOPTS omit_border_options = { |
+ sizeof(DTBGOPTS), |
+ DTBG_OMITBORDER, |
+ { 0, 0, 0, 0 } |
+ }; |
+ HRESULT hr = draw_theme_ex_ ? |
+ draw_theme_ex_(handle, hdc, part_id, state_id, rect, |
+ draw_edges ? NULL : &omit_border_options) : |
+ draw_theme_(handle, hdc, part_id, state_id, rect, NULL); |
+ |
+ // TODO(maruel): Need to be fixed if get_theme_content_rect_ is NULL. |
+ if (fill_content_area && get_theme_content_rect_) { |
+ RECT content_rect; |
+ hr = get_theme_content_rect_(handle, hdc, part_id, state_id, rect, |
+ &content_rect); |
+ FillRect(hdc, &content_rect, bg_brush); |
} |
- DeleteObject(bg_brush); |
return hr; |
} |
@@ -1694,12 +1609,9 @@ HRESULT NativeThemeWin::PaintScaledTheme(HANDLE theme, |
float scale = save_transform.eM11; |
if (scale != 1 && save_transform.eM12 == 0) { |
ModifyWorldTransform(hdc, NULL, MWT_IDENTITY); |
- gfx::Rect scaled_rect = gfx::ToEnclosedRect( |
- gfx::ScaleRect(rect, scale)); |
- RECT bounds = gfx::Rect(scaled_rect.x() + save_transform.eDx, |
- scaled_rect.y() + save_transform.eDy, |
- scaled_rect.width(), |
- scaled_rect.height()).ToRECT(); |
+ gfx::Rect scaled_rect(gfx::ToEnclosedRect(gfx::ScaleRect(rect, scale))); |
+ scaled_rect.Offset(save_transform.eDx, save_transform.eDy); |
+ RECT bounds = scaled_rect.ToRECT(); |
HRESULT result = draw_theme_(theme, hdc, part_id, state_id, &bounds, |
NULL); |
SetWorldTransform(hdc, &save_transform); |
@@ -1712,26 +1624,21 @@ HRESULT NativeThemeWin::PaintScaledTheme(HANDLE theme, |
// static |
NativeThemeWin::ThemeName NativeThemeWin::GetThemeName(Part part) { |
- ThemeName name; |
switch (part) { |
case kCheckbox: |
case kRadio: |
case kPushButton: |
- name = BUTTON; |
- break; |
+ return BUTTON; |
case kInnerSpinButton: |
- name = SPIN; |
- break; |
+ return SPIN; |
case kMenuCheck: |
case kMenuPopupGutter: |
case kMenuList: |
case kMenuPopupArrow: |
case kMenuPopupSeparator: |
- name = MENU; |
- break; |
+ return MENU; |
case kProgressBar: |
- name = PROGRESS; |
- break; |
+ return PROGRESS; |
case kScrollbarDownArrow: |
case kScrollbarLeftArrow: |
case kScrollbarRightArrow: |
@@ -1740,298 +1647,230 @@ NativeThemeWin::ThemeName NativeThemeWin::GetThemeName(Part part) { |
case kScrollbarVerticalThumb: |
case kScrollbarHorizontalTrack: |
case kScrollbarVerticalTrack: |
- name = SCROLLBAR; |
- break; |
+ return SCROLLBAR; |
case kSliderTrack: |
case kSliderThumb: |
- name = TRACKBAR; |
- break; |
+ return TRACKBAR; |
case kTextField: |
- name = TEXTFIELD; |
- break; |
+ return TEXTFIELD; |
case kWindowResizeGripper: |
- name = STATUS; |
- break; |
+ return STATUS; |
default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
+ NOTREACHED(); |
+ return LAST; |
} |
- return name; |
} |
// static |
int NativeThemeWin::GetWindowsPart(Part part, |
State state, |
const ExtraParams& extra) { |
- int part_id; |
switch (part) { |
case kCheckbox: |
- part_id = BP_CHECKBOX; |
- break; |
+ return BP_CHECKBOX; |
case kMenuCheck: |
- part_id = MENU_POPUPCHECK; |
- break; |
+ return MENU_POPUPCHECK; |
case kMenuPopupArrow: |
- part_id = MENU_POPUPSUBMENU; |
- break; |
+ return MENU_POPUPSUBMENU; |
case kMenuPopupGutter: |
- part_id = MENU_POPUPGUTTER; |
- break; |
+ return MENU_POPUPGUTTER; |
case kMenuPopupSeparator: |
- part_id = MENU_POPUPSEPARATOR; |
- break; |
+ return MENU_POPUPSEPARATOR; |
case kPushButton: |
- part_id = BP_PUSHBUTTON; |
- break; |
+ return BP_PUSHBUTTON; |
case kRadio: |
- part_id = BP_RADIOBUTTON; |
- break; |
+ return BP_RADIOBUTTON; |
case kWindowResizeGripper: |
- part_id = SP_GRIPPER; |
- break; |
+ return SP_GRIPPER; |
case kScrollbarDownArrow: |
case kScrollbarLeftArrow: |
case kScrollbarRightArrow: |
case kScrollbarUpArrow: |
- part_id = SBP_ARROWBTN; |
- break; |
+ return SBP_ARROWBTN; |
case kScrollbarHorizontalThumb: |
- part_id = SBP_THUMBBTNHORZ; |
- break; |
+ return SBP_THUMBBTNHORZ; |
case kScrollbarVerticalThumb: |
- part_id = SBP_THUMBBTNVERT; |
- break; |
+ return SBP_THUMBBTNVERT; |
default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- return part_id; |
} |
int NativeThemeWin::GetWindowsState(Part part, |
State state, |
const ExtraParams& extra) { |
- int state_id; |
switch (part) { |
case kCheckbox: |
switch (state) { |
- case kNormal: |
- state_id = CBS_UNCHECKEDNORMAL; |
- break; |
+ case kDisabled: |
+ return CBS_UNCHECKEDDISABLED; |
case kHovered: |
- state_id = CBS_UNCHECKEDHOT; |
- break; |
+ return CBS_UNCHECKEDHOT; |
+ case kNormal: |
+ return CBS_UNCHECKEDNORMAL; |
case kPressed: |
- state_id = CBS_UNCHECKEDPRESSED; |
- break; |
- case kDisabled: |
- state_id = CBS_UNCHECKEDDISABLED; |
- break; |
+ return CBS_UNCHECKEDPRESSED; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- break; |
case kMenuCheck: |
switch (state) { |
- case kNormal: |
+ case kDisabled: |
+ return extra.menu_check.is_radio ? |
+ MC_BULLETDISABLED : MC_CHECKMARKDISABLED; |
case kHovered: |
+ case kNormal: |
case kPressed: |
- state_id = extra.menu_check.is_radio ? MC_BULLETNORMAL |
- : MC_CHECKMARKNORMAL; |
- break; |
- case kDisabled: |
- state_id = extra.menu_check.is_radio ? MC_BULLETDISABLED |
- : MC_CHECKMARKDISABLED; |
- break; |
+ return extra.menu_check.is_radio ? |
+ MC_BULLETNORMAL : MC_CHECKMARKNORMAL; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- break; |
case kMenuPopupArrow: |
case kMenuPopupGutter: |
case kMenuPopupSeparator: |
switch (state) { |
- case kNormal: |
- state_id = MBI_NORMAL; |
- break; |
+ case kDisabled: |
+ return MBI_DISABLED; |
case kHovered: |
- state_id = MBI_HOT; |
- break; |
+ return MBI_HOT; |
+ case kNormal: |
+ return MBI_NORMAL; |
case kPressed: |
- state_id = MBI_PUSHED; |
- break; |
- case kDisabled: |
- state_id = MBI_DISABLED; |
- break; |
+ return MBI_PUSHED; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- break; |
case kPushButton: |
switch (state) { |
- case kNormal: |
- state_id = PBS_NORMAL; |
- break; |
+ case kDisabled: |
+ return PBS_DISABLED; |
case kHovered: |
- state_id = PBS_HOT; |
- break; |
+ return PBS_HOT; |
+ case kNormal: |
+ return PBS_NORMAL; |
case kPressed: |
- state_id = PBS_PRESSED; |
- break; |
- case kDisabled: |
- state_id = PBS_DISABLED; |
- break; |
+ return PBS_PRESSED; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- break; |
case kRadio: |
switch (state) { |
- case kNormal: |
- state_id = RBS_UNCHECKEDNORMAL; |
- break; |
+ case kDisabled: |
+ return RBS_UNCHECKEDDISABLED; |
case kHovered: |
- state_id = RBS_UNCHECKEDHOT; |
- break; |
+ return RBS_UNCHECKEDHOT; |
+ case kNormal: |
+ return RBS_UNCHECKEDNORMAL; |
case kPressed: |
- state_id = RBS_UNCHECKEDPRESSED; |
- break; |
- case kDisabled: |
- state_id = RBS_UNCHECKEDDISABLED; |
- break; |
+ return RBS_UNCHECKEDPRESSED; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- break; |
case kWindowResizeGripper: |
switch (state) { |
- case kNormal: |
+ case kDisabled: |
case kHovered: |
+ case kNormal: |
case kPressed: |
- case kDisabled: |
- state_id = 1; // gripper has no windows state |
- break; |
+ return 1; // gripper has no windows state |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- break; |
case kScrollbarDownArrow: |
switch (state) { |
- case kNormal: |
- state_id = ABS_DOWNNORMAL; |
- break; |
+ case kDisabled: |
+ return ABS_DOWNDISABLED; |
case kHovered: |
// Mimic ScrollbarThemeChromiumWin.cpp in WebKit. |
- state_id = base::win::GetVersion() < base::win::VERSION_VISTA ? |
+ return base::win::GetVersion() < base::win::VERSION_VISTA ? |
ABS_DOWNHOT : ABS_DOWNHOVER; |
- break; |
+ case kNormal: |
+ return ABS_DOWNNORMAL; |
case kPressed: |
- state_id = ABS_DOWNPRESSED; |
- break; |
- case kDisabled: |
- state_id = ABS_DOWNDISABLED; |
- break; |
+ return ABS_DOWNPRESSED; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- break; |
case kScrollbarLeftArrow: |
switch (state) { |
- case kNormal: |
- state_id = ABS_LEFTNORMAL; |
- break; |
+ case kDisabled: |
+ return ABS_LEFTDISABLED; |
case kHovered: |
// Mimic ScrollbarThemeChromiumWin.cpp in WebKit. |
- state_id = base::win::GetVersion() < base::win::VERSION_VISTA ? |
+ return base::win::GetVersion() < base::win::VERSION_VISTA ? |
ABS_LEFTHOT : ABS_LEFTHOVER; |
- break; |
+ case kNormal: |
+ return ABS_LEFTNORMAL; |
case kPressed: |
- state_id = ABS_LEFTPRESSED; |
- break; |
- case kDisabled: |
- state_id = ABS_LEFTDISABLED; |
- break; |
+ return ABS_LEFTPRESSED; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- break; |
case kScrollbarRightArrow: |
switch (state) { |
- case kNormal: |
- state_id = ABS_RIGHTNORMAL; |
- break; |
+ case kDisabled: |
+ return ABS_RIGHTDISABLED; |
case kHovered: |
// Mimic ScrollbarThemeChromiumWin.cpp in WebKit. |
- state_id = base::win::GetVersion() < base::win::VERSION_VISTA ? |
+ return base::win::GetVersion() < base::win::VERSION_VISTA ? |
ABS_RIGHTHOT : ABS_RIGHTHOVER; |
- break; |
+ case kNormal: |
+ return ABS_RIGHTNORMAL; |
case kPressed: |
- state_id = ABS_RIGHTPRESSED; |
- break; |
- case kDisabled: |
- state_id = ABS_RIGHTDISABLED; |
- break; |
+ return ABS_RIGHTPRESSED; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
break; |
case kScrollbarUpArrow: |
switch (state) { |
- case kNormal: |
- state_id = ABS_UPNORMAL; |
- break; |
+ case kDisabled: |
+ return ABS_UPDISABLED; |
case kHovered: |
// Mimic ScrollbarThemeChromiumWin.cpp in WebKit. |
- state_id = base::win::GetVersion() < base::win::VERSION_VISTA ? |
+ return base::win::GetVersion() < base::win::VERSION_VISTA ? |
ABS_UPHOT : ABS_UPHOVER; |
- break; |
+ case kNormal: |
+ return ABS_UPNORMAL; |
case kPressed: |
- state_id = ABS_UPPRESSED; |
- break; |
- case kDisabled: |
- state_id = ABS_UPDISABLED; |
- break; |
+ return ABS_UPPRESSED; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
break; |
case kScrollbarHorizontalThumb: |
case kScrollbarVerticalThumb: |
switch (state) { |
- case kNormal: |
- state_id = SCRBS_NORMAL; |
- break; |
+ case kDisabled: |
+ return SCRBS_DISABLED; |
case kHovered: |
// Mimic WebKit's behaviour in ScrollbarThemeChromiumWin.cpp. |
- state_id = base::win::GetVersion() < base::win::VERSION_VISTA ? |
+ return base::win::GetVersion() < base::win::VERSION_VISTA ? |
SCRBS_HOT : SCRBS_HOVER; |
- break; |
+ case kNormal: |
+ return SCRBS_NORMAL; |
case kPressed: |
- state_id = SCRBS_PRESSED; |
- break; |
- case kDisabled: |
- state_id = SCRBS_DISABLED; |
- break; |
+ return SCRBS_PRESSED; |
default: |
- NOTREACHED() << "Invalid state: " << state; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- break; |
default: |
- NOTREACHED() << "Invalid part: " << part; |
- break; |
+ NOTREACHED(); |
+ return 0; |
} |
- return state_id; |
} |
HRESULT NativeThemeWin::GetThemeInt(ThemeName theme, |
@@ -2040,9 +1879,8 @@ HRESULT NativeThemeWin::GetThemeInt(ThemeName theme, |
int prop_id, |
int *value) const { |
HANDLE handle = GetThemeHandle(theme); |
- if (handle && get_theme_int_) |
- return get_theme_int_(handle, part_id, state_id, prop_id, value); |
- return E_NOTIMPL; |
+ return (handle && get_theme_int_) ? |
+ get_theme_int_(handle, part_id, state_id, prop_id, value) : E_NOTIMPL; |
} |
HRESULT NativeThemeWin::PaintFrameControl(HDC hdc, |
@@ -2072,6 +1910,10 @@ HRESULT NativeThemeWin::PaintFrameControl(HDC hdc, |
int bg_color_key; |
int text_color_key; |
switch (control_state) { |
+ case NativeTheme::kDisabled: |
+ bg_color_key = is_selected ? COLOR_HIGHLIGHT : COLOR_MENU; |
+ text_color_key = COLOR_GRAYTEXT; |
+ break; |
case NativeTheme::kHovered: |
bg_color_key = COLOR_HIGHLIGHT; |
text_color_key = COLOR_HIGHLIGHTTEXT; |
@@ -2080,10 +1922,6 @@ HRESULT NativeThemeWin::PaintFrameControl(HDC hdc, |
bg_color_key = COLOR_MENU; |
text_color_key = COLOR_MENUTEXT; |
break; |
- case NativeTheme::kDisabled: |
- bg_color_key = is_selected ? COLOR_HIGHLIGHT : COLOR_MENU; |
- text_color_key = COLOR_GRAYTEXT; |
- break; |
default: |
NOTREACHED(); |
bg_color_key = COLOR_MENU; |
@@ -2147,6 +1985,7 @@ HANDLE NativeThemeWin::GetThemeHandle(ThemeName theme_name) const { |
break; |
default: |
NOTREACHED(); |
+ break; |
} |
theme_handles_[theme_name] = handle; |
return handle; |