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

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/java_bitmap.cc",
    "android/java_bitmap.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",
    "break_list.h",
    "canvas.cc",
    "canvas.h",
    "canvas_notimplemented.cc",
    "canvas_paint_mac.h",
    "canvas_paint_mac.mm",
    "canvas_paint_win.cc",
    "canvas_paint_win.h",
    "canvas_skia.cc",
    "canvas_skia_paint.h",
    "codec/jpeg_codec.cc",
    "codec/jpeg_codec.h",
    "codec/png_codec.cc",
    "codec/png_codec.h",
    "color_utils.cc",
    "color_utils.h",
    "display.cc",
    "display.h",
    "display_change_notifier.cc",
    "display_change_notifier.h",
    "display_observer.cc",
    "display_observer.h",
    "font.cc",
    "font.h",
    "font_fallback.h",
    "font_fallback_linux.cc",
    "font_fallback_mac.cc",
    "font_fallback_win.cc",
    "font_fallback_win.h",
    "font_list.cc",
    "font_list.h",
    "font_list_impl.cc",
    "font_list_impl.h",
    "font_render_params.cc",
    "font_render_params.h",
    "font_render_params_android.cc",
    "font_render_params_linux.cc",
    "font_render_params_mac.cc",
    "font_render_params_win.cc",
    "frame_time.h",
    "gdi_util.cc",
    "gdi_util.h",
    "gfx_paths.cc",
    "gfx_paths.h",
    "gpu_memory_buffer.cc",
    "gpu_memory_buffer.h",
    "icon_util.cc",
    "icon_util.h",
    "image/canvas_image_source.cc",
    "image/canvas_image_source.h",
    "image/image.cc",
    "image/image.h",
    "image/image_family.cc",
    "image/image_family.h",
    "image/image_ios.mm",
    "image/image_mac.mm",
    "image/image_png_rep.cc",
    "image/image_png_rep.h",
    "image/image_skia.cc",
    "image/image_skia.h",
    "image/image_skia_operations.cc",
    "image/image_skia_operations.h",
    "image/image_skia_rep.cc",
    "image/image_skia_rep.h",
    "image/image_skia_source.h",
    "image/image_skia_util_ios.h",
    "image/image_skia_util_ios.mm",
    "image/image_skia_util_mac.h",
    "image/image_skia_util_mac.mm",
    "image/image_util.cc",
    "image/image_util.h",
    "image/image_util_ios.mm",
    "interpolated_transform.cc",
    "interpolated_transform.h",
    "linux_font_delegate.cc",
    "linux_font_delegate.h",
    "mac/coordinate_conversion.h",
    "mac/coordinate_conversion.mm",
    "mac/scoped_ns_disable_screen_updates.h",
    "native_widget_types.h",
    "nine_image_painter.cc",
    "nine_image_painter.h",
    "path.cc",
    "path.h",
    "path_aura.cc",
    "path_win.cc",
    "path_win.h",
    "path_x11.cc",
    "path_x11.h",
    "platform_font.h",
    "platform_font_android.cc",
    "platform_font_ios.h",
    "platform_font_ios.mm",
    "platform_font_mac.h",
    "platform_font_mac.mm",
    "platform_font_win.cc",
    "platform_font_win.h",
    "range/range.cc",
    "range/range.h",
    "range/range_mac.mm",
    "range/range_win.cc",
    "scoped_canvas.h",
    "scoped_cg_context_save_gstate_mac.h",
    "scoped_ns_graphics_context_save_gstate_mac.h",
    "scoped_ns_graphics_context_save_gstate_mac.mm",
    "screen.cc",
    "screen.h",
    "screen_android.cc",
    "screen_aura.cc",
    "screen_ios.mm",
    "screen_mac.mm",
    "screen_win.cc",
    "screen_win.h",
    "scrollbar_size.cc",
    "scrollbar_size.h",
    "selection_model.cc",
    "selection_model.h",
    "sequential_id_generator.cc",
    "sequential_id_generator.h",
    "shadow_value.cc",
    "shadow_value.h",
    "skbitmap_operations.cc",
    "skbitmap_operations.h",
    "skia_util.cc",
    "skia_util.h",
    "switches.cc",
    "switches.h",
    "sys_color_change_listener.cc",
    "sys_color_change_listener.h",
    "text_constants.h",
    "text_elider.cc",
    "text_elider.h",
    "text_utils.cc",
    "text_utils.h",
    "text_utils_android.cc",
    "text_utils_ios.mm",
    "transform.cc",
    "transform.h",
    "transform_util.cc",
    "transform_util.h",
    "ui_gfx_exports.cc",
    "utf16_indexing.cc",
    "utf16_indexing.h",
    "vsync_provider.h",
    "win/direct_write.cc",
    "win/direct_write.h",
    "win/dpi.cc",
    "win/dpi.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:i18n",
    "//base:base_static",
    "//base/third_party/dynamic_annotations",
    "//skia",
    "//third_party/harfbuzz-ng",
    "//third_party/libpng",
    "//third_party/zlib",
    "//ui/gfx/geometry",
  ]
  public_deps = [
    "//base",
    "//skia",
    "//third_party/icu",
  ]

  # Text rendering conditions (complicated so separated out).
  if (is_android || is_ios) {
    # We don't support RenderText on these platforms.
  } else {
    # These text rendering files are supported everywhere text rendering is.
    sources += [
      "render_text.cc",
      "render_text.h",
      "render_text_harfbuzz.cc",
      "render_text_harfbuzz.h",
      "text_utils_skia.cc",
    ]
    # These are the "native" rendering routines, only one should apply.
    if (is_win) {
      sources += [ "render_text_win.cc" ]
    } else if (is_mac) {
      sources += [ "render_text_mac.cc" ]
    } else if (use_pango) {
      sources += [ "render_text_pango.cc" ]
    } else if (use_ozone) {
      sources += [ "render_text_ozone.cc" ]
    }
  }

  # iOS.
  if (is_ios) {
    sources -= [
      "codec/jpeg_codec.cc",
      "codec/jpeg_codec.h",
    ]
  } else {
    deps += [ "//third_party:jpeg" ]
  }

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

    if (use_aura) {
      sources -= [ "screen_android.cc" ]
    } else {
      sources -= [ "path.cc" ]
    }

    # TODO(GYP) re-enable when base_java exists.
    #if (!is_android_webview_build) {
    #  deps += [ "//base:base_java" ]
    #}

    # 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",
    ]
  } else {
    sources -= [ "canvas_notimplemented.cc" ]
  }

  # Windows.
  if (is_win) {
    cflags = [
      "/wd4267",  # TODO(jschuh): C4267: http://crbug.com/167187 size_t -> int.
      "/wd4324",  # Structure was padded due to __declspec(align()), which is
                  # uninteresting.
    ]
  } else {
    sources -= [
      "gdi_util.cc",
      "gdi_util.h",
      "icon_util.cc",
      "icon_util.h",
    ]
  }

  # Linux.
  if (is_linux) {
    configs += [ "//build/config/linux:fontconfig" ]
  }

  # Ozone stuff.
  if (use_ozone) {
    sources += [
      "platform_font_ozone.cc",
    ]
  }

  if (!use_aura) {
    sources -= [
      "nine_image_painter.cc",
      "nine_image_painter.h",
      "path_aura.cc",
      "screen_aura.cc",
    ]
  }

  if (use_x11) {
    deps += [
      "//ui/gfx/x",
    ]
  } else {
    sources -= [
      "path_x11.cc",
    ]
  }

  if (use_pango) {
    sources += [
      "pango_util.cc",
      "pango_util.h",
      "platform_font_pango.cc",
      "platform_font_pango.h",
    ]
    configs += [ "//build/config/linux:pangocairo" ]
  }
  if (use_pango && use_ozone) {
    sources -= [
      "platform_font_ozone.cc",
    ]
  }
}

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

source_set("test_support") {
  testonly = true
  sources = [
    "image/image_unittest_util.cc",
    "image/image_unittest_util.h",
    "image/image_unittest_util_ios.mm",
    "image/image_unittest_util_mac.mm",
    "test/fontconfig_util_linux.cc",
    "test/fontconfig_util_linux.h",
    "test/gfx_util.cc",
    "test/gfx_util.h",
    "test/ui_cocoa_test_helper.h",
    "test/ui_cocoa_test_helper.mm",
  ]

  public_deps = [
    ":gfx",
  ]

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

  if (is_ios) {
    # The cocoa files don't apply to iOS.
    sources -= [
      "test/ui_cocoa_test_helper.h",
      "test/ui_cocoa_test_helper.mm",
    ]
  }
  if (is_linux) {
    configs += [ "//build/config/linux:fontconfig" ]
  }
}

test("gfx_unittests") {
  sources = [
    "font_unittest.cc",
    "image/image_skia_unittest.cc",
    "image/image_unittest.cc",
    "screen_unittest.cc",
    "test/run_all_unittests.cc",
    "text_elider_unittest.cc",
    "text_utils_unittest.cc",
  ]

  if (!is_ios) {
    sources += [
      "animation/animation_container_unittest.cc",
      "animation/animation_unittest.cc",
      "animation/multi_animation_unittest.cc",
      "animation/slide_animation_unittest.cc",
      "animation/tween_unittest.cc",
      "break_list_unittest.cc",
      "canvas_unittest.cc",
      "canvas_unittest_mac.mm",
      "codec/jpeg_codec_unittest.cc",
      "codec/png_codec_unittest.cc",
      "color_utils_unittest.cc",
      "display_change_notifier_unittest.cc",
      "display_unittest.cc",
      "font_list_unittest.cc",
      "geometry/box_unittest.cc",
      "geometry/cubic_bezier_unittest.cc",
      "geometry/insets_unittest.cc",
      "geometry/matrix3_unittest.cc",
      "geometry/point_unittest.cc",
      "geometry/point3_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",
      "mac/coordinate_conversion_unittest.mm",
      "platform_font_mac_unittest.mm",
      "range/range_mac_unittest.mm",
      "range/range_unittest.cc",
      "range/range_win_unittest.cc",
      "render_text_unittest.cc",
      "sequential_id_generator_unittest.cc",
      "shadow_value_unittest.cc",
      "skbitmap_operations_unittest.cc",
      "skrect_conversion_unittest.cc",
      "transform_util_unittest.cc",
      "utf16_indexing_unittest.cc",
    ]
  }

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

  if (use_pango) {
    sources += [
      "font_render_params_linux_unittest.cc",
      "platform_font_pango_unittest.cc",
    ]
    configs += [
      "//build/config/linux:pangocairo",
      "//build/config/linux:pangoft2",
    ]
  }

  if (!is_mac && !is_ios) {
    sources += [
      "transform_unittest.cc",
      "interpolated_transform_unittest.cc",
    ]
  }

  if (use_ozone && !use_pango) {
    sources -= [
      "canvas_unittest.cc",
      "font_list_unittest.cc",
      "font_unittest.cc",
      "render_text_unittest.cc",
      "text_elider_unittest.cc",
    ]
  }

  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 || is_ios) {
    sources -= [
      "render_text_unittest.cc",
    ]
  }

  if (use_aura) {
    sources -= [
      "screen_unittest.cc",
    ]
  }

  if (is_win) {
    sources += [
      "font_fallback_win_unittest.cc",
      "icon_util_unittest.cc",
      "icon_util_unittests.rc",
      "platform_font_win_unittest.cc",
    ]

    ldflags = [
      "/DELAYLOAD:d2d1.dll",
      "/DELAYLOAD:d3d10_1.dll",
    ]

    libs = [
      "d2d1.lib",
      "d3d10_1.lib",
      "imm32.lib",
      "oleacc.lib",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    cflags = [ "/wd4267" ]
  }
}

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"
  }
}
