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

# This file contains UI-related build flags (see features.gni for Chrome
# feature-related ones). These should theoretically be moved to the ui
# directory.
#
# However, today we have many "bad" dependencies on some of these flags from,
# e.g. base, so they need to be global to match the GYP configuration. Also,
# anything that needs a grit define must be in either this file or features.gni.
#
# PLEASE TRY TO AVOID ADDING FLAGS TO THIS FILE in cases where grit isn't
# required. See the declare_args block of BUILDCONFIG.gn for advice on how
# to set up feature flags.

import("//build/config/chromecast_build.gni")

declare_args() {
  # Indicates if Ash is enabled. Ash is the Aura Shell which provides a
  # desktop-like environment for Aura. Requires use_aura = true
  use_ash = (is_win || is_linux) && !is_chromecast

  # Indicates if Ozone is enabled. Ozone is a low-level library layer for Linux
  # that does not require X11. Enabling this feature disables use of glib, x11,
  # Pango, and Cairo. Default to false on non-Chromecast builds.
  use_ozone = is_chromecast && !is_android

  # Indicates if Aura is enabled. Aura is a low-level windowing library, sort
  # of a replacement for GDI or GTK.
  use_aura = is_win || is_linux || is_chromecast

  # True means the UI is built using the "views" framework.
  toolkit_views =
      (is_mac || is_win || is_chromeos || use_aura) && !is_chromecast

  # Whether the entire browser uses toolkit-views on Mac instead of Cocoa.
  mac_views_browser = false

  # Whether we should use GTKv3 instead of GTKv2.
  use_gtk3 = false

  # Optional system libraries.
  use_xkbcommon = false
}

# Additional dependent variables -----------------------------------------------
#
# These variables depend on other variables and can't be set externally.

# Use GPU accelerated cross process image transport by default on linux builds
# with the Aura window manager.
ui_compositor_image_transport = use_aura && is_linux

use_default_render_theme = use_aura && !is_android

# Indicates if the UI toolkit depends on X11.
use_x11 = is_linux && !use_ozone

# Whether we should use glib, a low level C utility library.
use_glib = is_linux && !use_ozone

if (is_linux && use_glib) {
  use_cairo = true
  use_pango = true
} else {
  use_cairo = false
  use_pango = false
}

# Whether to use atk, the Accessibility ToolKit library
use_atk = is_desktop_linux && use_x11

use_clipboard_aurax11 = is_linux && use_aura && use_x11

enable_hidpi = is_mac || is_win || is_linux

enable_topchrome_md = is_chromeos || is_win || is_linux
