| Index: ui/aura/root_window.cc
|
| diff --git a/ui/aura/root_window.cc b/ui/aura/root_window.cc
|
| index 649bc9a7ea94e2204b986aef5914dee3a2892333..5585934bb66a4833843ca11e9c2a5bc3316a2260 100644
|
| --- a/ui/aura/root_window.cc
|
| +++ b/ui/aura/root_window.cc
|
| @@ -119,6 +119,7 @@ RootWindow::RootWindow(const CreateParams& params)
|
| mouse_move_hold_count_(0),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(held_mouse_event_factory_(this)) {
|
| SetName("RootWindow");
|
| + host_->SetInsets(params.initial_insets);
|
|
|
| compositor_.reset(new ui::Compositor(this, host_->GetAcceleratedWidget()));
|
| DCHECK(compositor_.get());
|
| @@ -154,8 +155,8 @@ void RootWindow::Init() {
|
| host_->GetBounds().size());
|
| Window::Init(ui::LAYER_NOT_DRAWN);
|
| compositor()->SetRootLayer(layer());
|
| - SetBounds(
|
| - ui::ConvertRectToDIP(layer(), gfx::Rect(host_->GetBounds().size())));
|
| + SetTransformInternal(gfx::Transform());
|
| + UpdateWindowSize(host_->GetBounds().size());
|
| Env::GetInstance()->NotifyRootWindowInitialized(this);
|
| Show();
|
| }
|
| @@ -197,8 +198,14 @@ gfx::Size RootWindow::GetHostSize() const {
|
| }
|
|
|
| void RootWindow::SetHostBounds(const gfx::Rect& bounds_in_pixel) {
|
| + SetHostBoundsAndInsets(bounds_in_pixel, gfx::Insets());
|
| +}
|
| +
|
| +void RootWindow::SetHostBoundsAndInsets(const gfx::Rect& bounds_in_pixel,
|
| + const gfx::Insets& insets_in_pixel) {
|
| DCHECK(!bounds_in_pixel.IsEmpty());
|
| DispatchHeldMouseMove();
|
| + host_->SetInsets(insets_in_pixel);
|
| host_->SetBounds(bounds_in_pixel);
|
| synthesize_mouse_move_ = false;
|
| }
|
| @@ -443,7 +450,7 @@ const RootWindow* RootWindow::GetRootWindow() const {
|
| }
|
|
|
| void RootWindow::SetTransform(const gfx::Transform& transform) {
|
| - Window::SetTransform(transform);
|
| + SetTransformInternal(transform);
|
|
|
| // If the layer is not animating, then we need to update the host size
|
| // immediately.
|
| @@ -451,6 +458,19 @@ void RootWindow::SetTransform(const gfx::Transform& transform) {
|
| OnHostResized(host_->GetBounds().size());
|
| }
|
|
|
| +void RootWindow::SetTransformInternal(const gfx::Transform& transform) {
|
| + gfx::Insets insets = host_->GetInsets();
|
| + if (insets.top() != 0 || insets.left() != 0) {
|
| + float device_scale_factor = GetDeviceScaleFactor();
|
| + gfx::Transform translate;
|
| + translate.Translate(insets.left() / device_scale_factor,
|
| + insets.top() / device_scale_factor);
|
| + Window::SetTransform(translate * transform);
|
| + } else {
|
| + Window::SetTransform(transform);
|
| + }
|
| +}
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // RootWindow, ui::EventTarget implementation:
|
|
|
| @@ -722,6 +742,17 @@ void RootWindow::CleanupGestureRecognizerState(Window* window) {
|
| }
|
| }
|
|
|
| +void RootWindow::UpdateWindowSize(const gfx::Size& host_size) {
|
| + gfx::Rect bounds(host_size);
|
| + bounds.Inset(host_->GetInsets());
|
| + bounds = ui::ConvertRectToDIP(layer(), bounds);
|
| + gfx::RectF new_bounds(bounds);
|
| + layer()->transform().TransformRect(&new_bounds);
|
| + // Ignore the origin because RootWindow's insets are handled by
|
| + // the transform.
|
| + SetBounds(gfx::Rect(gfx::ToNearestRect(new_bounds).size()));
|
| +}
|
| +
|
| void RootWindow::OnWindowAddedToRootWindow(Window* attached) {
|
| if (attached->IsVisible() &&
|
| attached->ContainsPointInRoot(GetLastMouseLocationInRoot()))
|
| @@ -924,10 +955,8 @@ void RootWindow::OnHostResized(const gfx::Size& size) {
|
| // The layer, and all the observers should be notified of the
|
| // transformed size of the root window.
|
| gfx::Size old(bounds().size());
|
| - gfx::RectF bounds(ui::ConvertSizeToDIP(layer(), size));
|
| - layer()->transform().TransformRect(&bounds);
|
| - // The transform is expected to produce an integer rect as its output.
|
| - SetBounds(gfx::ToNearestRect(bounds));
|
| + UpdateWindowSize(size);
|
| + // TODO(oshima): Rename this to OnHostWindowResized.
|
| FOR_EACH_OBSERVER(RootWindowObserver, observers_,
|
| OnRootWindowResized(this, old));
|
| }
|
|
|