r119184 - in trunk/src: ash/tooltips ash/wm ui/aura ui/views/widget

1 view
Skip to first unread message

xiy...@chromium.org

unread,
Jan 25, 2012, 10:24:06 PM1/25/12
to chromium...@chromium.org
Author: xiy...@chromium.org
Date: Wed Jan 25 19:24:06 2012
New Revision: 119184

Log:
aura: No shadow for transparent window.

- Add a transparent flag to Window;
- Use the transparent in Window::Init to call Layer::SetFillsBoundsOpaquely;
- Update ShadowController to use SHADOW_TYPE_NONE for transparent window;

Side change:
- Make tooltip widget non-transparent as it needs the default shadow;

BUG=110916
TEST=Verify fix for issue 110916 and drop-n-drop works as before.


Review URL: http://codereview.chromium.org/9169050

Modified:
trunk/src/ash/tooltips/tooltip_controller.cc
trunk/src/ash/wm/shadow_controller.cc
trunk/src/ui/aura/window.cc
trunk/src/ui/aura/window.h
trunk/src/ui/views/widget/native_widget_aura.cc

Modified: trunk/src/ash/tooltips/tooltip_controller.cc
==============================================================================
--- trunk/src/ash/tooltips/tooltip_controller.cc (original)
+++ trunk/src/ash/tooltips/tooltip_controller.cc Wed Jan 25 19:24:06 2012
@@ -113,7 +113,6 @@
params.type = views::Widget::InitParams::TYPE_TOOLTIP;
params.keep_on_top = true;
params.accept_events = false;
- params.transparent = true;
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
widget->Init(params);
return widget;

Modified: trunk/src/ash/wm/shadow_controller.cc
==============================================================================
--- trunk/src/ash/wm/shadow_controller.cc (original)
+++ trunk/src/ash/wm/shadow_controller.cc Wed Jan 25 19:24:06 2012
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

@@ -22,7 +22,11 @@

namespace {

-ShadowType GetShadowTypeFromWindowType(aura::Window* window) {
+ShadowType GetShadowTypeFromWindow(aura::Window* window) {
+ // No shadow for transparent window.
+ if (window->transparent())
+ return SHADOW_TYPE_NONE;
+
switch (window->type()) {
case aura::client::WINDOW_TYPE_NORMAL:
case aura::client::WINDOW_TYPE_PANEL:
@@ -54,7 +58,7 @@

void ShadowController::OnWindowInitialized(aura::Window* window) {
window->AddObserver(this);
- SetShadowType(window, GetShadowTypeFromWindowType(window));
+ SetShadowType(window, GetShadowTypeFromWindow(window));
HandlePossibleShadowVisibilityChange(window);
}

Modified: trunk/src/ui/aura/window.cc
==============================================================================
--- trunk/src/ui/aura/window.cc (original)
+++ trunk/src/ui/aura/window.cc Wed Jan 25 19:24:06 2012
@@ -41,6 +41,7 @@
parent_(NULL),
transient_parent_(NULL),
id_(-1),
+ transparent_(false),
user_data_(NULL),
stops_event_propagation_(false),
ignore_events_(false) {
@@ -100,6 +101,7 @@
layer_->SetVisible(false);
layer_->set_delegate(this);
UpdateLayerName(name_);
+ layer_->SetFillsBoundsOpaquely(!transparent_);

RootWindow::GetInstance()->WindowInitialized(this);
}
@@ -117,6 +119,12 @@
UpdateLayerName(name_);
}

+void Window::SetTransparent(bool transparent) {
+ // Cannot change transparent flag after the window is initialized.
+ DCHECK(!layer());
+ transparent_ = transparent;
+}
+
ui::Layer* Window::AcquireLayer() {
return layer_.release();
}

Modified: trunk/src/ui/aura/window.h
==============================================================================
--- trunk/src/ui/aura/window.h (original)
+++ trunk/src/ui/aura/window.h Wed Jan 25 19:24:06 2012
@@ -70,6 +70,9 @@
const string16 title() const { return title_; }
void set_title(const string16& title) { title_ = title; }

+ bool transparent() const { return transparent_; }
+ void SetTransparent(bool transparent);
+
ui::Layer* layer() { return layer_.get(); }
const ui::Layer* layer() const { return layer_.get(); }

@@ -341,6 +344,9 @@

string16 title_;

+ // Whether layer is initialized as non-opaque.
+ bool transparent_;
+
scoped_ptr<EventFilter> event_filter_;
scoped_ptr<LayoutManager> layout_manager_;

Modified: trunk/src/ui/views/widget/native_widget_aura.cc
==============================================================================
--- trunk/src/ui/views/widget/native_widget_aura.cc (original)
+++ trunk/src/ui/views/widget/native_widget_aura.cc Wed Jan 25 19:24:06 2012
@@ -166,13 +166,13 @@
window_->SetType(GetAuraWindowTypeForWidgetType(window_type));
// TODO(jamescook): Should this use params.show_state instead?
window_->SetIntProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
+ window_->SetTransparent(params.transparent);
window_->Init(params.create_texture_for_layer ?
ui::Layer::LAYER_HAS_TEXTURE :
ui::Layer::LAYER_HAS_NO_TEXTURE);
if (window_type == Widget::InitParams::TYPE_CONTROL)
window_->Show();

- window_->layer()->SetFillsBoundsOpaquely(!params.transparent);
delegate_->OnNativeWidgetCreated();
window_->SetBounds(params.bounds);
if (window_type == Widget::InitParams::TYPE_CONTROL) {

Reply all
Reply to author
Forward
0 new messages