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

static_library("dom4_keycode_converter") {
  sources = [
    "keycodes/dom4/keycode_converter.cc",
    "keycodes/dom4/keycode_converter.h",
    "keycodes/dom4/keycode_converter_data.h",
  ]

  deps = [
    "//base",
  ]
}

component("events_base") {
  sources = [
    "android/scroller.cc",
    "android/scroller.h",
    "device_data_manager.cc",
    "device_data_manager.h",
    "device_hotplug_event_observer.h",
    "event_constants.h",
    "event_switches.cc",
    "event_switches.h",
    "events_base_export.h",
    "gesture_curve.h",
    "gesture_event_details.cc",
    "gesture_event_details.h",
    "gestures/fling_curve.cc",
    "gestures/fling_curve.h",
    "gestures/gesture_configuration.cc",
    "gestures/gesture_configuration.h",
    "keycodes/keyboard_code_conversion.cc",
    "keycodes/keyboard_code_conversion.h",
    "keycodes/keyboard_code_conversion_android.cc",
    "keycodes/keyboard_code_conversion_android.h",
    "keycodes/keyboard_code_conversion_mac.h",
    "keycodes/keyboard_code_conversion_mac.mm",
    "keycodes/keyboard_code_conversion_win.cc",
    "keycodes/keyboard_code_conversion_win.h",
    "keycodes/keyboard_codes.h",
    "latency_info.cc",
    "latency_info.h",
    "touchscreen_device.cc",
    "touchscreen_device.h",
  ]

  defines = [ "EVENTS_BASE_IMPLEMENTATION" ]

  deps = [
    ":dom4_keycode_converter",
    "//base/third_party/dynamic_annotations",
    "//skia",
  ]

  public_deps = [
    "//base",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (use_x11) {
    configs += [ "//build/config/linux:x11" ]

    sources += [
      "keycodes/keyboard_code_conversion_x.cc",
      "keycodes/keyboard_code_conversion_x.h",
      "x/device_data_manager_x11.cc",
      "x/device_data_manager_x11.h",
      "x/device_list_cache_x.cc",
      "x/device_list_cache_x.h",
      "x/hotplug_event_handler_x11.cc",
      "x/hotplug_event_handler_x11.h",
      "x/keysym_to_unicode.cc",
      "x/keysym_to_unicode.h",
      "x/touch_factory_x11.cc",
      "x/touch_factory_x11.h",
    ]

    deps += [ "//ui/gfx/x" ]
  }
}

component("events") {
  sources = [
    "cocoa/cocoa_event_utils.h",
    "cocoa/cocoa_event_utils.mm",
    "cocoa/events_mac.mm",
    "event.cc",
    "event.h",
    "event_dispatcher.cc",
    "event_dispatcher.h",
    "event_handler.cc",
    "event_handler.h",
    "event_processor.cc",
    "event_processor.h",
    "event_rewriter.h",
    "event_source.cc",
    "event_source.h",
    "event_target.cc",
    "event_target.h",
    "event_target_iterator.h",
    "event_targeter.cc",
    "event_targeter.h",
    "event_utils.cc",
    "event_utils.h",
    "events_export.h",
    "events_stub.cc",
    "gestures/gesture_provider_impl.cc",
    "gestures/gesture_provider_impl.h",
    "gestures/gesture_recognizer.h",
    "gestures/gesture_recognizer_impl.cc",
    "gestures/gesture_recognizer_impl.h",
    "gestures/gesture_recognizer_impl_mac.cc",
    "gestures/gesture_types.h",
    "gestures/motion_event_impl.cc",
    "gestures/motion_event_impl.h",
    "win/events_win.cc",
  ]

  defines = [ "EVENTS_IMPLEMENTATION" ]

  public_deps = [
    ":events_base",
  ]
  deps = [
    ":dom4_keycode_converter",
    ":gesture_detection",
    "//base/third_party/dynamic_annotations",
    "//skia",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (use_x11) {
    sources += [ "x/events_x.cc" ]
    configs += [
      "//build/config/linux:glib",
      "//build/config/linux:x11",
    ]
    deps += [ "//ui/gfx/x" ]
  }

  if (is_win || is_mac || use_x11) {
    sources -= [ "events_stub.cc" ]
  }
}

component("gesture_detection") {
  sources = [
    "gesture_detection/bitset_32.h",
    "gesture_detection/filtered_gesture_provider.cc",
    "gesture_detection/filtered_gesture_provider.h",
    "gesture_detection/gesture_config_helper.h",
    "gesture_detection/gesture_detection_export.h",
    "gesture_detection/gesture_detector.cc",
    "gesture_detection/gesture_detector.h",
    "gesture_detection/gesture_event_data.cc",
    "gesture_detection/gesture_event_data.h",
    "gesture_detection/gesture_event_data_packet.cc",
    "gesture_detection/gesture_event_data_packet.h",
    "gesture_detection/gesture_listeners.cc",
    "gesture_detection/gesture_listeners.h",
    "gesture_detection/gesture_provider.cc",
    "gesture_detection/gesture_provider.h",
    "gesture_detection/gesture_touch_uma_histogram.cc",
    "gesture_detection/gesture_touch_uma_histogram.h",
    "gesture_detection/motion_event.cc",
    "gesture_detection/motion_event.h",
    "gesture_detection/motion_event_buffer.cc",
    "gesture_detection/motion_event_buffer.h",
    "gesture_detection/motion_event_generic.cc",
    "gesture_detection/motion_event_generic.h",
    "gesture_detection/scale_gesture_detector.cc",
    "gesture_detection/scale_gesture_detector.h",
    "gesture_detection/scale_gesture_listeners.cc",
    "gesture_detection/scale_gesture_listeners.h",
    "gesture_detection/snap_scroll_controller.cc",
    "gesture_detection/snap_scroll_controller.h",
    "gesture_detection/touch_disposition_gesture_filter.cc",
    "gesture_detection/touch_disposition_gesture_filter.h",
    "gesture_detection/velocity_tracker_state.cc",
    "gesture_detection/velocity_tracker_state.h",
    "gesture_detection/velocity_tracker.cc",
    "gesture_detection/velocity_tracker.h",
    "gesture_detection/gesture_config_helper_aura.cc",
  ]

  deps = [
    ":events_base",
    "//base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  defines = [ "GESTURE_DETECTION_IMPLEMENTATION" ]
}

source_set("test_support") {
  sources = [
    "test/cocoa_test_event_utils.h",
    "test/cocoa_test_event_utils.mm",
    "test/events_test_utils.cc",
    "test/events_test_utils.h",
    "test/mock_motion_event.cc",
    "test/mock_motion_event.h",
    "test/platform_event_waiter.cc",
    "test/platform_event_waiter.h",
    "test/test_event_handler.cc",
    "test/test_event_handler.h",
    "test/test_event_processor.cc",
    "test/test_event_processor.h",
    "test/test_event_target.cc",
    "test/test_event_target.h",
  ]

  public_deps = [
    ":events",
    ":events_base",
    ":gesture_detection",
  ]
  deps = [
    "//base",
    "//skia",
    "//ui/events/platform",
    "//ui/gfx/geometry",
  ]

  if (is_ios) {
    sources -= [
      "test/cocoa_test_event_utils.h",
      "test/cocoa_test_event_utils.mm",
    ]
  }

  if (use_x11) {
    sources += [
      "test/events_test_utils_x11.cc",
      "test/events_test_utils_x11.h",
    ]
    deps += [ "//ui/gfx/x" ]
  }
}

test("events_unittests") {
  sources = [
    "android/scroller_unittest.cc",
    "cocoa/events_mac_unittest.mm",
    "event_dispatcher_unittest.cc",
    "event_processor_unittest.cc",
    "event_rewriter_unittest.cc",
    "event_unittest.cc",
    "gesture_detection/bitset_32_unittest.cc",
    "gesture_detection/gesture_event_data_packet_unittest.cc",
    "gesture_detection/gesture_provider_unittest.cc",
    "gesture_detection/motion_event_buffer_unittest.cc",
    "gesture_detection/motion_event_generic_unittest.cc",
    "gesture_detection/touch_disposition_gesture_filter_unittest.cc",
    "gesture_detection/velocity_tracker_unittest.cc",
    "gestures/fling_curve_unittest.cc",
    "gestures/gesture_provider_impl_unittest.cc",
    "keycodes/dom4/keycode_converter_unittest.cc",
    "latency_info_unittest.cc",
    "platform/platform_event_source_unittest.cc",
    "x/events_x_unittest.cc",
  ]

  deps = [
    ":dom4_keycode_converter",
    ":events",
    ":events_base",
    ":gesture_detection",
    ":test_support",
    "//base",
    "//base/test:run_all_unittests",
    "//skia",
    "//testing/gtest",
    "//ui/events/platform",
    "//ui/gfx:test_support",
  ]

  if (use_x11) {
    configs += [ "//build/config/linux:x11" ]
    deps += [ "//ui/gfx/x" ]
  } else {
    sources -= [ "x/events_x_unittest.cc" ]
  }
}
