# 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("//mojo/public/mojo_application.gni")
import("//mojo/tools/embed/rules.gni")

mojo_native_application("keyboard_native") {
  sources = [
    "animation.h",
    "clip_animation.cc",
    "clip_animation.h",
    "fast_out_slow_in_interpolator.cc",
    "fast_out_slow_in_interpolator.h",
    "key_layout.cc",
    "key_layout.h",
    "keyboard_service_impl.cc",
    "keyboard_service_impl.h",
    "main.cc",
    "material_splash_animation.cc",
    "material_splash_animation.h",
    "motion_decay_animation.cc",
    "motion_decay_animation.h",
    "predictor.cc",
    "predictor.h",
    "text_update_key.cc",
    "text_update_key.h",
    "time_interpolator.h",
    "view_observer_delegate.cc",
    "view_observer_delegate.h",
  ]

  deps = [
    ":action_icon",
    ":delete_icon",
    ":lower_case_icon",
    ":upper_case_icon",
    "//base",
    "//mojo/application",
    "//mojo/public/cpp/bindings",
    "//mojo/gpu",
    "//mojo/public/c/gpu",
    "//mojo/public/cpp/bindings:callback",
    "//mojo/public/cpp/utility",
    "//mojo/public/interfaces/application",
    "//mojo/services/geometry/cpp",
    "//mojo/services/geometry/interfaces",
    "//mojo/services/keyboard/interfaces",
    "//mojo/services/prediction/interfaces",
    "//mojo/services/surfaces/cpp",
    "//mojo/services/surfaces/interfaces",
    "//mojo/services/surfaces/interfaces:surface_id",
    "//mojo/services/view_manager/cpp",
    "//mojo/skia",
    "//skia",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
}

embed_file("action_icon") {
  source = "res/Emoticon.png"
  namespace = "keyboard_native"
  variable = "kActionIcon"
}

embed_file("delete_icon") {
  source = "res/Delete.png"
  namespace = "keyboard_native"
  variable = "kDeleteIcon"
}

embed_file("lower_case_icon") {
  source = "res/ArrowDown.png"
  namespace = "keyboard_native"
  variable = "kLowerCaseIcon"
}

embed_file("upper_case_icon") {
  source = "res/ArrowUp.png"
  namespace = "keyboard_native"
  variable = "kUpperCaseIcon"
}
