# Copyright 2016 The Chromium 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("//third_party/WebKit/Source/core/core.gni")

blink_core_sources("rendering") {
  visibility = [ "//third_party/WebKit/Source/core/*" ]

  sources = [
    "AppliedTextDecoration.cpp",
    "AppliedTextDecoration.h",
    "BasicShapes.cpp",
    "BasicShapes.h",
    "BorderData.h",
    "BorderEdge.cpp",
    "BorderEdge.h",
    "BorderImageLength.h",
    "BorderImageLengthBox.h",
    "BorderStyle.h",
    "BorderValue.h",
    "CachedUAStyle.h",
    "ClipPathOperation.cpp",
    "ClipPathOperation.h",
    "ComputedStyle.cpp",
    "ComputedStyle.h",
    "ComputedStyleConstants.h",
    "ContentData.cpp",
    "ContentData.h",
    "CounterContent.h",
    "CounterDirectives.cpp",
    "CounterDirectives.h",
    "CursorData.h",
    "DataEquivalency.h",
    "DataPersistent.h",
    "DataRef.h",
    "FillLayer.cpp",
    "FillLayer.h",
    "FilterOperation.cpp",
    "FilterOperation.h",
    "FilterOperations.cpp",
    "FilterOperations.h",
    "GridArea.h",
    "GridLength.h",
    "GridPosition.h",
    "GridPositionsResolver.cpp",
    "GridPositionsResolver.h",
    "GridTrackSize.h",
    "LineClampValue.h",
    "NinePieceImage.cpp",
    "NinePieceImage.h",
    "OutlineValue.h",
    "QuotesData.cpp",
    "QuotesData.h",
    "ShadowData.cpp",
    "ShadowData.h",
    "ShadowList.cpp",
    "ShadowList.h",
    "StyleContentAlignmentData.h",
    "StyleDeprecatedFlexibleBoxData.cpp",
    "StyleDeprecatedFlexibleBoxData.h",
    "StyleDifference.cpp",
    "StyleDifference.h",
    "StyleFetchedImage.cpp",
    "StyleFetchedImage.h",
    "StyleFetchedImageSet.cpp",
    "StyleFetchedImageSet.h",
    "StyleFilterData.cpp",
    "StyleFilterData.h",
    "StyleFlexibleBoxData.cpp",
    "StyleFlexibleBoxData.h",
    "StyleGeneratedImage.cpp",
    "StyleGeneratedImage.h",
    "StyleGridData.cpp",
    "StyleGridData.h",
    "StyleGridItemData.cpp",
    "StyleGridItemData.h",
    "StyleImage.cpp",
    "StyleImage.h",
    "StyleInheritedData.cpp",
    "StyleInheritedData.h",
    "StyleInheritedVariables.cpp",
    "StyleInheritedVariables.h",
    "StyleInvalidImage.h",
    "StyleMotionData.cpp",
    "StyleMotionData.h",
    "StyleMultiColData.cpp",
    "StyleMultiColData.h",
    "StyleNonInheritedVariables.cpp",
    "StyleNonInheritedVariables.h",
    "StyleOffsetRotation.h",
    "StylePath.cpp",
    "StylePath.h",
    "StylePendingImage.h",
    "StyleRareInheritedData.cpp",
    "StyleRareInheritedData.h",
    "StyleRareNonInheritedData.cpp",
    "StyleRareNonInheritedData.h",
    "StyleReflection.h",
    "StyleScrollSnapData.cpp",
    "StyleScrollSnapData.h",
    "StyleSelfAlignmentData.h",
    "StyleTransformData.cpp",
    "StyleTransformData.h",
    "StyleWillChangeData.cpp",
    "StyleWillChangeData.h",
    "TextSizeAdjust.h",
  ]
  configs += [
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]
}

blink_core_sources("svg_style") {
  sources = [
    "SVGComputedStyle.cpp",
    "SVGComputedStyle.h",
    "SVGComputedStyleDefs.cpp",
    "SVGComputedStyleDefs.h",
  ]
  configs += [
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]
}
