# 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("//flutter/impeller/tools/impeller.gni")

impeller_component("skia_conversions") {
  sources = [
    "skia_conversions.cc",
    "skia_conversions.h",
  ]

  public_deps = [
    "../core",
    "../geometry",
    "//flutter/fml",
    "//third_party/skia",
  ]
}

impeller_component("display_list") {
  sources = [
    "dl_dispatcher.cc",
    "dl_dispatcher.h",
    "dl_image_impeller.cc",
    "dl_image_impeller.h",
    "dl_vertices_geometry.cc",
    "dl_vertices_geometry.h",
    "nine_patch_converter.cc",
    "nine_patch_converter.h",
  ]

  public_deps = [
    ":skia_conversions",
    "../aiks",
    "//flutter/display_list",
    "//flutter/fml",
    "//third_party/skia",
  ]

  if (!defined(defines)) {
    defines = []
  }
  if (impeller_enable_3d) {
    defines += [ "IMPELLER_ENABLE_3D" ]
  }
}

impeller_component("display_list_unittests") {
  testonly = true

  sources = [
    "dl_playground.cc",
    "dl_playground.h",
    "dl_unittests.cc",
  ]

  deps = [
    ":display_list",
    "../playground:playground_test",
  ]

  if (!defined(defines)) {
    defines = []
  }
  if (impeller_enable_3d) {
    defines += [ "IMPELLER_ENABLE_3D" ]
  }
}
