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

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

component("events_ozone_evdev") {
  sources = [
    "evdev/event_converter_evdev.cc",
    "evdev/event_converter_evdev.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/events_ozone_evdev_export.h",
    "evdev/key_event_converter_evdev.cc",
    "evdev/key_event_converter_evdev.h",
    "evdev/touch_event_converter_evdev.cc",
    "evdev/touch_event_converter_evdev.h",
  ]

  defines = [ "EVENTS_OZONE_EVDEV_IMPLEMENTATION" ]

  deps = [
    ":events_ozone",
    "//base",
    "//ui/events/platform",
    "//ui/gfx",
  ]

  if (use_ozone_evdev) {
    defines += [ "USE_OZONE_EVDEV=1" ]
  }

  if (use_ozone_evdev && use_evdev_gestures) {
    sources += [
      "evdev/libgestures_glue/event_reader_libevdev_cros.cc",
      "evdev/libgestures_glue/event_reader_libevdev_cros.h",
      "evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc",
      "evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h",
      "evdev/libgestures_glue/gesture_logging.cc",
      "evdev/libgestures_glue/gesture_logging.h",
      "evdev/libgestures_glue/gesture_timer_provider.cc",
      "evdev/libgestures_glue/gesture_timer_provider.h",
    ]

    defines += [ "USE_EVDEV_GESTURES" ]

    configs += [
      "//build/config/linux:libevdev-cros",
      "//build/config/linux:libgestures",
    ]
  }
}
