# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Compiles code related to the definition of the render tree. The render
# tree is the output of the layout stage and the input to the rendering
# stage.
static_library("render_tree") {
  has_pedantic_warnings = true

  sources = [
    "blur_filter.h",
    "border.cc",
    "border.h",
    "brush.cc",
    "brush.h",
    "brush_visitor.h",
    "child_iterator.h",
    "clear_rect_node.cc",
    "clear_rect_node.h",
    "color_rgba.h",
    "composition_node.cc",
    "composition_node.h",
    "dump_render_tree_to_string.cc",
    "filter_node.cc",
    "filter_node.h",
    "font.h",
    "font_provider.h",
    "glyph.h",
    "glyph_buffer.h",
    "image_node.cc",
    "image_node.h",
    "lottie_animation.h",
    "lottie_node.cc",
    "lottie_node.h",
    "map_to_mesh_filter.h",
    "matrix_transform_3d_node.cc",
    "matrix_transform_3d_node.h",
    "matrix_transform_node.cc",
    "matrix_transform_node.h",
    "mesh.h",
    "node.cc",
    "node.h",
    "node_visitor.h",
    "opacity_filter.h",
    "punch_through_video_node.cc",
    "rect_node.cc",
    "rect_node.h",
    "rect_shadow_node.cc",
    "rect_shadow_node.h",
    "resource_provider.h",
    "resource_provider_stub.h",
    "rounded_corners.cc",
    "rounded_corners.h",
    "shadow.h",
    "text_node.cc",
    "text_node.h",
    "typeface.h",
    "viewport_filter.h",
  ]

  configs -= [ "//starboard/build/config:size" ]
  configs += [ "//starboard/build/config:speed" ]

  deps = [
    "//cobalt/base",
    "//cobalt/math",
    "//starboard:starboard_headers_only",
    "//third_party/ots",
  ]
}

# Support for describing and applying render tree animations.
static_library("animations") {
  has_pedantic_warnings = true

  sources = [
    "animations/animate_node.cc",
    "animations/animate_node.h",
  ]

  configs -= [ "//starboard/build/config:size" ]
  configs += [ "//starboard/build/config:speed" ]

  deps = [
    ":render_tree",
    "//cobalt/base",
    "//cobalt/math",
  ]
}

# Tests the render tree utility functionality.
target(gtest_target_type, "render_tree_test") {
  has_pedantic_warnings = true
  testonly = true

  sources = [
    "animations/animate_node_test.cc",
    "brush_visitor_test.cc",
    "color_rgba_test.cc",
    "node_visitor_test.cc",
  ]

  configs -= [ "//starboard/build/config:size" ]
  configs += [ "//starboard/build/config:speed" ]

  deps = [
    ":animations",
    ":render_tree",
    "//cobalt/base",
    "//cobalt/math",
    "//cobalt/test:run_all_unittests",
    "//starboard:starboard_headers_only",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
