# 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/ui.gni")
import("//testing/test.gni")
import("//ui/base/ui_features.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" ]
  }
}

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

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

static_library("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/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_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 (is_mac) {
    libs = [ "Carbon.framework" ]
  }

  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" ]
  }
}

if (!is_ios) {
  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",
        "blink/web_input_event_traits_unittest.cc",
        "blink/web_input_event_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/display",
        "//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",
      ]
    }

    if (!is_android && !is_ios) {
      data_deps = [
        "//third_party/mesa:osmesa",
      ]
    }

    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_win) {
      sources += [ "blink/web_input_event_builders_win_unittest.cc" ]
    }
  }
}

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" ]
  }
}
