# 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/features.gni")
import("//build/config/jumbo.gni")
import("//build/config/ui.gni")
import("//testing/test.gni")
import("//ui/base/ui_features.gni")
import("//ui/ozone/ozone.gni")

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

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

if (is_android) {
  if (!defined(keycode_conversion_data_android_path)) {
    keycode_conversion_data_android_path =
        "keycodes/dom/keycode_conversion_data_android.inc"
  }
  keycode_conversion_data_android_gen_path = "$target_gen_dir/keycodes/dom/keycode_conversion_data_android_generated.inc"

  copy("keycode_conversion_data_android") {
    sources = [
      keycode_conversion_data_android_path,
    ]
    outputs = [
      keycode_conversion_data_android_gen_path,
    ]
  }
}

jumbo_static_library("dom_keycode_converter") {
  public = [
    "keycodes/dom/dom_code.h",
    "keycodes/dom/dom_codes.h",
    "keycodes/dom/dom_key.h",
    "keycodes/dom/keycode_converter.h",
  ]

  sources = [
    "keycodes/dom/dom_key_data.inc",
    "keycodes/dom/keycode_converter.cc",
    "keycodes/dom/keycode_converter_data.inc",
  ]

  deps = [
    "//base",
  ]

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

  if (is_android) {
    sources += [ keycode_conversion_data_android_gen_path ]

    deps += [ ":keycode_conversion_data_android" ]
  }
}

static_library("dom_keyboard_layout") {
  public = [
    "keycodes/dom/dom_keyboard_layout.h",
    "keycodes/dom/dom_keyboard_layout_manager.h",
    "keycodes/dom/dom_keyboard_layout_map.h",
  ]

  sources = [
    "keycodes/dom/dom_keyboard_layout.cc",
    "keycodes/dom/dom_keyboard_layout_manager.cc",
    "keycodes/dom/dom_keyboard_layout_map_base.cc",
    "keycodes/dom/dom_keyboard_layout_map_base.h",
  ]

  # Make sure we don't compile two versions of dom_keyboard_layout_map*
  if (is_mac) {
    sources += [ "keycodes/dom/dom_keyboard_layout_map_mac.mm" ]
  } else if (is_win) {
    sources += [ "keycodes/dom/dom_keyboard_layout_map_win.cc" ]
  } else {
    sources += [ "keycodes/dom/dom_keyboard_layout_map_ozone.cc" ]
  }

  deps = [
    ":dom_keycode_converter",
    ":events_base",
    "//base",
    "//ui/events/ozone:events_ozone_layout",
  ]

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

  # Expose the internals of this target to other packages in this BUILD file
  # so the unit tests can access the private header files.
  # Note: Only 'events_unittests' needs access in this file, however it uses a
  # template which generates different target names on different platforms.
  friend = [ ":*" ]
}

source_set("event_constants") {
  sources = [
    "event_constants.h",
  ]
}

source_set("platform_event") {
  sources = [
    "platform_event.h",
  ]
}

jumbo_component("events_base") {
  sources = [
    "base_event_utils.cc",
    "base_event_utils.h",
    "event_switches.cc",
    "event_switches.h",
    "events_base_export.h",
    "fraction_of_time_without_user_input_recorder.cc",
    "fraction_of_time_without_user_input_recorder.h",
    "gesture_curve.h",
    "gesture_event_details.cc",
    "gesture_event_details.h",
    "gestures/fixed_velocity_curve.cc",
    "gestures/fixed_velocity_curve.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",
    "mobile_scroller.cc",
    "mobile_scroller.h",
    "pointer_details.cc",
    "pointer_details.h",
  ]

  defines = [ "EVENTS_BASE_IMPLEMENTATION" ]

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

  public_deps = [
    ":event_constants",
    ":platform_event",
    "//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",
    ]
  }

  if (is_android) {
    sources += [ keycode_conversion_data_android_gen_path ]

    deps += [ ":keycode_conversion_data_android" ]
  }
}

jumbo_component("events") {
  public = [
    "cocoa/cocoa_event_utils.h",
    "event.h",
    "event_dispatcher.h",
    "event_handler.h",
    "event_modifiers.h",
    "event_observer.h",
    "event_processor.h",
    "event_rewriter.h",
    "event_sink.h",
    "event_source.h",
    "event_target.h",
    "event_target_iterator.h",
    "event_targeter.h",
    "event_utils.h",
    "events_export.h",
    "gestures/gesture_recognizer.h",
    "gestures/gesture_recognizer_impl_mac.h",
    "gestures/gesture_types.h",
    "keyboard_hook.h",
    "null_event_targeter.h",
    "scoped_target_handler.h",
    "win/events_win_utils.h",
    "win/system_event_state_lookup.h",
  ]

  sources = [
    "cocoa/cocoa_event_utils.mm",
    "cocoa/events_mac.mm",
    "event.cc",
    "event_dispatcher.cc",
    "event_handler.cc",
    "event_modifiers.cc",
    "event_processor.cc",
    "event_rewriter.cc",
    "event_rewriter_continuation.h",
    "event_source.cc",
    "event_target.cc",
    "event_utils.cc",
    "events_exports.cc",
    "events_stub.cc",
    "gestures/gesture_recognizer.cc",
    "gestures/gesture_recognizer_impl_mac.cc",
    "gestures/gesture_types.cc",
    "keyboard_hook_base.cc",
    "keyboard_hook_base.h",
    "keycodes/platform_key_map_win.cc",
    "keycodes/platform_key_map_win.h",
    "mac/keyboard_hook_mac.mm",
    "null_event_targeter.cc",
    "scoped_target_handler.cc",
    "win/events_win.cc",
    "win/events_win_utils.cc",
    "win/keyboard_hook_win_base.cc",
    "win/keyboard_hook_win_base.h",
    "win/media_keyboard_hook_win.cc",
    "win/modifier_keyboard_hook_win.cc",
    "win/system_event_state_lookup.cc",
  ]

  defines = [ "EVENTS_IMPLEMENTATION" ]

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

  # Expose the internals of this target to other packages in this BUILD file
  # so the unit tests can access the private header files.
  # Note: Only 'events_unittests' needs access in this file, however it uses a
  # template which generates different target names on different platforms.
  friend = [ ":*" ]

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

  if (use_glib) {
    configs += [ "//build/config/linux:glib" ]
  }

  if (use_ozone) {
    sources += [ "events_default.cc" ]
  }

  if (is_win && use_ozone) {
    sources -= [ "win/events_win.cc" ]
  }

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

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

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

  if (is_android) {
    public += [
      "android/drag_event_android.h",
      "android/event_handler_android.h",
      "android/gesture_event_android.h",
      "android/gesture_event_type.h",
      "android/key_event_android.h",
      "android/key_event_utils.h",
      "android/motion_event_android.h",
    ]
    sources += [
      "android/drag_event_android.cc",
      "android/event_handler_android.cc",
      "android/gesture_event_android.cc",
      "android/key_event_android.cc",
      "android/key_event_utils.cc",
      "android/keyboard_hook_android.cc",
      "android/motion_event_android.cc",
    ]
    deps += [
      ":keyevent_jni_headers",
      ":motionevent_jni_headers",
    ]
  }

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

  if (is_fuchsia) {
    public += [
      "fuchsia/input_event_dispatcher.h",
      "fuchsia/input_event_dispatcher_delegate.h",
    ]
    sources += [ "fuchsia/input_event_dispatcher.cc" ]
    public_deps += [ "//third_party/fuchsia-sdk/sdk:ui_input" ]
  }
}

jumbo_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 (is_chromecast) {
    sources += [ "gesture_detection/gesture_configuration_cast.cc" ]
  } else if (use_aura) {
    sources += [ "gesture_detection/gesture_configuration_aura.cc" ]
  } else {
    sources += [ "gesture_detection/gesture_configuration_default.cc" ]
  }
}

jumbo_static_library("test_support") {
  sources = [
    "test/cocoa_test_event_utils.h",
    "test/cocoa_test_event_utils.mm",
    "test/event_generator.cc",
    "test/event_generator.h",
    "test/events_test_utils.cc",
    "test/events_test_utils.h",
    "test/keyboard_layout.cc",
    "test/keyboard_layout.h",
    "test/keyboard_layout_mac.cc",
    "test/keyboard_layout_win.cc",
    "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_rewriter.cc",
    "test/test_event_rewriter.h",
    "test/test_event_source.cc",
    "test/test_event_source.h",
    "test/test_event_target.cc",
    "test/test_event_target.h",
    "test/test_event_targeter.cc",
    "test/test_event_targeter.h",
  ]

  public_deps = [
    ":dom_keycode_converter",
    ":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 (is_mac) {
    libs = [ "Carbon.framework" ]
  }

  if (use_x11 || ozone_platform_x11) {
    sources += [
      "test/events_test_utils_x11.cc",
      "test/events_test_utils_x11.h",
    ]
    deps += [
      "//ui/events/devices/x11",
      "//ui/events/keycodes:x11",
      "//ui/gfx/x",
    ]
  }

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

if (!is_ios) {
  test("events_unittests") {
    sources = [
      "blink/blink_event_util_unittest.cc",
      "blink/fling_booster_unittest.cc",
      "blink/input_handler_proxy_unittest.cc",
      "blink/input_scroll_elasticity_controller_unittest.cc",
      "blink/prediction/empty_filter_unittests.cc",
      "blink/prediction/filter_factory_unittests.cc",
      "blink/prediction/input_filter_unittest_helpers.cc",
      "blink/prediction/input_filter_unittest_helpers.h",
      "blink/prediction/input_predictor_unittest_helpers.cc",
      "blink/prediction/input_predictor_unittest_helpers.h",
      "blink/prediction/kalman_predictor_unittest.cc",
      "blink/prediction/least_squares_predictor_unittest.cc",
      "blink/prediction/linear_predictor_unittest.cc",
      "blink/prediction/linear_resampling_unittest.cc",
      "blink/prediction/one_euro_filter_unittests.cc",
      "blink/scroll_predictor_unittest.cc",
      "blink/web_input_event_traits_unittest.cc",
      "blink/web_input_event_unittest.cc",
      "cocoa/events_mac_unittest.mm",
      "event_dispatcher_unittest.cc",
      "event_processor_unittest.cc",
      "event_rewriter_unittest.cc",
      "event_target_unittest.cc",
      "event_unittest.cc",
      "fraction_of_time_without_user_input_recorder_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/blink/web_gesture_curve_impl_unittest.cc",
      "gestures/fling_curve_unittest.cc",
      "keycodes/dom/dom_keyboard_layout_map_unittest.cc",
      "keycodes/dom/keycode_converter_unittest.cc",
      "keycodes/keyboard_code_conversion_unittest.cc",
      "keycodes/platform_key_map_win_unittest.cc",
      "mobile_scroller_unittest.cc",
      "mojom/mojom_traits_unittest.cc",
      "platform/platform_event_source_unittest.cc",
      "scoped_target_handler_unittest.cc",
      "win/event_utils_win_unittest.cc",
      "win/media_keyboard_hook_win_unittest.cc",
      "win/modifier_keyboard_hook_win_unittest.cc",
    ]

    deps = [
      ":dom_keyboard_layout",
      ":dom_keycode_converter",
      ":events",
      ":events_base",
      ":gesture_detection",
      ":test_support",
      "//base",
      "//base/test:test_support",
      "//cc",
      "//ipc:test_support",
      "//mojo/core/test:run_all_unittests",
      "//mojo/public/cpp/bindings",
      "//mojo/public/cpp/test_support:test_utils",
      "//skia",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/blink/public:blink_headers",
      "//ui/base:test_support",
      "//ui/display",
      "//ui/events/blink",
      "//ui/events/devices",
      "//ui/events/gestures/blink",
      "//ui/events/mojom",
      "//ui/events/platform",
      "//ui/gfx/geometry/mojom:mojom_traits",
      "//ui/gfx/ipc/geometry",
    ]

    defines = []

    if (is_android) {
      sources += [ "android/motion_event_android_unittest.cc" ]
      deps += [ "//ui/android:ui_full_java" ]
      if (notouch_build) {
        defines += [ "NOTOUCH_BUILD" ]
      }
    } else {
      data_deps = [
        "//third_party/mesa_headers",
      ]
    }

    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_x11 || use_ozone) {
      sources += [ "devices/device_data_manager_unittest.cc" ]
    }

    if (use_ozone && (is_linux || is_chromeos)) {
      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_converter_test_util.h",
        "ozone/evdev/event_device_info_unittest.cc",
        "ozone/evdev/event_device_test_util.cc",
        "ozone/evdev/event_device_test_util.h",
        "ozone/evdev/gamepad_event_converter_evdev_unittest.cc",
        "ozone/evdev/input_injector_evdev_unittest.cc",
        "ozone/evdev/tablet_event_converter_evdev_unittest.cc",
        "ozone/evdev/testing/fake_cursor_delegate_evdev.h",
        "ozone/evdev/touch_event_converter_evdev_unittest.cc",
        "ozone/evdev/touch_filter/false_touch_finder_unittest.cc",
        "ozone/evdev/touch_filter/heuristic_stylus_palm_detection_filter_unittest.cc",
        "ozone/evdev/touch_filter/open_palm_detection_filter_unittest.cc",
        "ozone/evdev/touch_filter/palm_detection_filter_factory_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_win) {
      sources += [ "blink/web_input_event_builders_win_unittest.cc" ]
    }

    if (is_chromecast && !is_android) {
      sources += [ "chromecast/scroller_unittest.cc" ]
    }

    if (is_fuchsia) {
      sources += [ "fuchsia/input_event_dispatcher_unittest.cc" ]
      deps += [ "//third_party/fuchsia-sdk/sdk:ui_input" ]
    }
  }
}

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

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

# This target is added as a dependency of browser interactive_ui_tests. It must
# be source_set, otherwise the linker will drop the tests as dead code.
source_set("events_interactive_ui_tests") {
  testonly = true
  if (is_win) {
    sources = [
      "win/media_keyboard_hook_win_interactive_test.cc",
    ]

    deps = [
      ":events",
      ":test_support",
      "//base/test:test_support",
      "//testing/gtest",
    ]
  }
}
