# 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",
    ]
  }
}
