# Copyright 2020 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.

assert(is_linux || is_chromeos, "This file should only be referenced on Linux")

import("//build/config/features.gni")
import("//build/config/linux/gtk/gtk.gni")
import("//build/config/ozone.gni")
import("//build/config/ui.gni")
import("//printing/buildflags/buildflags.gni")

component("gtk_ui_delegate") {
  public = [ "gtk_ui_delegate.h" ]
  sources = [ "gtk_ui_delegate.cc" ]
  deps = [
    "//base",
    "//ui/gfx",
  ]
  defines = [ "IS_GTK_IMPL" ]
}

component("gtk") {
  public = [ "gtk_ui.h" ]
  sources = [
    "gtk_key_bindings_handler.cc",
    "gtk_key_bindings_handler.h",
    "gtk_ui.cc",
    "gtk_util.cc",
    "gtk_util.h",
    "input_method_context_impl_gtk.cc",
    "input_method_context_impl_gtk.h",
    "native_theme_gtk.cc",
    "native_theme_gtk.h",
    "nav_button_provider_gtk.cc",
    "nav_button_provider_gtk.h",
    "printing/print_dialog_gtk.cc",
    "printing/print_dialog_gtk.h",
    "printing/printing_gtk_util.cc",
    "printing/printing_gtk_util.h",
    "select_file_dialog_impl.cc",
    "select_file_dialog_impl.h",
    "select_file_dialog_impl_gtk.cc",
    "select_file_dialog_impl_gtk.h",
    "select_file_dialog_impl_kde.cc",
    "settings_provider.h",
    "settings_provider_gtk.cc",
    "settings_provider_gtk.h",
  ]
  defines = [ "IS_GTK_IMPL" ]
  configs += [ "//build/config/linux/pangocairo" ]
  if (use_gio) {
    sources += [
      "settings_provider_gsettings.cc",
      "settings_provider_gsettings.h",
    ]
    configs += [ "//build/linux:gio_config" ]
  }

  if (use_cups) {
    configs += [ "//printing:cups" ]
  }

  deps = [
    "//base",
    "//build/config/linux/gtk:gtkprint",
    "//printing",
    "//skia",

    # GTK pulls pangoft2, which requires HarfBuzz symbols. When linking
    # our own HarfBuzz avoid mixing symbols from system HarfBuzz and
    # our own through the indirect dependency to harfbuzz-ng here.
    "//build/config/linux/gtk",
    "//third_party:freetype_harfbuzz",
    "//ui/aura",
    "//ui/base",
    "//ui/base:buildflags",
    "//ui/base/cursor:theme_manager",
    "//ui/base/ime",
    "//ui/base/ime/linux",
    "//ui/display",
    "//ui/events",
    "//ui/events:dom_keyboard_layout",
    "//ui/events:dom_keycode_converter",
    "//ui/gfx",
    "//ui/gfx:native_widget_types",
    "//ui/gfx/geometry",
    "//ui/native_theme",
    "//ui/shell_dialogs",
    "//ui/strings",
    "//ui/views",
  ]

  if (use_cups) {
    deps += [ "//printing/mojom" ]
  }

  public_deps = [ ":gtk_ui_delegate" ]

  # TODO: This should be removed.
  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }
}
