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

component("events_ozone") {
  sources = [
    "device/device_event.cc",
    "device/device_event.h",
    "device/device_event_observer.h",
    "device/device_manager.cc",
    "device/device_manager.h",
    "device/device_manager_manual.cc",
    "device/device_manager_manual.h",
    "device/udev/device_manager_udev.cc",
    "device/udev/device_manager_udev.h",
    "events_ozone_export.h",
  ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//ui/events",
    "//ui/events:events_base",
  ]

  defines = [ "EVENTS_OZONE_IMPLEMENTATION" ]

  if (!use_udev) {
    sources -= [
      "device/udev/device_manager_udev.cc",
      "device/udev/device_manager_udev.h",
    ]
  }

  if (use_ozone_evdev && use_udev) {
    deps += [ "//device/udev_linux" ]
  }
}

config("evdev") {
  defines = [ "USE_EVDEV" ]
}

config("evdev_gestures") {
  defines = [ "USE_EVDEV_GESTURES" ]
}

component("events_ozone_evdev") {
  sources = [
    "evdev/device_event_dispatcher_evdev.cc",
    "evdev/device_event_dispatcher_evdev.h",
    "evdev/event_converter_evdev.cc",
    "evdev/event_converter_evdev.h",
    "evdev/event_converter_evdev_impl.cc",
    "evdev/event_converter_evdev_impl.h",
    "evdev/event_device_info.cc",
    "evdev/event_device_info.h",
    "evdev/event_factory_evdev.cc",
    "evdev/event_factory_evdev.h",
    "evdev/event_modifiers_evdev.cc",
    "evdev/event_modifiers_evdev.h",
    "evdev/event_thread_evdev.cc",
    "evdev/event_thread_evdev.h",
    "evdev/events_ozone_evdev_export.h",
    "evdev/input_controller_evdev.cc",
    "evdev/input_controller_evdev.h",
    "evdev/input_device_factory_evdev.cc",
    "evdev/input_device_factory_evdev.h",
    "evdev/input_device_factory_evdev_proxy.cc",
    "evdev/input_device_factory_evdev_proxy.h",
    "evdev/input_device_settings_evdev.cc",
    "evdev/input_device_settings_evdev.h",
    "evdev/input_injector_evdev.cc",
    "evdev/input_injector_evdev.h",
    "evdev/keyboard_evdev.cc",
    "evdev/keyboard_evdev.h",
    "evdev/keyboard_util_evdev.cc",
    "evdev/keyboard_util_evdev.h",
    "evdev/mouse_button_map_evdev.cc",
    "evdev/mouse_button_map_evdev.h",
    "evdev/tablet_event_converter_evdev.cc",
    "evdev/tablet_event_converter_evdev.h",
    "evdev/touch_evdev_types.cc",
    "evdev/touch_evdev_types.h",
    "evdev/touch_event_converter_evdev.cc",
    "evdev/touch_event_converter_evdev.h",
    "evdev/touch_noise/far_apart_taps_touch_noise_filter.cc",
    "evdev/touch_noise/far_apart_taps_touch_noise_filter.h",
    "evdev/touch_noise/horizontally_aligned_touch_noise_filter.cc",
    "evdev/touch_noise/horizontally_aligned_touch_noise_filter.h",
    "evdev/touch_noise/single_position_touch_noise_filter.cc",
    "evdev/touch_noise/single_position_touch_noise_filter.h",
    "evdev/touch_noise/touch_noise_filter.h",
    "evdev/touch_noise/touch_noise_finder.cc",
    "evdev/touch_noise/touch_noise_finder.h",
  ]

  defines = [ "EVENTS_OZONE_EVDEV_IMPLEMENTATION" ]

  deps = [
    ":events_ozone",
    ":events_ozone_layout",
    "//base",
    "//ui/events",
    "//ui/events:dom_keycode_converter",
    "//ui/events:events_base",
    "//ui/events/devices",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/ozone:ozone_base",
  ]

  public_configs = [ ":evdev" ]
}

component("events_ozone_layout") {
  sources = [
    "layout/events_ozone_layout_export.h",
    "layout/keyboard_layout_engine.h",
    "layout/keyboard_layout_engine_manager.cc",
    "layout/keyboard_layout_engine_manager.h",
    "layout/layout_util.cc",
    "layout/layout_util.h",
    "layout/no/no_keyboard_layout_engine.cc",
    "layout/no/no_keyboard_layout_engine.h",
    "layout/stub/stub_keyboard_layout_engine.cc",
    "layout/stub/stub_keyboard_layout_engine.h",
  ]

  defines = [ "EVENTS_OZONE_LAYOUT_IMPLEMENTATION" ]

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