# 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("//build/config/ui.gni")

component("display") {
  sources = [
    "chromeos/display_configurator.cc",
    "chromeos/display_configurator.h",
    "chromeos/ozone/display_configurator_ozone.cc",
    "chromeos/x11/display_configurator_x11.cc",
    "chromeos/x11/display_mode_x11.cc",
    "chromeos/x11/display_mode_x11.h",
    "chromeos/x11/display_snapshot_x11.cc",
    "chromeos/x11/display_snapshot_x11.h",
    "chromeos/x11/display_util_x11.cc",
    "chromeos/x11/display_util_x11.h",
    "chromeos/x11/native_display_delegate_x11.cc",
    "chromeos/x11/native_display_delegate_x11.h",
    "chromeos/x11/native_display_event_dispatcher_x11.cc",
    "chromeos/x11/native_display_event_dispatcher_x11.h",
    "display_export.h",
    "display_switches.cc",
    "display_switches.h",
  ]

  defines = [ "DISPLAY_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//ui/display/util",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (use_x11) {
    configs += [
      "//build/config/linux:x11",
      "//build/config/linux:xext",
      "//build/config/linux:xi",
      "//build/config/linux:xrandr",
    ]
    deps += [ "//ui/events/platform" ]
    if (is_chromeos) {
      sources -= [ "chromeos/ozone/display_configurator_ozone.cc" ]
    }
  }

  if (is_chromeos) {
    deps += [ "//ui/display/types" ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
    sources -= [
      "chromeos/x11/display_configurator_x11.cc",
      "chromeos/x11/display_mode_x11.cc",
      "chromeos/x11/display_mode_x11.h",
      "chromeos/x11/display_snapshot_x11.cc",
      "chromeos/x11/display_snapshot_x11.h",
      "chromeos/x11/display_util_x11.cc",
      "chromeos/x11/display_util_x11.h",
      "chromeos/x11/native_display_delegate_x11.cc",
      "chromeos/x11/native_display_delegate_x11.h",
      "chromeos/x11/native_display_event_dispatcher_x11.cc",
      "chromeos/x11/native_display_event_dispatcher_x11.h",
    ]
  }
}

component("test_util") {
  output_name = "display_test_util"
  sources = [
    "chromeos/test/test_display_snapshot.cc",
    "chromeos/test/test_display_snapshot.h",
  ]

  defines = [ "DISPLAY_IMPLEMENTATION" ]

  public_deps = [
    ":display",
  ]
  deps = [
    "//base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (is_chromeos) {
    deps += [ "//ui/display/types" ]
  }
}

test("display_unittests") {
  sources = [
    "chromeos/display_configurator_unittest.cc",
    "chromeos/x11/display_util_x11_unittest.cc",
    "chromeos/x11/native_display_event_dispatcher_x11_unittest.cc",
    "util/display_util_unittest.cc",
    "util/edid_parser_unittest.cc",
  ]

  deps = [
    ":test_util",
    "//base",
    "//base/test:run_all_unittests",
    "//testing/gtest",
    "//ui/display/util",
    "//ui/gfx/geometry",
  ]

  if (is_chromeos) {
    deps += [
      ":display",
      "//ui/display/types",
    ]
  }
}
