Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Unified Diff: ui/native_theme/native_theme_win.cc

Issue 377423003: Lots of random cleanups, mostly for native_theme_win.cc: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Build fix #2, for reals Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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:
sky 2014/07/10 16:05:39 Isn't the point of code like this to make sure tha
Peter Kasting 2014/07/10 18:23:15 I don't think that benefit is worth the extra code
sky 2014/07/10 19:33:10 I don't see the reduction you're doing as signific
Peter Kasting 2014/07/10 21:44:25 As noted in IM, we can't remove this -- only chang
- 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);
+ 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;
Peter Kasting 2014/07/10 18:23:15 Note that this code should also be resolved per yo
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;

Powered by Google App Engine
This is Rietveld 408576698