# 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.

static_library("layout") {
  has_pedantic_warnings = true
  sources = [
    "anonymous_block_box.cc",
    "anonymous_block_box.h",
    "base_direction.h",
    "benchmark_stat_names.cc",
    "benchmark_stat_names.h",
    "block_container_box.cc",
    "block_container_box.h",
    "block_formatting_block_container_box.cc",
    "block_formatting_block_container_box.h",
    "block_formatting_context.cc",
    "block_formatting_context.h",
    "block_level_replaced_box.cc",
    "block_level_replaced_box.h",
    "box.cc",
    "box.h",
    "box_generator.cc",
    "box_generator.h",
    "box_intersection_observer_module.cc",
    "box_intersection_observer_module.h",
    "container_box.cc",
    "container_box.h",
    "flex_container_box.cc",
    "flex_container_box.h",
    "flex_formatting_context.cc",
    "flex_formatting_context.h",
    "flex_item.cc",
    "flex_item.h",
    "flex_line.cc",
    "flex_line.h",
    "formatting_context.h",
    "initial_containing_block.cc",
    "initial_containing_block.h",
    "inline_container_box.cc",
    "inline_container_box.h",
    "inline_formatting_context.cc",
    "inline_formatting_context.h",
    "inline_level_replaced_box.cc",
    "inline_level_replaced_box.h",
    "insets_layout_unit.cc",
    "insets_layout_unit.h",
    "intersection_observer_root.h",
    "intersection_observer_target.cc",
    "intersection_observer_target.h",
    "layout.cc",
    "layout.h",
    "layout_boxes.cc",
    "layout_boxes.h",
    "layout_manager.cc",
    "layout_manager.h",
    "layout_stat_tracker.cc",
    "layout_stat_tracker.h",
    "layout_unit.h",
    "letterboxed_image.cc",
    "letterboxed_image.h",
    "line_box.cc",
    "line_box.h",
    "line_wrapping.cc",
    "line_wrapping.h",
    "paragraph.cc",
    "paragraph.h",
    "point_layout_unit.cc",
    "point_layout_unit.h",
    "rect_layout_unit.cc",
    "rect_layout_unit.h",
    "render_tree_animations.h",
    "replaced_box.cc",
    "replaced_box.h",
    "size_layout_unit.cc",
    "size_layout_unit.h",
    "text_box.cc",
    "text_box.h",
    "topmost_event_target.cc",
    "topmost_event_target.h",
    "used_style.cc",
    "used_style.h",
    "vector2d_layout_unit.cc",
    "vector2d_layout_unit.h",
    "white_space_processing.cc",
    "white_space_processing.h",
  ]

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

  # Exporting dom so that layout_test gets the transitive include paths to
  # include generated headers.
  public_deps = [ "//cobalt/dom" ]
  deps = [
    "//base:i18n",
    "//cobalt/base",
    "//cobalt/cssom",
    "//cobalt/dom",
    "//cobalt/loader",
    "//cobalt/math",
    "//cobalt/media",
    "//cobalt/render_tree",
    "//cobalt/render_tree:animations",
    "//cobalt/ui_navigation",
    "//cobalt/web_animations",
    "//third_party/icu:icuuc",
  ]
}

target(gtest_target_type, "layout_test") {
  testonly = true
  has_pedantic_warnings = true

  sources = [
    "layout_unit_test.cc",
    "letterboxed_image_test.cc",
    "used_style_test.cc",
    "white_space_processing_test.cc",
  ]

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

  deps = [
    ":layout",
    "//base",
    "//cobalt/base",
    "//cobalt/css_parser",
    "//cobalt/cssom",
    "//cobalt/math",
    "//cobalt/test:run_all_unittests",
    "//testing/gmock",
    "//testing/gmock",
  ]
}
