/* Generated by wayland-scanner 1.26.0 */

#ifndef KDE_OUTPUT_MANAGEMENT_V2_SERVER_PROTOCOL_H
#define KDE_OUTPUT_MANAGEMENT_V2_SERVER_PROTOCOL_H

#include <stdint.h>
#include <stddef.h>
#include "wayland-server.h"

#ifdef  __cplusplus
extern "C" {
#endif

struct wl_client;
struct wl_resource;

/**
 * @page page_kde_output_management_v2 The kde_output_management_v2 protocol
 * @section page_ifaces_kde_output_management_v2 Interfaces
 * - @subpage page_iface_kde_output_management_v2 - configuration of server outputs through clients
 * - @subpage page_iface_kde_output_configuration_v2 - configure single output devices
 * - @subpage page_iface_kde_mode_list_v2 - a list of custom modes
 * @section page_copyright_kde_output_management_v2 Copyright
 * <pre>
 *
 * SPDX-FileCopyrightText: 2008-2011 Kristian Høgsberg
 * SPDX-FileCopyrightText: 2010-2011 Intel Corporation
 * SPDX-FileCopyrightText: 2012-2013 Collabora, Ltd.
 * SPDX-FileCopyrightText: 2015 Sebastian Kügler <sebas@kde.org>
 * SPDX-FileCopyrightText: 2021 Méven Car <meven.car@enioka.com>
 * SPDX-FileCopyrightText: 2023 Xaver Hugl <xaver.hugl@kde.org>
 *
 * SPDX-License-Identifier: MIT-CMU
 * </pre>
 */
struct kde_mode_list_v2;
struct kde_output_configuration_v2;
struct kde_output_device_mode_v2;
struct kde_output_device_v2;
struct kde_output_management_v2;

#ifndef KDE_OUTPUT_MANAGEMENT_V2_INTERFACE
#define KDE_OUTPUT_MANAGEMENT_V2_INTERFACE
/**
 * @page page_iface_kde_output_management_v2 kde_output_management_v2
 * @section page_iface_kde_output_management_v2_desc Description
 *
 * This interface enables clients to set properties of output devices for screen
 * configuration purposes via the server. To this end output devices are referenced
 * by global kde_output_device_v2 objects.
 *
 * outputmanagement (wl_global)
 * --------------------------
 * request:
 * * create_configuration -> outputconfiguration (wl_resource)
 *
 * outputconfiguration (wl_resource)
 * --------------------------
 * requests:
 * * enable(outputdevice, bool)
 * * mode(outputdevice, mode)
 * * transformation(outputdevice, flag)
 * * position(outputdevice, x, y)
 * * apply
 *
 * events:
 * * applied
 * * failed
 *
 * The server registers one outputmanagement object as a global object. In order
 * to configure outputs a client requests create_configuration, which provides a
 * resource referencing an outputconfiguration for one-time configuration. That
 * way the server knows which requests belong together and can group them by that.
 *
 * On the outputconfiguration object the client calls for each output whether the
 * output should be enabled, which mode should be set (by referencing the mode from
 * the list of announced modes) and the output's global position. Once all outputs
 * are configured that way, the client calls apply.
 * At that point and not earlier the server should try to apply the configuration.
 * If this succeeds the server emits the applied signal, otherwise the failed
 * signal, such that the configuring client is noticed about the success of its
 * configuration request.
 *
 * Through this design the interface enables atomic output configuration changes if
 * internally supported by the server.
 *
 * Warning! The protocol described in this file is a desktop environment implementation
 * detail. Regular clients must not use this protocol. Backward incompatible
 * changes may be added without bumping the major version of the extension.
 * @section page_iface_kde_output_management_v2_api API
 * See @ref iface_kde_output_management_v2.
 */
/**
 * @defgroup iface_kde_output_management_v2 The kde_output_management_v2 interface
 *
 * This interface enables clients to set properties of output devices for screen
 * configuration purposes via the server. To this end output devices are referenced
 * by global kde_output_device_v2 objects.
 *
 * outputmanagement (wl_global)
 * --------------------------
 * request:
 * * create_configuration -> outputconfiguration (wl_resource)
 *
 * outputconfiguration (wl_resource)
 * --------------------------
 * requests:
 * * enable(outputdevice, bool)
 * * mode(outputdevice, mode)
 * * transformation(outputdevice, flag)
 * * position(outputdevice, x, y)
 * * apply
 *
 * events:
 * * applied
 * * failed
 *
 * The server registers one outputmanagement object as a global object. In order
 * to configure outputs a client requests create_configuration, which provides a
 * resource referencing an outputconfiguration for one-time configuration. That
 * way the server knows which requests belong together and can group them by that.
 *
 * On the outputconfiguration object the client calls for each output whether the
 * output should be enabled, which mode should be set (by referencing the mode from
 * the list of announced modes) and the output's global position. Once all outputs
 * are configured that way, the client calls apply.
 * At that point and not earlier the server should try to apply the configuration.
 * If this succeeds the server emits the applied signal, otherwise the failed
 * signal, such that the configuring client is noticed about the success of its
 * configuration request.
 *
 * Through this design the interface enables atomic output configuration changes if
 * internally supported by the server.
 *
 * Warning! The protocol described in this file is a desktop environment implementation
 * detail. Regular clients must not use this protocol. Backward incompatible
 * changes may be added without bumping the major version of the extension.
 */
extern const struct wl_interface kde_output_management_v2_interface;
#endif
#ifndef KDE_OUTPUT_CONFIGURATION_V2_INTERFACE
#define KDE_OUTPUT_CONFIGURATION_V2_INTERFACE
/**
 * @page page_iface_kde_output_configuration_v2 kde_output_configuration_v2
 * @section page_iface_kde_output_configuration_v2_desc Description
 *
 * outputconfiguration is a client-specific resource that can be used to ask
 * the server to apply changes to available output devices.
 *
 * The client receives a list of output devices from the registry. When it wants
 * to apply new settings, it creates a configuration object from the
 * outputmanagement global, writes changes through this object's enable, scale,
 * transform and mode calls. It then asks the server to apply these settings in
 * an atomic fashion, for example through Linux' DRM interface.
 *
 * The server signals back whether the new settings have applied successfully
 * or failed to apply. outputdevice objects are updated after the changes have been
 * applied to the hardware and before the server side sends the applied event.
 * @section page_iface_kde_output_configuration_v2_api API
 * See @ref iface_kde_output_configuration_v2.
 */
/**
 * @defgroup iface_kde_output_configuration_v2 The kde_output_configuration_v2 interface
 *
 * outputconfiguration is a client-specific resource that can be used to ask
 * the server to apply changes to available output devices.
 *
 * The client receives a list of output devices from the registry. When it wants
 * to apply new settings, it creates a configuration object from the
 * outputmanagement global, writes changes through this object's enable, scale,
 * transform and mode calls. It then asks the server to apply these settings in
 * an atomic fashion, for example through Linux' DRM interface.
 *
 * The server signals back whether the new settings have applied successfully
 * or failed to apply. outputdevice objects are updated after the changes have been
 * applied to the hardware and before the server side sends the applied event.
 */
extern const struct wl_interface kde_output_configuration_v2_interface;
#endif
#ifndef KDE_MODE_LIST_V2_INTERFACE
#define KDE_MODE_LIST_V2_INTERFACE
/**
 * @page page_iface_kde_mode_list_v2 kde_mode_list_v2
 * @section page_iface_kde_mode_list_v2_desc Description
 *
 * This list is populated by first setting each relevant property,
 * and then calling add_mode to add a mode with these properties.
 * One would for example call
 * - set_resolution
 * - set_refresh_rate
 * - set_reduced_blanking
 * - add_mode
 *
 * add_mode does not reset the properties that were previously set,
 * they are valid until the object is destroyed.
 * The compositor may additionally have sensible defaults for some
 * properties like reduced_blanking, but for consistent results,
 * it's best to always set each known property every time.
 *
 * The parameters resolution and refresh rate are required, if they
 * are not set, the missing_parameters error will be emitted.
 * @section page_iface_kde_mode_list_v2_api API
 * See @ref iface_kde_mode_list_v2.
 */
/**
 * @defgroup iface_kde_mode_list_v2 The kde_mode_list_v2 interface
 *
 * This list is populated by first setting each relevant property,
 * and then calling add_mode to add a mode with these properties.
 * One would for example call
 * - set_resolution
 * - set_refresh_rate
 * - set_reduced_blanking
 * - add_mode
 *
 * add_mode does not reset the properties that were previously set,
 * they are valid until the object is destroyed.
 * The compositor may additionally have sensible defaults for some
 * properties like reduced_blanking, but for consistent results,
 * it's best to always set each known property every time.
 *
 * The parameters resolution and refresh rate are required, if they
 * are not set, the missing_parameters error will be emitted.
 */
extern const struct wl_interface kde_mode_list_v2_interface;
#endif

/**
 * @ingroup iface_kde_output_management_v2
 * @struct kde_output_management_v2_interface
 */
struct kde_output_management_v2_interface {
	/**
	 * provide outputconfiguration object for configuring outputs
	 *
	 * Request an outputconfiguration object through which the client
	 * can configure output devices.
	 */
	void (*create_configuration)(struct wl_client *client,
				     struct wl_resource *resource,
				     uint32_t id);
	/**
	 * create a list of custom modes
	 *
	 * For details, see the description of kde_mode_list_v2 and
	 * kde_output_configuration_v2.set_custom_modes.
	 */
	void (*create_mode_list)(struct wl_client *client,
				 struct wl_resource *resource,
				 uint32_t id);
};


/**
 * @ingroup iface_kde_output_management_v2
 */
#define KDE_OUTPUT_MANAGEMENT_V2_CREATE_CONFIGURATION_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_management_v2
 */
#define KDE_OUTPUT_MANAGEMENT_V2_CREATE_MODE_LIST_SINCE_VERSION 1

#ifndef KDE_OUTPUT_CONFIGURATION_V2_ERROR_ENUM
#define KDE_OUTPUT_CONFIGURATION_V2_ERROR_ENUM
/**
 * @ingroup iface_kde_output_configuration_v2
 * kde_output_configuration_v2 error values
 *
 * These error can be emitted in response to kde_output_configuration_v2 requests.
 */
enum kde_output_configuration_v2_error {
	/**
	 * the config is already applied
	 */
	KDE_OUTPUT_CONFIGURATION_V2_ERROR_ALREADY_APPLIED = 0,
};
#endif /* KDE_OUTPUT_CONFIGURATION_V2_ERROR_ENUM */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_ERROR_ENUM_IS_VALID
#define KDE_OUTPUT_CONFIGURATION_V2_ERROR_ENUM_IS_VALID
/**
 * @ingroup iface_kde_output_configuration_v2
 * Validate a kde_output_configuration_v2 error value.
 *
 * @return true on success, false on error.
 * @ref kde_output_configuration_v2_error
 */
static inline bool
kde_output_configuration_v2_error_is_valid(uint32_t value, uint32_t version) {
	switch (value) {
	case KDE_OUTPUT_CONFIGURATION_V2_ERROR_ALREADY_APPLIED:
		return version >= 1;
	default:
		return false;
	}
}
#endif /* KDE_OUTPUT_CONFIGURATION_V2_ERROR_ENUM_IS_VALID */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_ENUM
#define KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_ENUM
/**
 * @ingroup iface_kde_output_configuration_v2
 * describes vrr policy
 *
 * Describes when the compositor may employ variable refresh rate
 */
enum kde_output_configuration_v2_vrr_policy {
	KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_NEVER = 0,
	KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_ALWAYS = 1,
	KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_AUTOMATIC = 2,
};
#endif /* KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_ENUM */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_ENUM_IS_VALID
#define KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_ENUM_IS_VALID
/**
 * @ingroup iface_kde_output_configuration_v2
 * Validate a kde_output_configuration_v2 vrr_policy value.
 *
 * @return true on success, false on error.
 * @ref kde_output_configuration_v2_vrr_policy
 */
static inline bool
kde_output_configuration_v2_vrr_policy_is_valid(uint32_t value, uint32_t version) {
	switch (value) {
	case KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_NEVER:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_ALWAYS:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_AUTOMATIC:
		return version >= 1;
	default:
		return false;
	}
}
#endif /* KDE_OUTPUT_CONFIGURATION_V2_VRR_POLICY_ENUM_IS_VALID */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_ENUM
#define KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_ENUM
/**
 * @ingroup iface_kde_output_configuration_v2
 * describes RGB range policy
 *
 * Whether this output should use full or limited rgb.
 */
enum kde_output_configuration_v2_rgb_range {
	KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_AUTOMATIC = 0,
	KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_FULL = 1,
	KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_LIMITED = 2,
};
#endif /* KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_ENUM */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_ENUM_IS_VALID
#define KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_ENUM_IS_VALID
/**
 * @ingroup iface_kde_output_configuration_v2
 * Validate a kde_output_configuration_v2 rgb_range value.
 *
 * @return true on success, false on error.
 * @ref kde_output_configuration_v2_rgb_range
 */
static inline bool
kde_output_configuration_v2_rgb_range_is_valid(uint32_t value, uint32_t version) {
	switch (value) {
	case KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_AUTOMATIC:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_FULL:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_LIMITED:
		return version >= 1;
	default:
		return false;
	}
}
#endif /* KDE_OUTPUT_CONFIGURATION_V2_RGB_RANGE_ENUM_IS_VALID */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_ENUM
#define KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_ENUM
/**
 * @ingroup iface_kde_output_configuration_v2
 * describes when auto rotate should be used
 */
enum kde_output_configuration_v2_auto_rotate_policy {
	KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_NEVER = 0,
	KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_IN_TABLET_MODE = 1,
	KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_ALWAYS = 2,
};
#endif /* KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_ENUM */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_ENUM_IS_VALID
#define KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_ENUM_IS_VALID
/**
 * @ingroup iface_kde_output_configuration_v2
 * Validate a kde_output_configuration_v2 auto_rotate_policy value.
 *
 * @return true on success, false on error.
 * @ref kde_output_configuration_v2_auto_rotate_policy
 */
static inline bool
kde_output_configuration_v2_auto_rotate_policy_is_valid(uint32_t value, uint32_t version) {
	switch (value) {
	case KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_NEVER:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_IN_TABLET_MODE:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_ALWAYS:
		return version >= 1;
	default:
		return false;
	}
}
#endif /* KDE_OUTPUT_CONFIGURATION_V2_AUTO_ROTATE_POLICY_ENUM_IS_VALID */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_ENUM
#define KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_ENUM
/**
 * @ingroup iface_kde_output_configuration_v2
 * which source the compositor should use for the color profile on an output
 */
enum kde_output_configuration_v2_color_profile_source {
	KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_SRGB = 0,
	KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_ICC = 1,
	KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_EDID = 2,
};
#endif /* KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_ENUM */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_ENUM_IS_VALID
#define KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_ENUM_IS_VALID
/**
 * @ingroup iface_kde_output_configuration_v2
 * Validate a kde_output_configuration_v2 color_profile_source value.
 *
 * @return true on success, false on error.
 * @ref kde_output_configuration_v2_color_profile_source
 */
static inline bool
kde_output_configuration_v2_color_profile_source_is_valid(uint32_t value, uint32_t version) {
	switch (value) {
	case KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_SRGB:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_ICC:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_EDID:
		return version >= 1;
	default:
		return false;
	}
}
#endif /* KDE_OUTPUT_CONFIGURATION_V2_COLOR_PROFILE_SOURCE_ENUM_IS_VALID */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_ENUM
#define KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_ENUM
/**
 * @ingroup iface_kde_output_configuration_v2
 * tradeoff between power and accuracy
 *
 * The compositor can do a lot of things that trade between
 * performance, power and color accuracy. This setting describes
 * a high level preference from the user about in which direction
 * that tradeoff should be made.
 */
enum kde_output_configuration_v2_color_power_tradeoff {
	/**
	 * prefer efficiency and performance
	 */
	KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_EFFICIENCY = 0,
	/**
	 * prefer accuracy
	 */
	KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_ACCURACY = 1,
};
#endif /* KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_ENUM */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_ENUM_IS_VALID
#define KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_ENUM_IS_VALID
/**
 * @ingroup iface_kde_output_configuration_v2
 * Validate a kde_output_configuration_v2 color_power_tradeoff value.
 *
 * @return true on success, false on error.
 * @ref kde_output_configuration_v2_color_power_tradeoff
 */
static inline bool
kde_output_configuration_v2_color_power_tradeoff_is_valid(uint32_t value, uint32_t version) {
	switch (value) {
	case KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_EFFICIENCY:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_ACCURACY:
		return version >= 1;
	default:
		return false;
	}
}
#endif /* KDE_OUTPUT_CONFIGURATION_V2_COLOR_POWER_TRADEOFF_ENUM_IS_VALID */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_ENUM
#define KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_ENUM
/**
 * @ingroup iface_kde_output_configuration_v2
 * when the compositor may make use of EDR
 */
enum kde_output_configuration_v2_edr_policy {
	KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_NEVER = 0,
	KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_ALWAYS = 1,
};
#endif /* KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_ENUM */

#ifndef KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_ENUM_IS_VALID
#define KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_ENUM_IS_VALID
/**
 * @ingroup iface_kde_output_configuration_v2
 * Validate a kde_output_configuration_v2 edr_policy value.
 *
 * @return true on success, false on error.
 * @ref kde_output_configuration_v2_edr_policy
 */
static inline bool
kde_output_configuration_v2_edr_policy_is_valid(uint32_t value, uint32_t version) {
	switch (value) {
	case KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_NEVER:
		return version >= 1;
	case KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_ALWAYS:
		return version >= 1;
	default:
		return false;
	}
}
#endif /* KDE_OUTPUT_CONFIGURATION_V2_EDR_POLICY_ENUM_IS_VALID */

/**
 * @ingroup iface_kde_output_configuration_v2
 * @struct kde_output_configuration_v2_interface
 */
struct kde_output_configuration_v2_interface {
	/**
	 * enable or disable an output
	 *
	 * Mark the output as enabled or disabled.
	 * @param outputdevice outputdevice to be en- or disabled
	 * @param enable 1 to enable or 0 to disable this output
	 */
	void (*enable)(struct wl_client *client,
		       struct wl_resource *resource,
		       struct wl_resource *outputdevice,
		       int32_t enable);
	/**
	 * switch output-device to mode
	 *
	 * Sets the mode for a given output.
	 * @param outputdevice outputdevice this mode change applies to
	 * @param mode the mode to apply
	 */
	void (*mode)(struct wl_client *client,
		     struct wl_resource *resource,
		     struct wl_resource *outputdevice,
		     struct wl_resource *mode);
	/**
	 * transform output-device
	 *
	 * Sets the transformation for a given output.
	 * @param outputdevice outputdevice this transformation change applies to
	 * @param transform transform enum
	 */
	void (*transform)(struct wl_client *client,
			  struct wl_resource *resource,
			  struct wl_resource *outputdevice,
			  int32_t transform);
	/**
	 * position output in global space
	 *
	 * Sets the position for this output device. (x,y) describe the
	 * top-left corner of the output in global space, whereby the
	 * origin (0,0) of the global space has to be aligned with the
	 * top-left corner of the most left and in case this does not
	 * define a single one the top output.
	 *
	 * There may be no gaps or overlaps between outputs, i.e. the
	 * outputs are stacked horizontally, vertically, or both on each
	 * other.
	 * @param outputdevice outputdevice this position applies to
	 * @param x position on the x-axis
	 * @param y position on the y-axis
	 */
	void (*position)(struct wl_client *client,
			 struct wl_resource *resource,
			 struct wl_resource *outputdevice,
			 int32_t x,
			 int32_t y);
	/**
	 * set scaling factor of this output
	 *
	 * Sets the scaling factor for this output device.
	 * @param outputdevice outputdevice this scale change applies to
	 * @param scale scaling factor
	 */
	void (*scale)(struct wl_client *client,
		      struct wl_resource *resource,
		      struct wl_resource *outputdevice,
		      wl_fixed_t scale);
	/**
	 * apply configuration changes to all output devices
	 *
	 * Asks the server to apply property changes requested through
	 * this outputconfiguration object to all outputs on the server
	 * side.
	 *
	 * The output configuration can be applied only once. The
	 * already_applied protocol error will be posted if the apply
	 * request is called the second time.
	 */
	void (*apply)(struct wl_client *client,
		      struct wl_resource *resource);
	/**
	 * release the outputconfiguration object
	 *
	 * 
	 */
	void (*destroy)(struct wl_client *client,
			struct wl_resource *resource);
	/**
	 * set overscan value
	 *
	 * Set the overscan value of this output device with a value in
	 * percent.
	 * @param outputdevice outputdevice overscan applies to
	 * @param overscan overscan value
	 */
	void (*overscan)(struct wl_client *client,
			 struct wl_resource *resource,
			 struct wl_resource *outputdevice,
			 uint32_t overscan);
	/**
	 * set the VRR policy
	 *
	 * Set what policy the compositor should employ regarding its use
	 * of variable refresh rate.
	 * @param outputdevice outputdevice this VRR policy applies to
	 * @param policy the vrr policy to apply
	 */
	void (*set_vrr_policy)(struct wl_client *client,
			       struct wl_resource *resource,
			       struct wl_resource *outputdevice,
			       uint32_t policy);
	/**
	 * RGB range
	 *
	 * Whether full or limited color range should be used
	 * @param outputdevice outputdevice the rgb range applies to
	 */
	void (*set_rgb_range)(struct wl_client *client,
			      struct wl_resource *resource,
			      struct wl_resource *outputdevice,
			      uint32_t rgb_range);
	/**
	 * Select which primary output to use
	 *
	 * 
	 * @since 2
	 */
	void (*set_primary_output)(struct wl_client *client,
				   struct wl_resource *resource,
				   struct wl_resource *output);
	/**
	 * Set the order of outputs
	 *
	 * Set the position of the output in the output order list, with
	 * lower values being earlier in the list. There's no specific
	 * value the list has to start at, this value is only used in
	 * sorting outputs.
	 *
	 * The order of outputs can be used to assign desktop environment
	 * components to a specific screen, see kde_output_order_v1 and
	 * kde-output-device-v2 for details. Note that for consistent
	 * behavior, the priority value needs to be unique among all
	 * enabled outputs.
	 * @param outputdevice outputdevice the index applies to
	 * @param priority the priority of the output
	 * @since 3
	 */
	void (*set_priority)(struct wl_client *client,
			     struct wl_resource *resource,
			     struct wl_resource *outputdevice,
			     uint32_t priority);
	/**
	 * change if HDR should be enabled
	 *
	 * Sets whether or not the output should be set to HDR mode.
	 * @param outputdevice outputdevice this setting applies to
	 * @param enable_hdr 1 to enable, 0 to disable hdr
	 * @since 4
	 */
	void (*set_high_dynamic_range)(struct wl_client *client,
				       struct wl_resource *resource,
				       struct wl_resource *outputdevice,
				       uint32_t enable_hdr);
	/**
	 * set the brightness for sdr content
	 *
	 * Sets the brightness of standard dynamic range content in nits.
	 * Only has an effect while the output is in HDR mode. Note that
	 * while the value is in nits, that doesn't necessarily translate
	 * to the same brightness on the screen.
	 * @param outputdevice outputdevice this setting applies to
	 * @since 4
	 */
	void (*set_sdr_brightness)(struct wl_client *client,
				   struct wl_resource *resource,
				   struct wl_resource *outputdevice,
				   uint32_t sdr_brightness);
	/**
	 * change if a wide color gamut should be used
	 *
	 * Whether or not the output should use a wide color gamut
	 * @param outputdevice outputdevice this setting applies to
	 * @param enable_wcg 1 to enable, 0 to disable wcg
	 * @since 4
	 */
	void (*set_wide_color_gamut)(struct wl_client *client,
				     struct wl_resource *resource,
				     struct wl_resource *outputdevice,
				     uint32_t enable_wcg);
	/**
	 * change when auto rotate should be used
	 *
	 * 
	 * @param outputdevice outputdevice this setting applies to
	 * @since 5
	 */
	void (*set_auto_rotate_policy)(struct wl_client *client,
				       struct wl_resource *resource,
				       struct wl_resource *outputdevice,
				       uint32_t policy);
	/**
	 * change the used icc profile for SDR mode
	 *
	 * 
	 * @param outputdevice outputdevice this setting applies to
	 * @since 6
	 */
	void (*set_icc_profile_path)(struct wl_client *client,
				     struct wl_resource *resource,
				     struct wl_resource *outputdevice,
				     const char *profile_path);
	/**
	 * override metadata about the screen's brightness limits
	 *
	 * 
	 * @param outputdevice outputdevice this setting applies to
	 * @param max_peak_brightness -1 for not overriding, or positive values in nits
	 * @param max_frame_average_brightness -1 for not overriding, or positive values in nits
	 * @param min_brightness -1 for not overriding, or positive values in 0.0001 nits
	 * @since 7
	 */
	void (*set_brightness_overrides)(struct wl_client *client,
					 struct wl_resource *resource,
					 struct wl_resource *outputdevice,
					 int32_t max_peak_brightness,
					 int32_t max_frame_average_brightness,
					 int32_t min_brightness);
	/**
	 * describes which gamut is assumed for sRGB applications
	 *
	 * This can be used to provide the colors users assume sRGB
	 * applications should have based on the default experience on many
	 * modern sRGB screens.
	 * @param outputdevice outputdevice this setting applies to
	 * @param gamut_wideness 0 means rec.709 primaries, 10000 means native primaries
	 * @since 7
	 */
	void (*set_sdr_gamut_wideness)(struct wl_client *client,
				       struct wl_resource *resource,
				       struct wl_resource *outputdevice,
				       uint32_t gamut_wideness);
	/**
	 * which source the compositor should use for the color profile on an output in SDR mode
	 *
	 * 
	 * @param outputdevice outputdevice this setting applies to
	 * @param color_profile_source the color profile source
	 * @since 8
	 */
	void (*set_color_profile_source)(struct wl_client *client,
					 struct wl_resource *resource,
					 struct wl_resource *outputdevice,
					 uint32_t color_profile_source);
	/**
	 * brightness multiplier
	 *
	 * Set the brightness modifier of the output. It doesn't specify
	 * any absolute values, but is merely a multiplier on top of other
	 * brightness values, like sdr_brightness and brightness_metadata.
	 * 0 is the minimum brightness (not completely dark) and 10000 is
	 * the maximum brightness. This is supported while HDR is active in
	 * versions 8 and below, or when the device supports the
	 * "brightness" capability in versions 9 and above.
	 * @param outputdevice outputdevice this setting applies to
	 * @param brightness brightness in 0-10000
	 * @since 9
	 */
	void (*set_brightness)(struct wl_client *client,
			       struct wl_resource *resource,
			       struct wl_resource *outputdevice,
			       uint32_t brightness);
	/**
	 * set the preferred color/power tradeoff
	 *
	 * 
	 * @param outputdevice outputdevice this setting applies to
	 * @since 10
	 */
	void (*set_color_power_tradeoff)(struct wl_client *client,
					 struct wl_resource *resource,
					 struct wl_resource *outputdevice,
					 uint32_t preference);
	/**
	 * dimming multiplier
	 *
	 * Set the dimming multiplier of the output. This is similar to
	 * the brightness setting, except it's meant to be a temporary
	 * setting only, not persistent and may be implemented differently
	 * depending on the display. 0 is the minimum dimming factor (not
	 * completely dark) and 10000 means the output is not dimmed.
	 *
	 * This is supported only when the "brightness" capability is also
	 * supported.
	 * @param outputdevice outputdevice this setting applies to
	 * @param multiplier multiplier in 0-10000
	 * @since 11
	 */
	void (*set_dimming)(struct wl_client *client,
			    struct wl_resource *resource,
			    struct wl_resource *outputdevice,
			    uint32_t multiplier);
	/**
	 * source output for mirroring
	 *
	 * Set the source output that the outputdevice should mirror its
	 * viewport from.
	 * @param outputdevice outputdevice this setting applies to
	 * @param source uuid of the source output
	 * @since 13
	 */
	void (*set_replication_source)(struct wl_client *client,
				       struct wl_resource *resource,
				       struct wl_resource *outputdevice,
				       const char *source);
	/**
	 * if DDC/CI should be used to control brightness etc.
	 *
	 * 
	 * @param outputdevice outputdevice this setting applies to
	 * @param allowed 1 if allowed, 0 if disabled
	 * @since 14
	 */
	void (*set_ddc_ci_allowed)(struct wl_client *client,
				   struct wl_resource *resource,
				   struct wl_resource *outputdevice,
				   uint32_t allowed);
	/**
	 * override the max bpc
	 *
	 * This limits the amount of bits per color that are sent to the
	 * display.
	 * @param outputdevice outputdevice this setting applies to
	 * @param max_bpc 0 for the default / automatic
	 * @since 15
	 */
	void (*set_max_bits_per_color)(struct wl_client *client,
				       struct wl_resource *resource,
				       struct wl_resource *outputdevice,
				       uint32_t max_bpc);
	/**
	 * set when the compositor may apply EDR
	 *
	 * When EDR is enabled, the compositor may increase the backlight
	 * beyond the user-specified setting, in order to present HDR
	 * content on displays without native HDR support. This will
	 * usually result in better visuals, but also increases battery
	 * usage.
	 * @param outputdevice outputdevice this setting applies to
	 * @since 16
	 */
	void (*set_edr_policy)(struct wl_client *client,
			       struct wl_resource *resource,
			       struct wl_resource *outputdevice,
			       uint32_t policy);
	/**
	 * sharpness strength
	 *
	 * This is the sharpness modifier of the output. 0 is sharpness
	 * disabled and 10000 is the maximum sharpness
	 * @param outputdevice outputdevice this setting applies to
	 * @param sharpness sharpness in 0-10000
	 * @since 17
	 */
	void (*set_sharpness)(struct wl_client *client,
			      struct wl_resource *resource,
			      struct wl_resource *outputdevice,
			      uint32_t sharpness);
	/**
	 * set the custom mode list
	 *
	 * Set the list of custom modes for this output. The compositor
	 * will in response generate the requested modes and add them to
	 * the output (or delete ones no longer in the list). This can be
	 * useful for overclocking displays, or for working around broken
	 * EDIDs. Note that there is no guarantee for any custom mode to
	 * actually work, or even to leave the display undamaged (in the
	 * case of CRTs). It's entirely the responsibility of the user to
	 * ensure each added mode is the right one for their display.
	 * @param outputdevice outputdevice this setting applies to
	 * @since 18
	 */
	void (*set_custom_modes)(struct wl_client *client,
				 struct wl_resource *resource,
				 struct wl_resource *outputdevice,
				 struct wl_resource *modes);
	/**
	 * whether or not automatic brightness is enabled
	 *
	 * 
	 * @param outputdevice outputdevice this setting applies to
	 * @param enabled 1 for enabled, 0 for disabled
	 * @since 19
	 */
	void (*set_auto_brightness)(struct wl_client *client,
				    struct wl_resource *resource,
				    struct wl_resource *outputdevice,
				    uint32_t enabled);
	/**
	 * change the used icc profile for HDR mode
	 *
	 * 
	 * @param outputdevice outputdevice this setting applies to
	 * @since 20
	 */
	void (*set_hdr_icc_profile_path)(struct wl_client *client,
					 struct wl_resource *resource,
					 struct wl_resource *outputdevice,
					 const char *profile_path);
	/**
	 * which source the compositor should use for the color profile on an output in HDR mode
	 *
	 * 
	 * @param outputdevice outputdevice this setting applies to
	 * @param color_profile_source the color profile source
	 * @since 20
	 */
	void (*set_hdr_color_profile_source)(struct wl_client *client,
					     struct wl_resource *resource,
					     struct wl_resource *outputdevice,
					     uint32_t color_profile_source);
	/**
	 * set the allowed level of adaptive backlight modulation
	 *
	 * Adaptive backlight modulation is a feature that reduces the
	 * backlight and increases contrast of colors on the screen to
	 * improve power usage.
	 * @param outputdevice outputdevice this setting applies to
	 * @param level 0 is off, 4 is the maximum level
	 * @since 21
	 */
	void (*set_abm_level)(struct wl_client *client,
			      struct wl_resource *resource,
			      struct wl_resource *outputdevice,
			      uint32_t level);
};

#define KDE_OUTPUT_CONFIGURATION_V2_APPLIED 0
#define KDE_OUTPUT_CONFIGURATION_V2_FAILED 1
#define KDE_OUTPUT_CONFIGURATION_V2_FAILURE_REASON 2

/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_APPLIED_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_FAILED_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_FAILURE_REASON_SINCE_VERSION 12

/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_ENABLE_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_MODE_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_TRANSFORM_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_POSITION_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SCALE_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_APPLY_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_DESTROY_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_OVERSCAN_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_VRR_POLICY_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_RGB_RANGE_SINCE_VERSION 1
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_PRIMARY_OUTPUT_SINCE_VERSION 2
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_PRIORITY_SINCE_VERSION 3
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_HIGH_DYNAMIC_RANGE_SINCE_VERSION 4
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_SDR_BRIGHTNESS_SINCE_VERSION 4
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_WIDE_COLOR_GAMUT_SINCE_VERSION 4
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_AUTO_ROTATE_POLICY_SINCE_VERSION 5
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_ICC_PROFILE_PATH_SINCE_VERSION 6
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_BRIGHTNESS_OVERRIDES_SINCE_VERSION 7
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_SDR_GAMUT_WIDENESS_SINCE_VERSION 7
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_COLOR_PROFILE_SOURCE_SINCE_VERSION 8
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_BRIGHTNESS_SINCE_VERSION 9
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_COLOR_POWER_TRADEOFF_SINCE_VERSION 10
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_DIMMING_SINCE_VERSION 11
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_REPLICATION_SOURCE_SINCE_VERSION 13
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_DDC_CI_ALLOWED_SINCE_VERSION 14
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_MAX_BITS_PER_COLOR_SINCE_VERSION 15
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_EDR_POLICY_SINCE_VERSION 16
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_SHARPNESS_SINCE_VERSION 17
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_CUSTOM_MODES_SINCE_VERSION 18
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_AUTO_BRIGHTNESS_SINCE_VERSION 19
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_HDR_ICC_PROFILE_PATH_SINCE_VERSION 20
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_HDR_COLOR_PROFILE_SOURCE_SINCE_VERSION 20
/**
 * @ingroup iface_kde_output_configuration_v2
 */
#define KDE_OUTPUT_CONFIGURATION_V2_SET_ABM_LEVEL_SINCE_VERSION 21

/**
 * @ingroup iface_kde_output_configuration_v2
 * Sends an applied event to the client owning the resource.
 * @param resource_ The client's resource
 */
static inline void
kde_output_configuration_v2_send_applied(struct wl_resource *resource_)
{
	wl_resource_post_event(resource_, KDE_OUTPUT_CONFIGURATION_V2_APPLIED);
}

/**
 * @ingroup iface_kde_output_configuration_v2
 * Sends an failed event to the client owning the resource.
 * @param resource_ The client's resource
 */
static inline void
kde_output_configuration_v2_send_failed(struct wl_resource *resource_)
{
	wl_resource_post_event(resource_, KDE_OUTPUT_CONFIGURATION_V2_FAILED);
}

/**
 * @ingroup iface_kde_output_configuration_v2
 * Sends an failure_reason event to the client owning the resource.
 * @param resource_ The client's resource
 * @param reason reason for failure
 */
static inline void
kde_output_configuration_v2_send_failure_reason(struct wl_resource *resource_, const char *reason)
{
	wl_resource_post_event(resource_, KDE_OUTPUT_CONFIGURATION_V2_FAILURE_REASON, reason);
}

#ifndef KDE_MODE_LIST_V2_ERROR_ENUM
#define KDE_MODE_LIST_V2_ERROR_ENUM
/**
 * @ingroup iface_kde_mode_list_v2
 * kde_mode_list_v2 error values
 *
 * These errors can be emitted in response to add_mode requests.
 */
enum kde_mode_list_v2_error {
	/**
	 * a required parameter wasn't set
	 */
	KDE_MODE_LIST_V2_ERROR_MISSING_PARAMETERS = 0,
};
#endif /* KDE_MODE_LIST_V2_ERROR_ENUM */

#ifndef KDE_MODE_LIST_V2_ERROR_ENUM_IS_VALID
#define KDE_MODE_LIST_V2_ERROR_ENUM_IS_VALID
/**
 * @ingroup iface_kde_mode_list_v2
 * Validate a kde_mode_list_v2 error value.
 *
 * @return true on success, false on error.
 * @ref kde_mode_list_v2_error
 */
static inline bool
kde_mode_list_v2_error_is_valid(uint32_t value, uint32_t version) {
	switch (value) {
	case KDE_MODE_LIST_V2_ERROR_MISSING_PARAMETERS:
		return version >= 1;
	default:
		return false;
	}
}
#endif /* KDE_MODE_LIST_V2_ERROR_ENUM_IS_VALID */

/**
 * @ingroup iface_kde_mode_list_v2
 * @struct kde_mode_list_v2_interface
 */
struct kde_mode_list_v2_interface {
	/**
	 * destroy the mode list object
	 *
	 * 
	 */
	void (*destroy)(struct wl_client *client,
			struct wl_resource *resource);
	/**
	 * Add the current mode configuration to the list
	 *
	 * 
	 */
	void (*add_mode)(struct wl_client *client,
			 struct wl_resource *resource);
	/**
	 */
	void (*set_resolution)(struct wl_client *client,
			       struct wl_resource *resource,
			       uint32_t width,
			       uint32_t height);
	/**
	 * @param rate in milliHz
	 */
	void (*set_refresh_rate)(struct wl_client *client,
				 struct wl_resource *resource,
				 uint32_t rate);
	/**
	 * whether or not the mode should have reduced blanking
	 *
	 * Reduced blanking is an optimization that can reduce bandwidth
	 * / timing requirements for a display mode by reducing the time
	 * vblank takes. As not all displays support it, it may be desired
	 * to still turn it off though (like with CRTs, where full blanking
	 * is required).
	 * @param reduced 1 for reduced blanking, 0 for normal vblank duration
	 */
	void (*set_reduced_blanking)(struct wl_client *client,
				     struct wl_resource *resource,
				     uint32_t reduced);
};


/**
 * @ingroup iface_kde_mode_list_v2
 */
#define KDE_MODE_LIST_V2_DESTROY_SINCE_VERSION 1
/**
 * @ingroup iface_kde_mode_list_v2
 */
#define KDE_MODE_LIST_V2_ADD_MODE_SINCE_VERSION 1
/**
 * @ingroup iface_kde_mode_list_v2
 */
#define KDE_MODE_LIST_V2_SET_RESOLUTION_SINCE_VERSION 1
/**
 * @ingroup iface_kde_mode_list_v2
 */
#define KDE_MODE_LIST_V2_SET_REFRESH_RATE_SINCE_VERSION 1
/**
 * @ingroup iface_kde_mode_list_v2
 */
#define KDE_MODE_LIST_V2_SET_REDUCED_BLANKING_SINCE_VERSION 1

#ifdef  __cplusplus
}
#endif

#endif
