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

impeller_component("aiks") {
  sources = [
    "aiks_context.cc",
    "aiks_context.h",
    "canvas.cc",
    "canvas.h",
    "color_filter.cc",
    "color_filter.h",
    "color_source.cc",
    "color_source.h",
    "image.cc",
    "image.h",
    "paint.cc",
    "paint.h",
    "paint_pass_delegate.cc",
    "paint_pass_delegate.h",
    "picture.cc",
    "picture.h",
    "picture_recorder.cc",
    "picture_recorder.h",
  ]

  public_deps = [
    "../base",
    "../entity",
    "../geometry",
  ]

  deps = [ "//flutter/fml" ]
}

impeller_component("aiks_playground") {
  testonly = true

  sources = [
    "aiks_playground.cc",
    "aiks_playground.h",
    "aiks_playground_inspector.cc",
    "aiks_playground_inspector.h",
  ]
  deps = [
    ":aiks",
    "../playground:playground_test",
  ]
  public_deps = [
    "//flutter/impeller/typographer/backends/skia:typographer_skia_backend",
  ]
}

impeller_component("aiks_unittests") {
  testonly = true

  sources = [
    "aiks_unittests.cc",
    "canvas_unittests.cc",
    "testing/context_mock.h",
    "testing/context_spy.cc",
    "testing/context_spy.h",
  ]
  deps = [
    ":aiks",
    ":aiks_playground",
    "//flutter/impeller/geometry:geometry_asserts",
    "//flutter/impeller/golden_tests:golden_playground_test",
    "//flutter/impeller/playground:playground_test",
    "//flutter/impeller/scene",
    "//flutter/impeller/typographer/backends/stb:typographer_stb_backend",
    "//flutter/testing:testing_lib",
  ]
}

impeller_component("aiks_unittests_golden") {
  testonly = true

  defines = [
    "IMPELLER_GOLDEN_TESTS",
    "IMPELLER_ENABLE_VALIDATION=1",
  ]

  sources = [
    "aiks_unittests.cc",
    "testing/context_mock.h",
    "testing/context_spy.cc",
    "testing/context_spy.h",
  ]
  deps = [
    ":aiks",
    ":aiks_playground",
    "//flutter/impeller/geometry:geometry_asserts",
    "//flutter/impeller/golden_tests:golden_playground_test",
    "//flutter/impeller/playground:playground_test",
    "//flutter/impeller/scene",
    "//flutter/impeller/typographer/backends/stb:typographer_stb_backend",
    "//flutter/testing:testing_lib",
  ]
}
