# 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")

assert(use_aura)

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

  sources = [
    "debug_panel.cc",
    "debug_panel.h",
    "window_manager.cc",
  ]

  deps = [
    ":bindings",
    "//base",
    "//examples/keyboard:bindings",
    "//mojo/application",
    "//mojo/aura",
    "//mojo/converters/geometry",
    "//mojo/converters/input_events",
    "//mojo/public/c/gles2",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/utility",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/public/interfaces/input_events",
    "//mojo/services/public/interfaces/navigation",
    "//mojo/services/view_manager/public/cpp",
    "//mojo/views:views",
    "//services/window_manager:lib",
    "//ui/aura",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/resources",
    "//ui/views",
    "//ui/wm",
  ]
}

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