# 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/jumbo.gni")
import("//build/config/ui.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//testing/test.gni")
import("//testing/libfuzzer/fuzzer_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",
  ]
}

jumbo_component("geometry_skia") {
  sources = [
    "skia_util.cc",
    "skia_util.h",
    "transform.cc",
    "transform.h",
    "transform_util.cc",
    "transform_util.h",
  ]
  public_deps = [
    ":gfx_export",
  ]
  deps = [
    "//base",
    "//gpu/vulkan:buildflags",
    "//skia",
    "//ui/gfx/geometry",
  ]
  defines = [ "GFX_IMPLEMENTATION" ]
}

jumbo_component("gfx") {
  sources = [
    "android/java_bitmap.cc",
    "android/java_bitmap.h",
    "android/view_configuration.cc",
    "android/view_configuration.h",
    "break_list.h",
    "color_analysis.cc",
    "color_analysis.h",
    "color_palette.h",
    "color_transform.cc",
    "color_transform.h",
    "color_utils.cc",
    "color_utils.h",
    "decorated_text.cc",
    "decorated_text.h",
    "decorated_text_mac.h",
    "decorated_text_mac.mm",
    "extension_set.cc",
    "extension_set.h",
    "favicon_size.cc",
    "favicon_size.h",
    "font.cc",
    "font.h",
    "font_fallback.h",
    "font_fallback_android.cc",
    "font_fallback_linux.cc",
    "font_fallback_linux.h",
    "font_fallback_mac.mm",
    "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",
    "gdi_util.cc",
    "gdi_util.h",
    "gfx_paths.cc",
    "gfx_paths.h",
    "half_float.cc",
    "half_float.h",
    "icon_util.cc",
    "icon_util.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_platform.h",
    "image/image_png_rep.cc",
    "image/image_png_rep.h",
    "image/image_skia.cc",
    "image/image_skia.h",
    "image/image_skia_rep.cc",
    "image/image_skia_rep.h",
    "image/image_skia_source.cc",
    "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",
    "image/image_util_mac.mm",
    "interpolated_transform.cc",
    "interpolated_transform.h",
    "ios/NSString+CrStringDrawing.h",
    "ios/NSString+CrStringDrawing.mm",
    "ios/uikit_util.h",
    "ios/uikit_util.mm",
    "linux_font_delegate.cc",
    "linux_font_delegate.h",
    "mac/coordinate_conversion.h",
    "mac/coordinate_conversion.mm",
    "mac/nswindow_frame_controls.h",
    "mac/nswindow_frame_controls.mm",
    "mac/scoped_cocoa_disable_screen_updates.h",
    "mac/scoped_cocoa_disable_screen_updates.mm",
    "nine_image_painter.cc",
    "nine_image_painter.h",
    "path.cc",
    "path.h",
    "path_mac.h",
    "path_mac.mm",
    "path_win.cc",
    "path_win.h",
    "path_x11.cc",
    "path_x11.h",
    "platform_font.h",
    "platform_font_ios.h",
    "platform_font_ios.mm",
    "platform_font_linux.cc",
    "platform_font_linux.h",
    "platform_font_mac.h",
    "platform_font_mac.mm",
    "platform_font_win.cc",
    "platform_font_win.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",
    "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",
    "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_ios.mm",
    "ui_gfx_exports.cc",
    "utf16_indexing.cc",
    "utf16_indexing.h",
    "vsync_provider.cc",
    "vsync_provider.h",
    "win/direct_write.cc",
    "win/direct_write.h",
    "win/hwnd_util.cc",
    "win/hwnd_util.h",
    "win/msg_util.h",
    "win/physical_size.cc",
    "win/physical_size.h",
    "win/rendering_window_manager.cc",
    "win/rendering_window_manager.h",
    "win/scoped_set_map_mode.h",
    "win/singleton_hwnd.cc",
    "win/singleton_hwnd.h",
    "win/singleton_hwnd_observer.cc",
    "win/singleton_hwnd_observer.h",
    "win/text_analysis_source.cc",
    "win/text_analysis_source.h",
    "win/window_impl.cc",
    "win/window_impl.h",
  ]
  deps = []
  if (!is_ios) {
    sources += [
      "blit.cc",
      "blit.h",
      "canvas.cc",
      "canvas.h",
      "canvas_paint_mac.h",
      "canvas_paint_mac.mm",
      "canvas_skia.cc",
      "canvas_skia_paint.h",
      "image/canvas_image_source.cc",
      "image/canvas_image_source.h",
      "image/image_generic.cc",
      "image/image_skia_operations.cc",
      "image/image_skia_operations.h",
      "paint_throbber.cc",
      "paint_throbber.h",
      "scoped_canvas.cc",
      "scoped_canvas.h",
      "shadow_util.cc",
      "shadow_util.h",
      "skia_paint_util.cc",
      "skia_paint_util.h",
    ]
  }

  configs += [
    "//build/config:precompiled_headers",

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]

  # This is part of the gfx component in the component build.
  defines = [ "GFX_IMPLEMENTATION" ]

  public_deps = [
    ":color_space",
    ":geometry_skia",
    ":gfx_switches",
    ":memory_buffer_sources",
    ":native_widget_types",
    ":selection_bound_sources",
    "//base",
    "//skia",
    "//skia:skcms",
    "//third_party/icu",
    "//ui/gfx/animation",
    "//ui/gfx/codec",
    "//ui/gfx/geometry",
    "//ui/gfx/range",
  ]
  deps += [
    ":gfx_export",
    "//base",
    "//base:base_static",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//device/vr/buildflags",
    "//skia",
    "//third_party/zlib",
  ]

  if (is_android) {
    set_sources_assignment_filter([])
    sources += [
      "platform_font_linux.cc",
      "platform_font_linux.h",
    ]
    set_sources_assignment_filter(sources_assignment_filter)
  }

  # iOS.
  if (is_ios) {
    set_sources_assignment_filter([])
    sources += [ "scoped_cg_context_save_gstate_mac.h" ]
    set_sources_assignment_filter(sources_assignment_filter)
  } else {
    public_deps += [ "//cc/paint" ]
    deps += [ "//third_party:freetype_harfbuzz" ]
  }

  # Android.
  if (is_android) {
    if (!is_debug) {
      configs -= [ "//build/config/compiler:default_optimization" ]
      configs += [ "//build/config/compiler:optimize_max" ]
    }

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

  if (!is_ios) {
    sources += [
      "harfbuzz_font_skia.cc",
      "harfbuzz_font_skia.h",
      "paint_vector_icon.cc",
      "paint_vector_icon.h",
      "render_text.cc",
      "render_text.h",
      "render_text_harfbuzz.cc",
      "render_text_harfbuzz.h",
      "render_text_mac.h",
      "render_text_mac.mm",
      "text_utils_skia.cc",
      "vector_icon_types.h",
    ]
  }

  # Windows.
  if (is_win) {
    libs = [
      "setupapi.lib",
      "dwrite.lib",
    ]
  } else {
    sources -= [
      "gdi_util.cc",
      "gdi_util.h",
      "icon_util.cc",
      "icon_util.h",
      "sys_color_change_listener.cc",
      "sys_color_change_listener.h",
    ]
  }

  # Linux.
  if (is_linux) {
    deps += [ "//third_party/fontconfig" ]
  }

  if (is_mac) {
    libs = [
      "AppKit.framework",
      "CoreFoundation.framework",
      "CoreGraphics.framework",
      "CoreText.framework",
      "IOSurface.framework",
    ]
  }

  if ((!use_aura && !toolkit_views) || is_ios) {
    sources -= [
      "nine_image_painter.cc",
      "nine_image_painter.h",
    ]
  }

  if (use_x11) {
    deps += [ "//ui/gfx/x" ]
    configs += [ "//build/config/linux:x11" ]
  } else {
    sources -= [ "path_x11.cc" ]
  }

  if (is_fuchsia) {
    sources += [
      "font_fallback_fuchsia.cc",
      "font_render_params_fuchsia.cc",
      "platform_font_fuchsia.cc",
    ]
  }
}

jumbo_component("color_space") {
  sources = [
    "color_space.cc",
    "color_space.h",
    "color_space_export.h",
    "color_space_win.cc",
    "color_space_win.h",
    "icc_profile.cc",
    "icc_profile.h",
    "skia_color_space_util.cc",
    "skia_color_space_util.h",
  ]
  deps = [
    "//skia:skcms",
  ]
  public_deps = [
    "//base",
    "//skia",
  ]
  if (is_mac) {
    sources += [
      "mac/display_icc_profiles.cc",
      "mac/display_icc_profiles.h",
    ]
    libs = [
      "CoreFoundation.framework",
      "CoreGraphics.framework",
    ]
  }
  if (use_x11) {
    deps += [ "//ui/gfx/x" ]
    configs += [ "//build/config/linux:x11" ]
  }
  defines = [ "COLOR_SPACE_IMPLEMENTATION" ]
}

# Depend on this to use half_float.h without pulling in all of gfx.
source_set("half_float") {
  sources = [
    "half_float.h",
  ]

  defines = [ "GFX_IMPLEMENTATION" ]

  public_deps = [
    ":gfx_export",
    "//base",
  ]
}

# Depend on this to use native_widget_types.h without pulling in all of gfx.
source_set("native_widget_types") {
  public = [
    "native_widget_types.h",
  ]

  public_deps = [
    "//base",
  ]
}

group("selection_bound") {
  if (is_component_build) {
    public_deps = [
      ":gfx",
    ]
  } else {
    public_deps = [
      ":selection_bound_sources",
    ]
  }
}

# Depend on this to use selection_bound.h without pulling in all of gfx.
# Cannot be a static_library in component builds due to exported functions
source_set("selection_bound_sources") {
  visibility = [ ":*" ]

  sources = [
    "gfx_export.h",
    "selection_bound.cc",
    "selection_bound.h",
  ]

  defines = [ "GFX_IMPLEMENTATION" ]

  public_deps = [
    "//base",
    "//ui/gfx/geometry",
  ]
}

# Depend on this to use buffer_types.h without pulling in all of gfx.
source_set("buffer_types") {
  sources = [
    "buffer_types.h",
  ]
}

# The GPU memory buffer stuff is separate from "gfx" to allow GPU-related
# things to use these files without pulling in all of gfx, which includes large
# things like Skia.
#
# The structure here allows the memory buffer to be part of the gfx component
# in the component build, but be a separate source set in a static build.
group("memory_buffer") {
  if (is_component_build) {
    public_deps = [
      ":gfx",
    ]
  } else {
    public_deps = [
      ":memory_buffer_sources",
    ]
  }
}

# Cannot be a static_library in component builds due to exported functions
jumbo_source_set("memory_buffer_sources") {
  visibility = [ ":*" ]  # Depend on through ":memory_buffer".

  # TODO(brettw) refactor this so these sources are in a coherent directory
  # structure rather than random samplings of ui/gfx and ui/gfx/mac.
  sources = [
    "buffer_format_util.cc",
    "buffer_format_util.h",
    "ca_layer_params.cc",
    "ca_layer_params.h",
    "client_native_pixmap.h",
    "client_native_pixmap_factory.cc",
    "client_native_pixmap_factory.h",
    "generic_shared_memory_id.cc",
    "generic_shared_memory_id.h",
    "gfx_export.h",
    "gpu_fence.cc",
    "gpu_fence.h",
    "gpu_fence_handle.cc",
    "gpu_fence_handle.h",
    "native_pixmap.h",
    "native_pixmap_handle.cc",
    "native_pixmap_handle.h",
    "overlay_transform.h",
  ]

  if (!is_ios) {
    sources += [
      "gpu_memory_buffer.cc",
      "gpu_memory_buffer.h",
    ]
  }

  defines = [ "GFX_IMPLEMENTATION" ]

  public_deps = [
    ":buffer_types",
  ]

  deps = [
    ":native_widget_types",
    "//base",
    "//ui/gfx/geometry",
  ]

  if (is_linux) {
    sources += [
      "linux/client_native_pixmap_dmabuf.cc",
      "linux/client_native_pixmap_dmabuf.h",
      "linux/client_native_pixmap_factory_dmabuf.cc",
      "linux/client_native_pixmap_factory_dmabuf.h",
      "linux/native_pixmap_dmabuf.cc",
      "linux/native_pixmap_dmabuf.h",
    ]

    deps += [ "//third_party/libdrm" ]
  }

  if (is_linux || is_android) {
    deps += [ "//third_party/libsync" ]
  }

  if (is_mac) {
    sources += [
      "mac/io_surface.cc",
      "mac/io_surface.h",
    ]

    public_deps += [ "//ui/gfx:color_space" ]
  }

  if (is_win) {
    public_deps += [ "//ipc:message_support" ]
  }
}

# TODO(ccameron): This can be moved into a separate source_set.
jumbo_component("gfx_switches") {
  sources = [
    "switches.cc",
    "switches.h",
    "switches_export.h",
  ]

  defines = [ "GFX_SWITCHES_IMPLEMENTATION" ]

  deps = [
    "//base",
  ]
}

jumbo_static_library("test_support") {
  testonly = true
  sources = [
    "animation/animation_test_api.cc",
    "animation/animation_test_api.h",
    "animation/test_animation_delegate.h",
    "geometry/test/rect_test_util.cc",
    "geometry/test/rect_test_util.h",
    "image/image_unittest_util.cc",
    "image/image_unittest_util.h",
    "image/image_unittest_util_ios.mm",
    "image/image_unittest_util_mac.mm",
    "test/gfx_util.cc",
    "test/gfx_util.h",
    "test/icc_profiles.cc",
    "test/icc_profiles.h",
  ]

  public_deps = [
    ":gfx",
  ]

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

  if (!is_ios) {
    sources += [ "render_text_test_api.h" ]

    deps += [ "//third_party:freetype_harfbuzz" ]
  }
}

test("gfx_unittests") {
  sources = [
    "font_names_testing.cc",
    "font_names_testing.h",
    "font_render_params_linux_unittest.cc",
    "font_unittest.cc",
    "image/image_family_unittest.cc",
    "image/image_ios_unittest.mm",
    "image/image_skia_unittest.cc",
    "image/image_unittest.cc",
    "ios/NSString+CrStringDrawing_unittest.mm",
    "ios/uikit_util_unittest.mm",
    "platform_font_linux_unittest.cc",
    "test/run_all_unittests.cc",
    "text_elider_unittest.cc",
    "text_utils_unittest.cc",
  ]

  data = [
    "test/data/",
    "$root_out_dir/ui_test.pak",
  ]

  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_space_unittest.cc",
      "color_transform_unittest.cc",
      "color_utils_unittest.cc",
      "font_fallback_linux_unittest.cc",
      "font_fallback_mac_unittest.cc",
      "font_list_unittest.cc",
      "geometry/axis_transform2d_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/quaternion_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",
      "half_float_unittest.cc",
      "icc_profile_unittest.cc",
      "image/image_mac_unittest.mm",
      "image/image_util_unittest.cc",
      "mac/coordinate_conversion_unittest.mm",
      "mojo/struct_traits_unittest.cc",
      "nine_image_painter_unittest.cc",
      "path_mac_unittest.mm",
      "platform_font_mac_unittest.mm",
      "range/range_mac_unittest.mm",
      "range/range_unittest.cc",
      "range/range_win_unittest.cc",
      "selection_bound_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",
    ]
  }

  if (!is_ios) {
    sources += [ "paint_vector_icon_unittest.cc" ]
  }

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  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/animation",
    "//ui/gfx/geometry",
    "//ui/gfx/range",
    "//ui/resources:ui_test_pak",
  ]

  if (!is_ios) {
    sources += [ "render_text_unittest.cc" ]
    deps += [ "//third_party:freetype_harfbuzz" ]
  }

  data_deps = [
    "//ui/resources:ui_test_pak",
  ]

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

  if (is_android) {
    deps += [ "//ui/android:ui_java" ]
  }

  if (!use_aura && !is_ios) {
    sources -= [ "nine_image_painter_unittest.cc" ]
  }

  if (is_chromeos) {
    sources += [ "codec/chromeos/jpeg_codec_robust_slow_unittest.cc" ]
  }

  if (is_win) {
    sources += [
      "font_fallback_win_unittest.cc",
      "icon_util_unittest.cc",
      "icon_util_unittests.rc",
      "icon_util_unittests_resource.h",
      "path_win_unittest.cc",
      "platform_font_win_unittest.cc",
      "win/text_analysis_source_unittest.cc",
    ]

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

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

  if (!is_ios) {
    deps += [
      "//cc/paint",
      "//mojo/core/embedder",
      "//mojo/public/cpp/bindings",
      "//mojo/public/cpp/test_support:test_utils",
      "//ui/gfx/geometry/mojo:unit_test",
      "//ui/gfx/image/mojo:unit_test",
      "//ui/gfx/mojo:test_interfaces",
      "//ui/gfx/range/mojo:unit_test",
    ]
  }

  if (is_linux) {
    sources += [ "linux/native_pixmap_dmabuf_unittest.cc" ]
  }
}

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/ViewConfigurationHelper.java",
    ]
    jni_package = "gfx"
  }
}

fuzzer_test("color_transform_fuzzer") {
  sources = [
    "color_transform_fuzzer.cc",
  ]

  dict = "//testing/libfuzzer/fuzzers/dicts/icc.dict"

  deps = [
    ":gfx",
  ]

  libfuzzer_options = [ "max_len=4194304" ]
}
