# 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/linux/pkg_config.gni")
import("//build/config/ui.gni")
import("//ui/events/xkb.gni")

if (use_xkbcommon) {
  pkg_config("xkbcommon") {
    packages = [ "xkbcommon" ]
  }
}

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

config("events_ozone_layout_config") {
  if (use_xkbcommon) {
    defines = [ "USE_XKBCOMMON" ]
  }
}

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

  public_configs = [ ":events_ozone_layout_config" ]
}
