# 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")
import("//chromecast/chromecast.gni")
import("//testing/test.gni")

cast_source_set("graphics") {
  sources = [
    "cast_touch_activity_observer.h",
    "cast_window_manager.h",
    "gestures/cast_gesture_handler.cc",
    "gestures/cast_gesture_handler.h",
  ]

  deps = [
    "//base",
    "//ui/gfx",
  ]

  if (use_aura) {
    sources += [
      "accessibility/accessibility_cursor_ring_layer.cc",
      "accessibility/accessibility_cursor_ring_layer.h",
      "accessibility/accessibility_focus_ring.cc",
      "accessibility/accessibility_focus_ring.h",
      "accessibility/accessibility_focus_ring_controller.cc",
      "accessibility/accessibility_focus_ring_controller.h",
      "accessibility/accessibility_focus_ring_layer.cc",
      "accessibility/accessibility_focus_ring_layer.h",
      "accessibility/accessibility_highlight_layer.cc",
      "accessibility/accessibility_highlight_layer.h",
      "accessibility/accessibility_layer.cc",
      "accessibility/accessibility_layer.h",
      "accessibility/accessibility_observer.h",
      "accessibility/focus_ring_controller.cc",
      "accessibility/focus_ring_controller.h",
      "accessibility/focus_ring_layer.cc",
      "accessibility/focus_ring_layer.h",
      "accessibility/fullscreen_magnification_controller.cc",
      "accessibility/fullscreen_magnification_controller.h",
      "accessibility/magnification_controller.h",
      "accessibility/partial_magnification_controller.cc",
      "accessibility/partial_magnification_controller.h",
      "cast_display_util.cc",
      "cast_display_util.h",
      "cast_focus_client_aura.cc",
      "cast_focus_client_aura.h",
      "cast_touch_event_gate.cc",
      "cast_touch_event_gate.h",
      "cast_window_manager_aura.cc",
      "cast_window_manager_aura.h",
      "gestures/cast_system_gesture_dispatcher.cc",
      "gestures/cast_system_gesture_dispatcher.h",
      "gestures/cast_system_gesture_event_handler.cc",
      "gestures/cast_system_gesture_event_handler.h",
      "gestures/multiple_tap_detector.cc",
      "gestures/multiple_tap_detector.h",
      "gestures/side_swipe_detector.cc",
      "gestures/side_swipe_detector.h",
    ]

    deps += [
      "//ui/base/ime/init",
      "//ui/events:gesture_detection",
      "//ui/views",
      "//ui/wm",
      "//ui/wm/public",
    ]
  } else {
    sources += [
      "cast_window_manager_default.cc",
      "cast_window_manager_default.h",
    ]
  }

  if (use_aura) {
    sources += [
      "cast_screen.cc",
      "cast_screen.h",
    ]

    deps += [
      ":libcast_graphics_1.0",
      "//chromecast/base",
      "//chromecast/public",
      "//skia",
      "//ui/aura",
      "//ui/compositor",
      "//ui/display",
      "//ui/gfx/geometry",
      "//ui/platform_window",
    ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }
}

cast_shared_library("libcast_graphics_1.0") {
  sources = [
    "cast_egl_platform_default.cc",
    "graphics_properties_default.cc",
    "osd_plane_default.cc",
  ]

  public_deps = [
    "//chromecast/public",
  ]

  deps = [
    "//base",
    "//chromecast/base:chromecast_switches",
    "//chromecast/base:init_shlib",
  ]
}

if (use_aura && !is_cast_audio_only) {
  test("cast_graphics_unittests") {
    sources = [
      "accessibility/accessibility_focus_ring_controller_unittest.cc",
      "accessibility/partial_magnification_controller_unittest.cc",
      "cast_display_util_unittest.cc",
      "cast_focus_client_aura_test.cc",
      "cast_touch_event_gate_test.cc",
      "cast_views_test.cc",
      "cast_window_manager_aura_test.cc",
      "gestures/cast_system_gesture_dispatcher_test.cc",
      "gestures/multiple_tap_detector_test.cc",
      "gestures/side_swipe_detector_test.cc",
      "run_all_unittests.cc",
    ]
    deps = [
      ":graphics",
      "//base/test:test_support",
      "//mojo/core/embedder",
      "//testing/gmock",
      "//testing/gtest",
      "//ui/aura",
      "//ui/aura:test_support",
      "//ui/base:test_support",
      "//ui/display/manager:manager",
      "//ui/events:test_support",
      "//ui/gfx",
      "//ui/gl:test_support",
      "//ui/platform_window",
      "//ui/views",
      "//ui/views:test_support",
      "//ui/wm",
    ]
  }
}
