#ifndef UI_DISPLAY_DISPLAY_OBSERVER_H_
#define UI_DISPLAY_DISPLAY_OBSERVER_H_
#include <stdint.h>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/observer_list_types.h"
#include "build/buildflag.h"
#include "ui/display/display_export.h"
namespace display {
class Display;
enum class TabletState;
using Displays = std::vector<Display>;
class DISPLAY_EXPORT DisplayObserver : public base::CheckedObserver {
public:
enum DisplayMetric {
DISPLAY_METRIC_NONE = 0,
DISPLAY_METRIC_BOUNDS = 1 << 0,
DISPLAY_METRIC_WORK_AREA = 1 << 1,
DISPLAY_METRIC_DEVICE_SCALE_FACTOR = 1 << 2,
DISPLAY_METRIC_ROTATION = 1 << 3,
DISPLAY_METRIC_PRIMARY = 1 << 4,
DISPLAY_METRIC_MIRROR_STATE = 1 << 5,
DISPLAY_METRIC_COLOR_SPACE = 1 << 6,
DISPLAY_METRIC_REFRESH_RATE = 1 << 7,
DISPLAY_METRIC_INTERLACED = 1 << 8,
DISPLAY_METRIC_LABEL = 1 << 9,
DISPLAY_METRIC_VRR = 1 << 10,
DISPLAY_METRIC_DETECTED = 1 << 11,
};
virtual void OnDisplayAdded(const Display& new_display) {}
virtual void OnWillRemoveDisplays(const Displays& removed_displays) {}
virtual void OnDisplaysRemoved(const Displays& removed_displays) {}
virtual void OnDisplayMetricsChanged(const Display& display,
uint32_t changed_metrics) {}
virtual void OnCurrentWorkspaceChanged(const std::string& new_workspace) {}
virtual void OnDisplayTabletStateChanged(TabletState state) {}
#if BUILDFLAG(IS_MAC)
virtual void OnPrimaryDisplayChanged() {}
#endif
protected:
~DisplayObserver() override;
};
class DISPLAY_EXPORT ScopedOptionalDisplayObserver {
public:
explicit ScopedOptionalDisplayObserver(DisplayObserver* observer);
~ScopedOptionalDisplayObserver();
private:
raw_ptr<DisplayObserver> observer_ = nullptr;
};
class DISPLAY_EXPORT ScopedDisplayObserver
: public ScopedOptionalDisplayObserver {
public:
explicit ScopedDisplayObserver(DisplayObserver* observer);
};
}
#endif