# 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/public/cpp",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/keyboard/public/interfaces",
    "//mojo/services/prediction/public/interfaces",
    "//mojo/services/surfaces/public/cpp",
    "//mojo/services/surfaces/public/interfaces",
    "//mojo/services/surfaces/public/interfaces:surface_id",
    "//mojo/services/view_manager/public/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"
}
