text: // Copyright 2018 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.
  
  #ifndef UI_PLATFORM_WINDOW_PLATFORM_WINDOW_INIT_PROPERTIES_H_
  #define UI_PLATFORM_WINDOW_PLATFORM_WINDOW_INIT_PROPERTIES_H_
  
  #include <string>
  
  #include "base/component_export.h"
  #include "base/optional.h"
  #include "build/build_config.h"
  #include "ui/gfx/geometry/rect.h"
  #include "ui/gfx/native_widget_types.h"
  
  #if defined(OS_FUCHSIA)
  #include <fuchsia/ui/views/cpp/fidl.h>
  #include <lib/ui/scenic/cpp/view_ref_pair.h>
  #endif
  
  namespace gfx {
  class ImageSkia;
  }
  
  namespace ui {
  
  enum class PlatformWindowType {
    kWindow,
    kPopup,
    kMenu,
    kTooltip,
    kDrag,
    kBubble,
  };
  
  enum class PlatformWindowOpacity {
    kInferOpacity,
    kOpaqueWindow,
    kTranslucentWindow,
  };
  
  enum class PlatformWindowShadowType {
    kDefault,
    kNone,
    kDrop,
  };
  
  class WorkspaceExtensionDelegate;
  
  #if defined(OS_LINUX) || defined(OS_CHROMEOS)
  class X11ExtensionDelegate;
  #endif
  
  // Initial properties which are passed to PlatformWindow to be initialized
  // with a desired set of properties.
  struct COMPONENT_EXPORT(PLATFORM_WINDOW) PlatformWindowInitProperties {
    PlatformWindowInitProperties();
  
    // Initializes properties with the specified |bounds|.
    explicit PlatformWindowInitProperties(
        const gfx::Rect& bounds,
        bool enable_compositing_based_throttling = false);
  
    PlatformWindowInitProperties(PlatformWindowInitProperties&& props);
  
    ~PlatformWindowInitProperties();
  
    // Tells desired PlatformWindow type. It can be popup, menu or anything else.
    PlatformWindowType type = PlatformWindowType::kWindow;
    // Sets the desired initial bounds. Can be empty.
    gfx::Rect bounds;
    // Tells PlatformWindow which native widget its parent holds. It is usually
    // used to find a parent from internal list of PlatformWindows.
    gfx::AcceleratedWidget parent_widget = gfx::kNullAcceleratedWidget;
    // Tells the opacity type of a window. Check the comment in the
    // Widget::InitProperties::WindowOpacity.
    PlatformWindowOpacity opacity = PlatformWindowOpacity::kOpaqueWindow;
  
  #if defined(OS_FUCHSIA)
    fuchsia::ui::views::ViewToken view_token;
    scenic::ViewRefPair view_ref_pair;
    static bool allow_null_view_token_for_test;
  #endif
  
    bool activatable = true;
    bool force_show_in_taskbar;
    bool keep_on_top = false;
    bool visible_on_all_workspaces = false;
    bool remove_standard_frame = false;
    std::string workspace;
  
    WorkspaceExtensionDelegate* workspace_extension_delegate = nullptr;
  
    PlatformWindowShadowType shadow_type = PlatformWindowShadowType::kDefault;
  
  #if defined(OS_LINUX) || defined(OS_CHROMEOS)
    bool prefer_dark_theme = false;
    gfx::ImageSkia* icon = nullptr;
    base::Optional<int> background_color;
  
    // Specifies the res_name and res_class fields,
    // respectively, of the WM_CLASS window property. Controls window grouping
    // and desktop file matching in Linux window managers.
    std::string wm_role_name;
    std::string wm_class_name;
    std::string wm_class_class;
  
    X11ExtensionDelegate* x11_extension_delegate = nullptr;
  #endif
  
    bool enable_compositing_based_throttling = false;
  };
  
  }  // namespace ui
  
  #endif  // UI_PLATFORM_WINDOW_PLATFORM_WINDOW_INIT_PROPERTIES_H_
  