# 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/ui.gni")
import("//testing/test.gni")

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

# Several targets want to include this header file, and some of them are
# child dependencies of "gfx". Therefore, we separate it out here so multiple
# targets can all have a dependency for header checking purposes without
# creating circular dependencies.
source_set("gfx_export") {
  sources = [
    "gfx_export.h",
  ]
}

component("gfx") {
  sources = [
    "android/device_display_info.cc",
    "android/device_display_info.h",
    "android/gfx_jni_registrar.cc",
    "android/gfx_jni_registrar.h",
    "android/shared_device_display_info.cc",
    "android/shared_device_display_info.h",
    "android/view_configuration.cc",
    "android/view_configuration.h",
    "animation/animation.cc",
    "animation/animation.h",
    "animation/animation_container.cc",
    "animation/animation_container.h",
    "animation/animation_container_element.h",
    "animation/animation_container_observer.h",
    "animation/animation_delegate.h",
    "animation/linear_animation.cc",
    "animation/linear_animation.h",
    "animation/multi_animation.cc",
    "animation/multi_animation.h",
    "animation/slide_animation.cc",
    "animation/slide_animation.h",
    "animation/throb_animation.cc",
    "animation/throb_animation.h",
    "animation/tween.cc",
    "animation/tween.h",
    "codec/png_codec.cc",
    "codec/png_codec.h",
    "display.cc",
    "display.h",
    "display_change_notifier.cc",
    "display_change_notifier.h",
    "display_observer.cc",
    "display_observer.h",
    "frame_time.h",
    "gpu_memory_buffer.cc",
    "gpu_memory_buffer.h",
    "hud_font.cc",
    "hud_font.h",
    "native_widget_types.h",
    "screen.cc",
    "screen.h",
    "screen_android.cc",
    "screen_stub.cc",
    "screen_type_delegate.h",
    "sequential_id_generator.cc",
    "sequential_id_generator.h",
    "shadow_value.cc",
    "shadow_value.h",
    "skia_util.cc",
    "skia_util.h",
    "swap_result.h",
    "transform.cc",
    "transform.h",
    "transform_util.cc",
    "transform_util.h",
    "ui_gfx_exports.cc",
    "vsync_provider.h",
    "win/hwnd_util.cc",
    "win/hwnd_util.h",
    "win/scoped_set_map_mode.h",
    "win/singleton_hwnd.cc",
    "win/singleton_hwnd.h",
    "win/window_impl.cc",
    "win/window_impl.h",
  ]

  defines = [ "GFX_IMPLEMENTATION" ]

  deps = [
    ":gfx_export",
    "//base:base_static",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//skia",
    "//third_party/libpng",
    "//third_party/zlib",
    "//ui/gfx/geometry",
  ]
  public_deps = [
    "//base",
    "//skia",
    "//third_party/icu",
  ]

  # Android.
  if (is_android) {
    sources -= [
      "animation/throb_animation.cc",
      "display_observer.cc",
      "screen_stub.cc",
    ]

    # TODO(jdduke): Revisit optimization after gauging benefit, crbug/419051.
    if (!is_debug) {
      configs -= [ "//build/config/compiler:optimize" ]
      configs += [ "//build/config/compiler:optimize_max" ]
    }

    deps += [ ":gfx_jni_headers" ]
    libs = [
      "android",
      "jnigraphics",
    ]
  }

  if (use_ozone) {
    sources += [ "native_pixmap_handle_ozone.h" ]
  }

  if (use_x11) {
    deps += [ "//ui/gfx/x" ]
  }
}

# Looking for gfx_geometry? It's //ui/gfx/geometry:geometry

source_set("test_support") {
  testonly = true
  sources = [
    "test/gfx_util.cc",
    "test/gfx_util.h",
  ]

  public_deps = [
    ":gfx",
  ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//skia",
    "//testing/gtest",
    "//ui/gfx/geometry",
  ]
}

test("gfx_unittests") {
  sources = [
    "animation/animation_container_unittest.cc",
    "animation/animation_unittest.cc",
    "animation/multi_animation_unittest.cc",
    "animation/slide_animation_unittest.cc",
    "animation/tween_unittest.cc",
    "codec/png_codec_unittest.cc",
    "display_change_notifier_unittest.cc",
    "display_unittest.cc",
    "geometry/box_unittest.cc",
    "geometry/cubic_bezier_unittest.cc",
    "geometry/insets_unittest.cc",
    "geometry/matrix3_unittest.cc",
    "geometry/point3_unittest.cc",
    "geometry/point_unittest.cc",
    "geometry/quad_unittest.cc",
    "geometry/r_tree_unittest.cc",
    "geometry/rect_unittest.cc",
    "geometry/safe_integer_conversions_unittest.cc",
    "geometry/scroll_offset_unittest.cc",
    "geometry/size_unittest.cc",
    "geometry/vector2d_unittest.cc",
    "geometry/vector3d_unittest.cc",
    "sequential_id_generator_unittest.cc",
    "skrect_conversion_unittest.cc",
    "test/run_all_unittests.cc",
    "transform_unittest.cc",
    "transform_util_unittest.cc",
  ]

  deps = [
    ":gfx",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//skia",
    "//testing/gtest",
    "//third_party/icu:icuuc",
    "//third_party/libpng",
    "//third_party/zlib",
    "//ui/base",
    "//ui/gfx/geometry",
  ]

  if (is_android) {
    sources -= [
      # Do not run display_change_notifier_unittest.cc on Android because it
      # does not compile display_observer.cc
      "display_change_notifier_unittest.cc",
    ]

    deps += [
      #'../../testing/android/native_test.gyp:native_test_native_code', TODO(GYP)
    ]
  }
}

if (is_android) {
  generate_jni("gfx_jni_headers") {
    sources = [
      "../android/java/src/org/chromium/ui/gfx/BitmapHelper.java",
      "../android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java",
      "../android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java",
    ]
    jni_package = "gfx"
  }
}
