# Copyright 2015 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/jumbo.gni")
import("//build/config/ui.gni")

jumbo_component("blink_features") {
  defines = [ "IS_BLINK_FEATURES_IMPL" ]

  sources = [
    "blink_features.cc",
    "blink_features.h",
  ]

  deps = [
    "//base",
  ]
}

jumbo_source_set("blink") {
  sources = [
    "blink_event_util.cc",
    "blink_event_util.h",
    "compositor_thread_event_queue.cc",
    "compositor_thread_event_queue.h",
    "did_overscroll_params.cc",
    "did_overscroll_params.h",
    "event_with_callback.cc",
    "event_with_callback.h",
    "fling_booster.cc",
    "fling_booster.h",
    "input_handler_proxy.cc",
    "input_handler_proxy.h",
    "input_handler_proxy_client.h",
    "input_scroll_elasticity_controller.cc",
    "input_scroll_elasticity_controller.h",
    "momentum_scroll_jank_tracker.cc",
    "momentum_scroll_jank_tracker.h",
    "prediction/empty_filter.cc",
    "prediction/empty_filter.h",
    "prediction/empty_predictor.cc",
    "prediction/empty_predictor.h",
    "prediction/filter_factory.cc",
    "prediction/filter_factory.h",
    "prediction/input_filter.h",
    "prediction/input_predictor.h",
    "prediction/kalman_filter.cc",
    "prediction/kalman_filter.h",
    "prediction/kalman_predictor.cc",
    "prediction/kalman_predictor.h",
    "prediction/least_squares_predictor.cc",
    "prediction/least_squares_predictor.h",
    "prediction/linear_predictor.cc",
    "prediction/linear_predictor.h",
    "prediction/linear_resampling.cc",
    "prediction/linear_resampling.h",
    "prediction/one_euro_filter.cc",
    "prediction/one_euro_filter.h",
    "prediction/prediction_metrics_handler.cc",
    "prediction/prediction_metrics_handler.h",
    "prediction/predictor_factory.cc",
    "prediction/predictor_factory.h",
    "scroll_predictor.cc",
    "scroll_predictor.h",
    "synchronous_input_handler_proxy.h",
    "web_input_event.cc",
    "web_input_event.h",
    "web_input_event_traits.cc",
    "web_input_event_traits.h",
  ]

  public_deps = [
    ":blink_features",
  ]

  deps = [
    "//cc:cc",
    "//third_party/blink/public:blink_headers",
    "//third_party/one_euro_filter",
    "//ui/events",
    "//ui/events:dom_keycode_converter",
    "//ui/events:events_base",
    "//ui/events:gesture_detection",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/latency",
  ]

  if (is_win) {
    sources += [
      "web_input_event_builders_win.cc",
      "web_input_event_builders_win.h",
    ]
    deps += [ "//ui/display" ]
  }
}
