chromium/components/exo/wayland/output_configuration_change.h

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_EXO_WAYLAND_OUTPUT_CONFIGURATION_CHANGE_H_
#define COMPONENTS_EXO_WAYLAND_OUTPUT_CONFIGURATION_CHANGE_H_

#include <vector>

#include "base/memory/raw_ptr.h"

namespace exo::wayland {

class WaylandDisplayOutput;

using WaylandOutputList = std::vector<raw_ptr<const WaylandDisplayOutput>>;

// Pairs the changed output with a bitvector of DisplayMetric changes.
using WaylandOutputChangedList =
    std::vector<std::pair<raw_ptr<const WaylandDisplayOutput>, uint32_t>>;

// Encapsulates an atomic change to the output configuration tracked by Exo.
struct OutputConfigurationChange {
  OutputConfigurationChange();
  OutputConfigurationChange(OutputConfigurationChange&& other);
  OutputConfigurationChange& operator=(OutputConfigurationChange&& other);
  OutputConfigurationChange(const OutputConfigurationChange&) = delete;
  OutputConfigurationChange& operator=(const OutputConfigurationChange&) =
      delete;
  ~OutputConfigurationChange();

  // New outputs for user-visible displays added to the system.
  WaylandOutputList added_outputs;

  // Outputs for displays removed from the system's configuration.
  WaylandOutputList removed_outputs;

  // Existing outputs updated to reflect updated display metrics.
  WaylandOutputChangedList changed_outputs;
};

}  // namespace exo::wayland

#endif  // COMPONENTS_EXO_WAYLAND_OUTPUT_CONFIGURATION_CHANGE_H_