# 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_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",
  ]
  deps = [
    ":aiks",
    "../playground:playground_test",
  ]
}

impeller_component("aiks_unittests") {
  testonly = true
  sources = [
    "aiks_unittests.cc",
    "canvas_unittests.cc",
  ]
  deps = [
    ":aiks",
    ":aiks_playground",
    "//flutter/impeller/geometry:geometry_asserts",
    "//flutter/impeller/golden_tests:golden_playground_test",
    "//flutter/impeller/playground:playground_test",
    "//flutter/testing:testing_lib",
  ]
}

impeller_component("aiks_unittests_golden") {
  testonly = true

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

  sources = [ "aiks_unittests.cc" ]
  deps = [
    ":aiks",
    ":aiks_playground",
    "//flutter/impeller/geometry:geometry_asserts",
    "//flutter/impeller/golden_tests:golden_playground_test",
    "//flutter/impeller/playground:playground_test",
    "//flutter/testing:testing_lib",
  ]
}
