# Copyright 2014 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.

import("//build/config/ui.gni")
import("//mojo/public/mojo_application.gni")
import("//mojo/public/tools/bindings/mojom.gni")

mojo_native_application("window_manager") {
  output_name = "example_window_manager"

  sources = [
    "window_manager.cc",
  ]

  deps = [
    ":bindings",
    "//base",
    "//mojo/application",
    "//mojo/converters/geometry",
    "//mojo/converters/input_events",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/utility",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/input_events/public/interfaces",
    "//mojo/services/navigation/public/interfaces",
    "//mojo/services/view_manager/public/cpp",
    "//services/window_manager:lib",
    "//ui/events:events",
    "//ui/gfx/geometry",
    "//url:url",
  ]
}

mojom("bindings") {
  sources = [
    "debug_panel_host.mojom",
    "window_manager.mojom",
  ]
  import_dirs = [ get_path_info("../../mojo/services", "abspath") ]
  deps = [
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/network/public/interfaces",
  ]
}
