# 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/scroller.cc",
    "android/scroller.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",
    "blit.cc",
    "blit.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_analysis.cc",
    "color_analysis.h",
    "color_profile.cc",
    "color_profile.h",
    "color_profile_mac.mm",
    "color_profile_win.cc",
    "color_utils.cc",
    "color_utils.h",
    "display.cc",
    "display.h",
    "display_change_notifier.cc",
    "display_change_notifier.h",
    "display_observer.cc",
    "display_observer.h",
    "favicon_size.cc",
    "favicon_size.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",
    "scoped_ui_graphics_push_context_ios.h",
    "scoped_ui_graphics_push_context_ios.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/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",
      "blit_unittest.cc",
      "break_list_unittest.cc",
      "canvas_unittest.cc",
      "canvas_unittest_mac.mm",
      "codec/jpeg_codec_unittest.cc",
      "codec/png_codec_unittest.cc",
      "color_analysis_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 += [
      "color_profile_win_unittest.cc",
      "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"
  }
}
