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

source_set("text_input_types") {
  sources = [
    "text_input_action.h",
    "text_input_flags.h",
    "text_input_mode.h",
    "text_input_type.h",
  ]
}

jumbo_component("ime_types") {
  output_name = "ui_base_ime_types"
  sources = [
    "candidate_window.cc",
    "candidate_window.h",
    "composition_text.cc",
    "composition_text.h",
    "ime_text_span.cc",
    "ime_text_span.h",
    "infolist_entry.cc",
    "infolist_entry.h",
  ]

  defines = [ "IS_UI_BASE_IME_TYPES_IMPL" ]

  deps = [
    "//base",
    "//ui/gfx/range",
  ]

  public_deps = [
    ":text_input_types",
    "//skia",
  ]

  if (is_chromeos || use_ozone) {
    sources += [
      "character_composer.cc",
      "character_composer.h",
    ]
    deps += [
      "//ui/events:dom_keycode_converter",
      "//ui/events:events",
      "//ui/events:events_base",
    ]
  }
}

jumbo_component("ime") {
  output_name = "ui_base_ime"
  sources = [
    "constants.cc",
    "constants.h",
    "ime_bridge.cc",
    "ime_bridge.h",
    "ime_candidate_window_handler_interface.h",
    "ime_engine_handler_interface.h",
    "ime_input_context_handler_interface.h",
    "input_method.h",
    "input_method_base.cc",
    "input_method_base.h",
    "input_method_delegate.h",
    "input_method_keyboard_controller.h",
    "input_method_keyboard_controller_observer.h",
    "input_method_keyboard_controller_stub.cc",
    "input_method_keyboard_controller_stub.h",
    "input_method_minimal.cc",
    "input_method_minimal.h",
    "input_method_observer.h",
    "mock_ime_input_context_handler.cc",
    "mock_ime_input_context_handler.h",
    "mock_input_method.cc",
    "mock_input_method.h",
    "text_edit_commands.h",
    "text_input_client.cc",
    "text_input_client.h",
  ]

  defines = [ "IS_UI_BASE_IME_IMPL" ]

  public_deps = [
    ":ime_types",
    ":text_input_types",
    "//base",
    "//base:i18n",
    "//skia",
    "//third_party/icu",
    "//ui/base/ime/mojo",
    "//ui/events",
    "//ui/events:dom_keycode_converter",
    "//ui/events:events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gfx/range",
  ]
}
