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

if (is_android) {
  import("//build/config/android/rules.gni")
}

if (is_ios) {
  import("//ios/build/config.gni")
}

static_library("dom_keycode_converter") {
  sources = [
    "keycodes/dom/dom_code.h",
    "keycodes/dom/dom_key.h",
    "keycodes/dom/dom_key_data.inc",
    "keycodes/dom/keycode_converter.cc",
    "keycodes/dom/keycode_converter.h",
    "keycodes/dom/keycode_converter_data.inc",
  ]

  deps = [
    "//base",
  ]

  if (!is_ios) {
    deps += [ "//ipc:param_traits" ]
  }
}

component("events_base") {
  sources = [
    "android/scroller.cc",
    "android/scroller.h",
    "base_event_utils.cc",
    "base_event_utils.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",
    "keycodes/dom_us_layout_data.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",
  ]

  defines = [ "EVENTS_BASE_IMPLEMENTATION" ]

  deps = [
    "//base/third_party/dynamic_annotations",
  ]

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

  if (use_x11) {
    public_deps += [ "//ui/events/keycodes:x11" ]
  }

  if (!is_ios) {
    deps += [ "//ipc:param_traits" ]
  }

  if (is_mac) {
    libs = [
      "AppKit.framework",
      "Carbon.framework",
    ]
  }
}

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.h",
    "event_utils.cc",
    "event_utils.h",
    "events_export.h",
    "events_stub.cc",
    "gestures/gesture_recognizer_impl_mac.cc",
    "gestures/gesture_types.h",
    "keycodes/platform_key_map_win.cc",
    "keycodes/platform_key_map_win.h",
    "null_event_targeter.cc",
    "null_event_targeter.h",
    "scoped_target_handler.cc",
    "scoped_target_handler.h",
    "win/events_win.cc",
    "win/system_event_state_lookup.cc",
    "win/system_event_state_lookup.h",
  ]

  defines = [ "EVENTS_IMPLEMENTATION" ]

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

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

  if (use_ozone || (is_android && use_aura)) {
    sources += [ "events_default.cc" ]
  }

  if (use_ozone) {
    sources += [
      "ozone/events_ozone.cc",
      "ozone/events_ozone.h",
    ]
    deps += [ "//ui/events/ozone:events_ozone_layout" ]
  }

  if (use_aura) {
    sources += [
      "gestures/gesture_provider_aura.cc",
      "gestures/gesture_provider_aura.h",
      "gestures/gesture_recognizer.h",
      "gestures/gesture_recognizer_impl.cc",
      "gestures/gesture_recognizer_impl.h",
      "gestures/motion_event_aura.cc",
      "gestures/motion_event_aura.h",
    ]
  }

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

  if (is_android) {
    sources += [
      "android/events_jni_registrar.cc",
      "android/events_jni_registrar.h",
      "android/key_event_utils.cc",
      "android/key_event_utils.h",
      "android/motion_event_android.cc",
      "android/motion_event_android.h",
    ]
    deps += [
      ":keyevent_jni_headers",
      ":motionevent_jni_headers",
    ]
  }

  if (is_mac) {
    libs = [ "AppKit.framework" ]
  }
}

component("gesture_detection") {
  sources = [
    "gesture_detection/bitset_32.h",
    "gesture_detection/filtered_gesture_provider.cc",
    "gesture_detection/filtered_gesture_provider.h",
    "gesture_detection/gesture_configuration.cc",
    "gesture_detection/gesture_configuration.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_provider_config_helper.cc",
    "gesture_detection/gesture_provider_config_helper.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.cc",
    "gesture_detection/velocity_tracker.h",
    "gesture_detection/velocity_tracker_state.cc",
    "gesture_detection/velocity_tracker_state.h",
  ]

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

  defines = [ "GESTURE_DETECTION_IMPLEMENTATION" ]

  if (is_android) {
    sources += [ "gesture_detection/gesture_configuration_android.cc" ]
  } else if (use_aura) {
    sources += [ "gesture_detection/gesture_configuration_aura.cc" ]
  } else {
    sources += [ "gesture_detection/gesture_configuration_default.cc" ]
  }
}

source_set("test_support") {
  sources = [
    "test/cocoa_test_event_utils.h",
    "test/cocoa_test_event_utils.mm",
    "test/device_data_manager_test_api.h",
    "test/event_generator.cc",
    "test/event_generator.h",
    "test/events_test_utils.cc",
    "test/events_test_utils.h",
    "test/motion_event_test_utils.cc",
    "test/motion_event_test_utils.h",
    "test/platform_event_source_test_api.cc",
    "test/platform_event_source_test_api.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",
    "test/test_event_targeter.cc",
    "test/test_event_targeter.h",
  ]

  public_deps = [
    ":events",
    ":events_base",
    ":gesture_detection",
    "//ui/events/devices",
  ]
  deps = [
    "//base",
    "//skia",
    "//ui/events/platform",
    "//ui/gfx",
    "//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/events/devices/x11",
      "//ui/gfx/x",
    ]
  }

  if (use_x11 || ozone_platform_x11) {
    deps += [ "//ui/events/x" ]
  }

  if (use_x11 || use_ozone) {
    sources += [ "test/device_data_manager_test_api_impl.cc" ]
    deps += [ "//ui/events/devices" ]
  } else {
    sources += [ "test/device_data_manager_test_api_stub.cc" ]
  }
}

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/filtered_gesture_provider_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/snap_scroll_controller_unittest.cc",
    "gesture_detection/touch_disposition_gesture_filter_unittest.cc",
    "gesture_detection/velocity_tracker_unittest.cc",
    "gestures/fling_curve_unittest.cc",
    "keycodes/dom/keycode_converter_unittest.cc",
    "keycodes/keyboard_code_conversion_unittest.cc",
    "keycodes/platform_key_map_win_unittest.cc",
    "latency_info_unittest.cc",
    "platform/platform_event_source_unittest.cc",
    "scoped_target_handler_unittest.cc",
    "win/event_utils_win_unittest.cc",
  ]

  deps = [
    ":dom_keycode_converter",
    ":events",
    ":events_base",
    ":gesture_detection",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//mojo/edk/test:run_all_unittests",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/events/devices",
    "//ui/events/platform",
    "//ui/gfx:test_support",
  ]

  if (!is_ios) {
    sources += [
      "blink/blink_event_util_unittest.cc",
      "blink/input_handler_proxy_unittest.cc",
      "blink/input_scroll_elasticity_controller_unittest.cc",
      "devices/mojo/device_struct_traits_unittest.cc",
      "gestures/blink/web_gesture_curve_impl_unittest.cc",
      "ipc/latency_info_param_traits_unittest.cc",
      "mojo/struct_traits_unittest.cc",
    ]
    deps += [
      "//cc",
      "//ipc:test_support",
      "//mojo/public/cpp/bindings",
      "//third_party/WebKit/public:blink_headers",
      "//ui/events/blink",
      "//ui/events/devices/mojo:test_interfaces",
      "//ui/events/gestures/blink",
      "//ui/events/ipc",
      "//ui/events/mojo:test_interfaces",
      "//ui/gfx/ipc/geometry",
    ]
  }

  data_deps = [
    "//third_party/mesa:osmesa",
  ]

  include_dirs = [ "//testing/gmock/include" ]

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

  if (use_ozone) {
    sources += [
      "ozone/chromeos/cursor_controller_unittest.cc",
      "ozone/evdev/event_converter_evdev_impl_unittest.cc",
      "ozone/evdev/event_converter_test_util.cc",
      "ozone/evdev/event_device_info_unittest.cc",
      "ozone/evdev/event_device_test_util.cc",
      "ozone/evdev/input_injector_evdev_unittest.cc",
      "ozone/evdev/tablet_event_converter_evdev_unittest.cc",
      "ozone/evdev/touch_event_converter_evdev_unittest.cc",
      "ozone/evdev/touch_noise/touch_noise_finder_unittest.cc",
    ]

    if (use_xkbcommon) {
      sources += [
        "ozone/layout/keyboard_layout_engine_unittest.cc",
        "ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc",
      ]
    }

    deps += [
      "//ui/events/ozone:events_ozone",
      "//ui/events/ozone:events_ozone_evdev",
      "//ui/events/ozone:events_ozone_layout",
    ]
  }

  if (use_aura) {
    sources += [
      "gestures/gesture_provider_aura_unittest.cc",
      "gestures/motion_event_aura_unittest.cc",
    ]
  }

  if (is_android) {
    sources += [ "android/motion_event_android_unittest.cc" ]
  }

  if (is_ios) {
    assert_no_deps = ios_assert_no_deps
  }
}

if (is_android) {
  generate_jar_jni("motionevent_jni_headers") {
    jni_package = "ui"
    classes = [ "android/view/MotionEvent.class" ]
  }

  generate_jar_jni("keyevent_jni_headers") {
    jni_package = "ui"
    classes = [ "android/view/KeyEvent.class" ]
  }
}
