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

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

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

# Automatically depends on the GTK version associated with the current build
# flags.
group("libgtkui") {
  if (use_gtk3) {
    public_deps = [
      ":libgtk3ui",
    ]
  } else {
    public_deps = [
      ":libgtk2ui",
    ]
  }
}

template("libgtkui") {
  component(target_name) {
    sources = invoker.sources + [
                "app_indicator_icon.cc",
                "app_indicator_icon.h",
                "app_indicator_icon_menu.cc",
                "app_indicator_icon_menu.h",
                "chrome_gtk_frame.cc",
                "chrome_gtk_frame.h",
                "chrome_gtk_menu_subclasses.cc",
                "chrome_gtk_menu_subclasses.h",
                "gtk_event_loop.cc",
                "gtk_event_loop.h",
                "gtk_key_bindings_handler.cc",
                "gtk_key_bindings_handler.h",
                "gtk_signal.h",
                "gtk_status_icon.cc",
                "gtk_status_icon.h",
                "gtk_ui.cc",
                "gtk_ui.h",
                "gtk_util.cc",
                "gtk_util.h",
                "libgtkui_export.h",
                "menu_util.cc",
                "menu_util.h",
                "settings_provider.h",
                "print_dialog_gtk.cc",
                "print_dialog_gtk.h",
                "printing_gtk_util.cc",
                "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",
                "skia_utils_gtk.cc",
                "skia_utils_gtk.h",
                "unity_service.cc",
                "unity_service.h",
                "x11_input_method_context_impl_gtk.cc",
                "x11_input_method_context_impl_gtk.h",
              ]

    configs += [
      "//build/config/linux/pangocairo",
      "//build/config/linux:x11",
    ]

    if (use_gio) {
      sources += [
        "settings_provider_gsettings.cc",
        "settings_provider_gsettings.h",
      ]
      configs += [ "//build/linux:gio_config" ]
    }

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

    defines = [ "LIBGTKUI_IMPLEMENTATION" ]

    deps = invoker.deps + [
             "//chrome/browser/ui/views",
             "//chrome/common:constants",
             "//base",
             "//base:i18n",
             "//base/third_party/dynamic_annotations",
             "//cc/paint",
             "//chrome/common:buildflags",
             "//chrome:extra_resources",
             "//chrome:resources",
             "//chrome:strings",
             "//chrome/app:command_ids",
             "//chrome/app/theme:theme_resources",
             "//components/prefs",
             "//components/resources",
             "//content/public/browser",
             "//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.
             "//third_party:freetype_harfbuzz",
             "//ui/aura",
             "//ui/base",
             "//ui/base/ime",
             "//ui/display",
             "//ui/events",
             "//ui/events:dom_keyboard_layout",
             "//ui/events:dom_keycode_converter",
             "//ui/events:events_base",
             "//ui/events/platform/x11",
             "//ui/gfx",
             "//ui/gfx/geometry",
             "//ui/gfx/x",
             "//ui/native_theme",
             "//ui/resources",
             "//ui/shell_dialogs",
             "//ui/strings",
             "//ui/views",
           ]
    public_deps = [
      "//chrome/browser:theme_properties",
    ]
  }
}

if (use_gtk3) {
  libgtkui("libgtk3ui") {
    sources = [
      "gtk3_background_painter.cc",
      "gtk3_background_painter.h",
      "native_theme_gtk3.cc",
      "native_theme_gtk3.h",
      "nav_button_provider_gtk3.cc",
      "nav_button_provider_gtk3.h",
      "settings_provider_gtk3.cc",
      "settings_provider_gtk3.h",
    ]
    deps = [
      "//build/config/linux/gtk3",
      "//build/config/linux/gtk3:gtkprint3",
    ]
  }
} else {
  libgtkui("libgtk2ui") {
    sources = [
      "native_theme_gtk2.cc",
      "native_theme_gtk2.h",
    ]
    deps = [
      "//build/config/linux/gtk2",
      "//build/config/linux/gtk2:gtkprint2",
    ]
  }
}
