# Copyright 2014 Google Inc. 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.

{
  'variables': {
    'cobalt_code': 1,
  },

  'targets': [
    # 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.
    {
      'target_name': 'render_tree',
      'type': 'static_library',
      'sources': [
        'blur_filter.h',
        'border.cc',
        'border.h',
        'brush.cc',
        'brush.h',
        'brush_visitor.h',
        'child_iterator.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',
        'map_to_mesh_filter.h',
        'matrix_transform_node.cc',
        'matrix_transform_node.h',
        'mesh.h',
        '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.h',
        'rounded_viewport_filter.h',
        'shadow.h',
        'text_node.cc',
        'text_node.h',
        'typeface.h',
        'viewport_filter.h',
      ],
      'dependencies': [
        '<(DEPTH)/cobalt/base/base.gyp:base',
        '<(DEPTH)/cobalt/math/math.gyp:math',
      ],
    },

    # Support for describing and applying render tree animations.
    {
      'target_name': 'animations',
      'type': 'static_library',
      'sources': [
        'animations/animate_node.cc',
        'animations/animate_node.h',
      ],
      'dependencies': [
        'render_tree',
      ],
    },

    # Tests the render tree utility functionality.
    {
      'target_name': 'render_tree_test',
      'type': '<(gtest_target_type)',
      'sources': [
        'animations/animate_node_test.cc',
        'brush_visitor_test.cc',
        'color_rgba_test.cc',
        'node_visitor_test.cc',
      ],
      'dependencies': [
        '<(DEPTH)/base/base.gyp:run_all_unittests',
        '<(DEPTH)/testing/gmock.gyp:gmock',
        '<(DEPTH)/testing/gtest.gyp:gtest',
        'animations',
        'render_tree',
      ],
    },

    # Deploys the render tree library test on a console.
    {
      'target_name': 'render_tree_test_deploy',
      'type': 'none',
      'dependencies': [
        'render_tree_test',
      ],
      'variables': {
        'executable_name': 'render_tree_test',
      },
      'includes': [ '../../starboard/build/deploy.gypi' ],
    },
  ],
}
