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

component("native_theme") {
  sources = [
    "caption_style.cc",
    "caption_style.h",
    "common_theme.cc",
    "common_theme.h",
    "native_theme.cc",
    "native_theme.h",
    "native_theme_base.cc",
    "native_theme_base.h",
    "native_theme_color_id.h",
    "native_theme_export.h",
    "native_theme_features.cc",
    "native_theme_features.h",
    "native_theme_observer.cc",
    "native_theme_observer.h",
    "themed_vector_icon.cc",
    "themed_vector_icon.h",
  ]

  if (is_android) {
    sources += [
      "native_theme_android.cc",
      "native_theme_android.h",
    ]
  }

  if (is_mac) {
    sources += [
      "caption_style_mac.mm",
      "native_theme_mac.h",
      "native_theme_mac.mm",
    ]
  }

  if (is_win) {
    sources += [ "caption_style_win.cc" ]
  }

  if (use_aura || toolkit_views) {
    sources += [
      "native_theme_aura.cc",
      "native_theme_aura.h",
      "overlay_scrollbar_constants_aura.h",
    ]
  }

  defines = [ "NATIVE_THEME_IMPLEMENTATION" ]

  public_deps = [ "//skia" ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//build:chromeos_buildflags",
    "//cc/paint",
    "//ui/base",
    "//ui/color",

    # http://crbug.com/730719 - No !is_android to work around gn --check.
    "//ui/color:mixers",
    "//ui/display",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/resources",
  ]

  if (is_mac) {
    frameworks = [
      "CoreGraphics.framework",
      "AppKit.framework",
      "MediaAccessibility.framework",
    ]
  }
}

if (is_win) {
  component("native_theme_browser") {
    defines = [ "NATIVE_THEME_IMPLEMENTATION" ]

    # These files cannot work in the renderer on Windows.
    sources = [
      "native_theme_win.cc",
      "native_theme_win.h",
    ]

    deps = [
      ":native_theme",
      "//base",
      "//cc/paint",
      "//ui/base",
      "//ui/display",
      "//ui/gfx",
    ]

    libs = [ "uxtheme.lib" ]
  }
} else {
  source_set("native_theme_browser") {
  }
}

source_set("test_support") {
  testonly = true

  deps = [
    ":native_theme",
    "//base",
  ]

  sources = [
    "test_native_theme.cc",
    "test_native_theme.h",
  ]
}

test("native_theme_unittests") {
  use_xvfb = use_xvfb_in_this_config

  sources = [
    "native_theme_unittest.cc",
    "themed_vector_icon_unittest.cc",
  ]

  if (use_aura) {
    sources += [ "native_theme_aura_unittest.cc" ]
  }

  if (is_mac) {
    sources += [ "native_theme_mac_unittest.mm" ]
  }

  if (is_win) {
    sources += [
      "caption_style_win_unittest.cc",
      "native_theme_win_unittest.cc",
    ]
  }

  deps = [
    ":native_theme",
    ":native_theme_browser",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//skia",
    "//testing/gtest",
    "//ui/base",
    "//ui/gfx/geometry:geometry",
  ]
}
