# Copyright 2013 The Flutter 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/fuchsia/sdk.gni")
import("//flutter/common/config.gni")
import("//flutter/testing/testing.gni")

source_set("ui") {
  sources = [
    "compositing/scene.cc",
    "compositing/scene.h",
    "compositing/scene_builder.cc",
    "compositing/scene_builder.h",
    "dart_runtime_hooks.cc",
    "dart_runtime_hooks.h",
    "dart_ui.cc",
    "dart_ui.h",
    "dart_wrapper.h",
    "io_manager.h",
    "isolate_name_server/isolate_name_server.cc",
    "isolate_name_server/isolate_name_server.h",
    "isolate_name_server/isolate_name_server_natives.cc",
    "isolate_name_server/isolate_name_server_natives.h",
    "painting/canvas.cc",
    "painting/canvas.h",
    "painting/codec.cc",
    "painting/codec.h",
    "painting/color_filter.cc",
    "painting/color_filter.h",
    "painting/engine_layer.cc",
    "painting/engine_layer.h",
    "painting/frame_info.cc",
    "painting/frame_info.h",
    "painting/gradient.cc",
    "painting/gradient.h",
    "painting/image.cc",
    "painting/image.h",
    "painting/image_decoder.cc",
    "painting/image_decoder.h",
    "painting/image_encoding.cc",
    "painting/image_encoding.h",
    "painting/image_filter.cc",
    "painting/image_filter.h",
    "painting/image_shader.cc",
    "painting/image_shader.h",
    "painting/matrix.cc",
    "painting/matrix.h",
    "painting/multi_frame_codec.cc",
    "painting/multi_frame_codec.h",
    "painting/paint.cc",
    "painting/paint.h",
    "painting/path.cc",
    "painting/path.h",
    "painting/path_measure.cc",
    "painting/path_measure.h",
    "painting/picture.cc",
    "painting/picture.h",
    "painting/picture_recorder.cc",
    "painting/picture_recorder.h",
    "painting/rrect.cc",
    "painting/rrect.h",
    "painting/shader.cc",
    "painting/shader.h",
    "painting/single_frame_codec.cc",
    "painting/single_frame_codec.h",
    "painting/vertices.cc",
    "painting/vertices.h",
    "plugins/callback_cache.cc",
    "plugins/callback_cache.h",
    "semantics/custom_accessibility_action.cc",
    "semantics/custom_accessibility_action.h",
    "semantics/semantics_node.cc",
    "semantics/semantics_node.h",
    "semantics/semantics_update.cc",
    "semantics/semantics_update.h",
    "semantics/semantics_update_builder.cc",
    "semantics/semantics_update_builder.h",
    "snapshot_delegate.h",
    "text/asset_manager_font_provider.cc",
    "text/asset_manager_font_provider.h",
    "text/font_collection.cc",
    "text/font_collection.h",
    "text/line_metrics.h",
    "text/paragraph.cc",
    "text/paragraph.h",
    "text/paragraph_builder.cc",
    "text/paragraph_builder.h",
    "text/text_box.h",
    "ui_dart_state.cc",
    "ui_dart_state.h",
    "window/platform_message.cc",
    "window/platform_message.h",
    "window/platform_message_response.cc",
    "window/platform_message_response.h",
    "window/platform_message_response_dart.cc",
    "window/platform_message_response_dart.h",
    "window/pointer_data.cc",
    "window/pointer_data.h",
    "window/pointer_data_packet.cc",
    "window/pointer_data_packet.h",
    "window/pointer_data_packet_converter.cc",
    "window/pointer_data_packet_converter.h",
    "window/viewport_metrics.cc",
    "window/viewport_metrics.h",
    "window/window.cc",
    "window/window.h",
  ]

  public_configs = [ "//flutter:config" ]

  deps = [
    "//flutter/assets",
    "//flutter/common",
    "//flutter/flow",
    "//flutter/fml",
    "//flutter/runtime:test_font",
    "//flutter/third_party/tonic",
    "//third_party/dart/runtime/bin:dart_io_api",
    "//third_party/rapidjson",
    "//third_party/skia",
  ]

  public_deps = [
    "//flutter/third_party/txt",
  ]

  if (flutter_enable_skshaper) {
    defines = [ "FLUTTER_ENABLE_SKSHAPER" ]
  }

  if (is_fuchsia) {
    sources += [
      "compositing/scene_host.cc",
      "compositing/scene_host.h",
    ]

    deps += [
      "$fuchsia_sdk_root/pkg:async-cpp",
      "//flutter/shell/platform/fuchsia/dart-pkg/fuchsia",
      "//flutter/shell/platform/fuchsia/dart-pkg/zircon",
    ]
  }
}

if (current_toolchain == host_toolchain) {
  test_fixtures("ui_unittests_fixtures") {
    dart_main = "fixtures/ui_test.dart"
    fixtures = [
      "fixtures/DashInNooglerHat.jpg",
      "fixtures/Horizontal.jpg",
      "fixtures/Horizontal.png",
      "fixtures/hello_loop_2.gif",
      "fixtures/hello_loop_2.webp",
    ]
  }

  executable("ui_unittests") {
    testonly = true

    configs += [ "//flutter:export_dynamic_symbols" ]

    sources = [
      "painting/image_decoder_test.cc",
      "painting/image_decoder_test.h",
      "painting/image_decoder_unittests.cc",
      "window/pointer_data_packet_converter_unittests.cc",
    ]

    deps = [
      ":ui",
      ":ui_unittests_fixtures",
      "//flutter/common",
      "//flutter/testing",
      "//flutter/testing:dart",
      "//flutter/testing:opengl",
      "//flutter/third_party/tonic",
      "//third_party/dart/runtime/bin:elf_loader",
    ]
  }
}
