# 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.cc",
    "text/line_metrics.h",
    "text/paragraph.cc",
    "text/paragraph.h",
    "text/paragraph_builder.cc",
    "text/paragraph_builder.h",
    "text/text_box.cc",
    "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",
    ]

    if (using_fuchsia_sdk) {
      deps += [
        "$fuchsia_sdk_root/pkg:async-cpp",
        "//flutter/shell/platform/fuchsia/dart-pkg/fuchsia",
        "//flutter/shell/platform/fuchsia/dart-pkg/zircon",
      ]
    } else {
      deps += [ "//topaz/public/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

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

    deps = [
      ":ui",
      ":ui_unittests_fixtures",
      "//flutter/common",
      "//flutter/testing:dart",
      "//flutter/testing:opengl",
    ]
  }
}
