return false;
}
+bool IsShadowAlwaysActive(aura::Window* window) {
+ return GetShadowType(window) == SHADOW_TYPE_RECTANGULAR_ALWAYS_ACTIVE;
+}
+
+Shadow::Style GetShadowStyleForWindow(aura::Window* window) {
+ return ShouldUseSmallShadowForWindow(window) ? Shadow::STYLE_SMALL :
+ ((IsActiveWindow(window) || IsShadowAlwaysActive(window)) ?
+ Shadow::STYLE_ACTIVE : Shadow::STYLE_INACTIVE);
+}
+
// Returns the shadow style to be applied to |losing_active| when it is losing
// active to |gaining_active|. |gaining_active| may be of a type that hides when
// inactive, and as such we do not want to render |losing_active| as inactive.
Shadow::Style GetShadowStyleForWindowLosingActive(
aura::Window* losing_active,
aura::Window* gaining_active) {
+ if (IsShadowAlwaysActive(losing_active))
+ return Shadow::STYLE_ACTIVE;
+
if (gaining_active && aura::client::GetHideOnDeactivate(gaining_active)) {
aura::Window::Windows::const_iterator it =
std::find(GetTransientChildren(losing_active).begin(),
case SHADOW_TYPE_NONE:
return false;
case SHADOW_TYPE_RECTANGULAR:
+ case SHADOW_TYPE_RECTANGULAR_ALWAYS_ACTIVE:
return true;
default:
NOTREACHED() << "Unknown shadow type " << type;
aura::Window* window) {
const bool should_show = ShouldShowShadowForWindow(window);
Shadow* shadow = GetShadowForWindow(window);
- if (shadow)
+ if (shadow) {
+ shadow->SetStyle(GetShadowStyleForWindow(window));
shadow->layer()->SetVisible(should_show);
- else if (should_show && !shadow)
+ } else if (should_show && !shadow) {
CreateShadowForWindow(window);
+ }
}
void ShadowController::Impl::CreateShadowForWindow(aura::Window* window) {
linked_ptr<Shadow> shadow(new Shadow());
window_shadows_.insert(make_pair(window, shadow));
-
- shadow->Init(ShouldUseSmallShadowForWindow(window) ?
- Shadow::STYLE_SMALL : Shadow::STYLE_ACTIVE);
+ shadow->Init(GetShadowStyleForWindow(window));
shadow->SetContentBounds(gfx::Rect(window->bounds().size()));
shadow->layer()->SetVisible(ShouldShowShadowForWindow(window));
window->layer()->Add(shadow->layer());