# 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("//mojo/public/tools/bindings/mojom.gni")

# This target does NOT depend on skia. One can depend on this target to avoid
# picking up a dependency on skia.
mojom("mojom") {
  generate_java = true
  sources = [ "geometry.mojom" ]

  check_includes_blink = false

  shared_cpp_typemap = {
    types = [
      {
        mojom = "gfx.mojom.Point"
        cpp = "::gfx::Point"
      },
      {
        mojom = "gfx.mojom.PointF"
        cpp = "::gfx::PointF"
      },
      {
        mojom = "gfx.mojom.Point3F"
        cpp = "::gfx::Point3F"
      },
      {
        mojom = "gfx.mojom.Size"
        cpp = "::gfx::Size"
      },
      {
        mojom = "gfx.mojom.SizeF"
        cpp = "::gfx::SizeF"
      },
      {
        mojom = "gfx.mojom.Rect"
        cpp = "::gfx::Rect"
      },
      {
        mojom = "gfx.mojom.RectF"
        cpp = "::gfx::RectF"
      },
      {
        mojom = "gfx.mojom.Insets"
        cpp = "::gfx::Insets"
      },
      {
        mojom = "gfx.mojom.InsetsF"
        cpp = "::gfx::InsetsF"
      },
      {
        mojom = "gfx.mojom.Quaternion"
        cpp = "::gfx::Quaternion"
      },
      {
        mojom = "gfx.mojom.Vector2d"
        cpp = "::gfx::Vector2d"
      },
      {
        mojom = "gfx.mojom.Vector2dF"
        cpp = "::gfx::Vector2dF"
      },
      {
        mojom = "gfx.mojom.Vector3dF"
        cpp = "::gfx::Vector3dF"
      },
    ]

    traits_headers = [ "geometry_mojom_traits.h" ]
    traits_public_deps = [ ":mojom_traits" ]
  }
  cpp_typemaps = [ shared_cpp_typemap ]
  blink_cpp_typemaps = [ shared_cpp_typemap ]
  webui_module_path = "chrome://resources/mojo/ui/gfx/geometry/mojom"
}

mojom("test_interfaces") {
  sources = [ "geometry_traits_test_service.mojom" ]

  public_deps = [ ":mojom" ]
}

source_set("unit_test") {
  testonly = true

  sources = [ "geometry_mojom_traits_unittest.cc" ]

  deps = [
    ":test_interfaces",
    "//base",
    "//base/test:test_support",
    "//mojo/public/cpp/bindings",
    "//testing/gtest",
    "//ui/gfx/geometry",
  ]
}

source_set("mojom_traits") {
  sources = [ "geometry_mojom_traits.h" ]
  public_deps = [
    ":mojom_shared",
    "//ui/gfx/geometry",
  ]
}
