# 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/tools/bindings/mojom.gni")

assert(use_aura)

shared_library("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/system:for_shared_library",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/utility",
    "//mojo/public/gles2:for_shared_library",
    "//mojo/services/public/cpp/view_manager",
    "//mojo/services/public/interfaces/geometry",
    "//mojo/services/public/interfaces/input_events",
    "//mojo/services/public/interfaces/navigation",
    "//mojo/services/window_manager:lib",
    "//mojo/views:views",
    "//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/public/interfaces/geometry",
  ]
}

