# Copyright 2014 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("//testing/test.gni")

# GYP version: ui/accelerated_widget_mac/accelerated_widget_mac.gyp:accelerated_widget_mac
component("accelerated_widget_mac") {
  sources = [
    "accelerated_widget_mac.h",
    "accelerated_widget_mac.mm",
    "accelerated_widget_mac_export.h",
    "ca_layer_tree_coordinator.h",
    "ca_layer_tree_coordinator.mm",
    "ca_renderer_layer_tree.h",
    "ca_renderer_layer_tree.mm",
    "display_link_mac.cc",
    "display_link_mac.h",
    "fullscreen_low_power_coordinator.h",
    "gl_renderer_layer_tree.h",
    "gl_renderer_layer_tree.mm",
    "io_surface_context.h",
    "io_surface_context.mm",
    "window_resize_helper_mac.cc",
    "window_resize_helper_mac.h",
  ]

  defines = [ "ACCELERATED_WIDGET_MAC_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//skia",
    "//ui/base",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]

  libs = [
    "AVFoundation.framework",
    "CoreGraphics.framework",
    "Foundation.framework",
    "CoreFoundation.framework",
    "CoreMedia.framework",
    "IOSurface.framework",
    "OpenGL.framework",
    "QuartzCore.framework",
  ]
}

# GYP version: ui/accelerated_widget_mac/accelerated_widget_mac.gyp:accelerated_widget_mac_unittests
test("accelerated_widget_mac_unittests") {
  configs += [ "//build/config:precompiled_headers" ]
  sources = [
    "ca_layer_tree_unittest_mac.mm",
  ]
  deps = [
    ":accelerated_widget_mac",
    "//base",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/gfx:test_support",
    "//ui/gl",
  ]
  libs = [
    "AVFoundation.framework",
    "QuartzCore.framework",
  ]
}
