# 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. It should theoretically be in the
# src/ui directory and only things that depend on the ui module should get the
# definitions.
#
# However, today we have many "bad" dependencies on some of these flags from,
# e.g. base, so they need to be global.
#
# See also build/config/features.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_linux

  # Indicates if Ozone is enabled. Ozone is a low-level library layer for Linux
  # that does not require X11.
  use_ozone = false

  # Support ChromeOS touchpad gestures with ozone.
  use_evdev_gestures = false

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

  # True means the UI is built using the "views" framework.
  toolkit_views = is_mac || is_chromeos || use_aura
}

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

# TODO(vtl): Probably should get rid of these variables.
use_cairo = false
use_pango = false

# 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

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

use_ozone_evdev = use_ozone

use_clipboard_aurax11 = is_linux && use_aura && use_x11

enable_hidpi = is_mac || is_chromeos || is_linux
