# 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_external_begin_frame_source.cc",
      "cast_external_begin_frame_source.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 += [
      "//components/viz/common",
      "//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",
    ]
  }
}
