// Copyright 2017 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.

#ifndef ASH_HOST_ASH_WINDOW_TREE_HOST_MIRRORING_UNIFIED_H_
#define ASH_HOST_ASH_WINDOW_TREE_HOST_MIRRORING_UNIFIED_H_

#include "ash/host/ash_window_tree_host_platform.h"

namespace ash {

class AshWindowTreeHostMirroringDelegate;

// A window tree host for the mirroing displays that constitute the unified
// desktop. This correctly handles coordinates conversion from DIP to pixels and
// vice versa.
class AshWindowTreeHostMirroringUnified : public AshWindowTreeHostPlatform {
 public:
  AshWindowTreeHostMirroringUnified(
      const gfx::Rect& initial_bounds,
      int64_t mirroring_display_id,
      AshWindowTreeHostMirroringDelegate* delegate);
  ~AshWindowTreeHostMirroringUnified() override;

  // aura::WindowTreeHost:
  gfx::Transform GetRootTransformForLocalEventCoordinates() const override;
  void ConvertDIPToPixels(gfx::Point* point) const override;
  void ConvertPixelsToDIP(gfx::Point* point) const override;

  // ash::AshWindowTreeHostPlatform:
  void PrepareForShutdown() override;

 private:
  int64_t mirroring_display_id_;

  AshWindowTreeHostMirroringDelegate* delegate_;  // Not owned.

  bool is_shutting_down_ = false;

  DISALLOW_COPY_AND_ASSIGN(AshWindowTreeHostMirroringUnified);
};

}  // namespace ash

#endif  // ASH_HOST_ASH_WINDOW_TREE_HOST_MIRRORING_UNIFIED_H_
