# Copyright 2016 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("//services/service_manager/public/service_manifest.gni")

source_set("lib") {
  sources = [
    "tap_renderer.cc",
    "tap_renderer.h",
    "tap_visualizer_app.cc",
    "tap_visualizer_app.h",
  ]

  deps = [
    "//ash/public/cpp",
    "//base",
    "//cc/paint",
    "//services/service_manager/public/cpp",
    "//services/ui/public/cpp",
    "//services/ui/public/interfaces",
    "//skia",
    "//ui/compositor",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/views",
    "//ui/views/mus:for_mojo_application",
    "//ui/views/mus:resources",
  ]
}

service_manifest("manifest") {
  name = "tap_visualizer_app"
  source = "manifest.json"
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "tap_visualizer_app_unittest.cc",
  ]
  deps = [
    ":lib",
    "//testing/gtest",
    "//ui/aura:test_support",
    "//ui/views",
    "//ui/views:test_support",
    "//ui/views/mus",
  ]
}
