Index: views/examples/native_theme_button_example.cc |
=================================================================== |
--- views/examples/native_theme_button_example.cc (revision 90205) |
+++ views/examples/native_theme_button_example.cc (working copy) |
@@ -137,13 +137,17 @@ |
} |
gfx::Rect ExampleNativeThemeButton::GetThemePaintRect() const { |
- return GetLocalBounds(); |
+ gfx::NativeTheme::ExtraParams extra; |
+ gfx::NativeTheme::State state = GetThemeState(&extra); |
+ gfx::Size size(gfx::NativeTheme::instance()->GetPartSize(GetThemePart(), |
+ state, |
+ extra)); |
+ gfx::Rect rect(size); |
+ rect.set_x(GetMirroredXForRect(rect)); |
+ return rect; |
} |
-gfx::NativeTheme::State ExampleNativeThemeButton::GetThemeState( |
- gfx::NativeTheme::ExtraParams* params) const { |
- GetExtraParams(params); |
- |
+gfx::NativeTheme::State ExampleNativeThemeButton::GetInternalState() const { |
int selected = cb_state_->selected_item(); |
if (selected > 3) { |
switch(state()) { |
@@ -175,6 +179,12 @@ |
return gfx::NativeTheme::kNormal; |
} |
+gfx::NativeTheme::State ExampleNativeThemeButton::GetThemeState( |
+ gfx::NativeTheme::ExtraParams* params) const { |
+ GetExtraParams(params); |
+ return GetInternalState(); |
+} |
+ |
void ExampleNativeThemeButton::GetExtraParams( |
gfx::NativeTheme::ExtraParams* params) const { |
@@ -184,6 +194,39 @@ |
params->button.has_border = false; |
params->button.classic_state = 0; |
params->button.background_color = SkColorSetARGB(0, 0, 0, 0); |
+ |
+#if defined(OS_WIN) |
+ gfx::NativeTheme::Part part = GetThemePart(); |
+ switch(part) { |
+ case gfx::NativeTheme::kPushButton: |
+ params->button.classic_state = DFCS_BUTTONPUSH; |
+ break; |
+ case gfx::NativeTheme::kRadio: |
+ params->button.classic_state = DFCS_BUTTONRADIO; |
+ params->button.classic_state |= is_checked_ ? DFCS_CHECKED : 0; |
+ break; |
+ case gfx::NativeTheme::kCheckbox: |
+ params->button.classic_state = DFCS_BUTTONCHECK; |
+ params->button.classic_state |= is_checked_ ? DFCS_CHECKED : 0; |
+ break; |
+ } |
+ |
+ gfx::NativeTheme::State state = GetInternalState(); |
+ switch(state) { |
+ case gfx::NativeTheme::kDisabled: |
+ params->button.classic_state |= DFCS_INACTIVE; |
+ break; |
+ case gfx::NativeTheme::kNormal: |
+ break; |
+ case gfx::NativeTheme::kHovered: |
+ break; |
+ case gfx::NativeTheme::kPressed: |
+ params->button.classic_state |= DFCS_PUSHED; |
+ break; |
+ default: |
+ DCHECK(false); |
+ } |
+#endif |
} |
const ui::Animation* ExampleNativeThemeButton::GetThemeAnimation() const { |
@@ -194,12 +237,18 @@ |
gfx::NativeTheme::State ExampleNativeThemeButton::GetBackgroundThemeState( |
gfx::NativeTheme::ExtraParams* params) const { |
GetExtraParams(params); |
+#if defined(OS_WIN) |
+ params->button.classic_state &= ~(DFCS_PUSHED | DFCS_INACTIVE); |
+#endif |
return gfx::NativeTheme::kNormal; |
} |
gfx::NativeTheme::State ExampleNativeThemeButton::GetForegroundThemeState( |
gfx::NativeTheme::ExtraParams* params) const { |
GetExtraParams(params); |
+#if defined(OS_WIN) |
+ params->button.classic_state &= ~(DFCS_PUSHED | DFCS_INACTIVE); |
+#endif |
return gfx::NativeTheme::kHovered; |
} |