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

component("aura_extra") {
  sources = [
    "aura_extra_export.h",
    "image_window_delegate.cc",
    "image_window_delegate.h",
    "window_occlusion_impl_win.cc",
    "window_occlusion_impl_win.h",
    "window_occlusion_win.cc",
    "window_occlusion_win.h",
  ]

  defines = [ "AURA_EXTRA_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//skia",
    "//ui/aura",
    "//ui/base",
    "//ui/compositor",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
}

source_set("vector_resource") {
  sources = [
    "skia_vector_resource.cc",
    "skia_vector_resource.h",
  ]

  deps = [
    "//base",
    "//cc/paint",
    "//third_party/zlib/google:compression_utils",
    "//ui/base",
    "//ui/display",
  ]
}

source_set("window_position_in_root_monitor") {
  sources = [
    "window_position_in_root_monitor.cc",
    "window_position_in_root_monitor.h",
  ]

  deps = [
    "//base",
    "//ui/aura",
  ]
}

source_set("tests") {
  testonly = true

  sources = [
    "window_occlusion_impl_unittest_win.cc",
    "window_position_in_root_monitor_unittest.cc",
  ]

  deps = [
    ":aura_extra",
    ":window_position_in_root_monitor",
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/gfx/geometry",
    "//ui/platform_window",
  ]
}
