mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-06-13 14:32:57 -04:00
output-power-management-v1: add brightness
References: https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/merge_requests/145
This commit is contained in:
parent
4f32a0b76f
commit
eac7b712f3
3 changed files with 70 additions and 3 deletions
|
|
@ -10,6 +10,7 @@ struct wlr_output_power_manager_v1 {
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
struct wl_signal set_mode; // struct wlr_output_power_v1_set_mode_event
|
struct wl_signal set_mode; // struct wlr_output_power_v1_set_mode_event
|
||||||
|
struct wl_signal set_brightness; // struct wlr_output_power_v1_set_brightness_event
|
||||||
struct wl_signal destroy;
|
struct wl_signal destroy;
|
||||||
} events;
|
} events;
|
||||||
|
|
||||||
|
|
@ -39,6 +40,11 @@ struct wlr_output_power_v1_set_mode_event {
|
||||||
enum zwlr_output_power_v1_mode mode;
|
enum zwlr_output_power_v1_mode mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct wlr_output_power_v1_set_brightness_event {
|
||||||
|
struct wlr_output *output;
|
||||||
|
float value;
|
||||||
|
};
|
||||||
|
|
||||||
struct wlr_output_power_manager_v1 *wlr_output_power_manager_v1_create(
|
struct wlr_output_power_manager_v1 *wlr_output_power_manager_v1_create(
|
||||||
struct wl_display *display);
|
struct wl_display *display);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@
|
||||||
interface version number is reset.
|
interface version number is reset.
|
||||||
</description>
|
</description>
|
||||||
|
|
||||||
<interface name="zwlr_output_power_manager_v1" version="1">
|
<interface name="zwlr_output_power_manager_v1" version="2">
|
||||||
<description summary="manager to create per-output power management">
|
<description summary="manager to create per-output power management">
|
||||||
This interface is a manager that allows creating per-output power
|
This interface is a manager that allows creating per-output power
|
||||||
management mode controls.
|
management mode controls.
|
||||||
|
|
@ -65,7 +65,7 @@
|
||||||
</request>
|
</request>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
<interface name="zwlr_output_power_v1" version="1">
|
<interface name="zwlr_output_power_v1" version="2">
|
||||||
<description summary="adjust power management mode for an output">
|
<description summary="adjust power management mode for an output">
|
||||||
This object offers requests to set the power management mode of
|
This object offers requests to set the power management mode of
|
||||||
an output.
|
an output.
|
||||||
|
|
@ -124,5 +124,31 @@
|
||||||
Destroys the output power management mode control object.
|
Destroys the output power management mode control object.
|
||||||
</description>
|
</description>
|
||||||
</request>
|
</request>
|
||||||
|
|
||||||
|
<!-- Version 2 additions -->
|
||||||
|
|
||||||
|
<event name="brightness" since="2">
|
||||||
|
<description summary="current brightness state">
|
||||||
|
This event advertises the output's current brightness value.
|
||||||
|
|
||||||
|
The brightness is an integer between 0 and UINT32_MAX. 0 indicates
|
||||||
|
lowest light level (while still being powered on) and UINT32_MAX
|
||||||
|
indicates highest light level.
|
||||||
|
|
||||||
|
The brightness event is sent immediately when the object is created if
|
||||||
|
the output supports brightness. This event is also sent when the
|
||||||
|
brightness changes.
|
||||||
|
</description>
|
||||||
|
<arg name="value" type="uint" summary="brightness value between 0 and UINT32_MAX"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<request name="set_brightness" since="2">
|
||||||
|
<description summary="set brightness">
|
||||||
|
Set an output's brightness to the given value. The brightness change
|
||||||
|
is effective immediately. If the output does not support setting
|
||||||
|
brightness, a failed event is sent.
|
||||||
|
</description>
|
||||||
|
<arg name="value" type="uint" summary="brightness value between 0 and UINT32_MAX"/>
|
||||||
|
</request>
|
||||||
</interface>
|
</interface>
|
||||||
</protocol>
|
</protocol>
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
#include <wlr/util/log.h>
|
#include <wlr/util/log.h>
|
||||||
#include "wlr-output-power-management-unstable-v1-protocol.h"
|
#include "wlr-output-power-management-unstable-v1-protocol.h"
|
||||||
|
|
||||||
#define OUTPUT_POWER_MANAGER_V1_VERSION 1
|
#define OUTPUT_POWER_MANAGER_V1_VERSION 2
|
||||||
|
|
||||||
static void output_power_handle_destroy(struct wl_client *client,
|
static void output_power_handle_destroy(struct wl_client *client,
|
||||||
struct wl_resource *resource) {
|
struct wl_resource *resource) {
|
||||||
|
|
@ -58,6 +58,11 @@ static void output_power_v1_send_mode(struct wlr_output_power_v1 *output_power)
|
||||||
zwlr_output_power_v1_send_mode(output_power->resource, mode);
|
zwlr_output_power_v1_send_mode(output_power->resource, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void output_power_v1_send_brightness(struct wlr_output_power_v1 *output_power) {
|
||||||
|
zwlr_output_power_v1_send_brightness(output_power->resource,
|
||||||
|
round((double)output_power->output->brightness * UINT32_MAX));
|
||||||
|
}
|
||||||
|
|
||||||
static void output_power_handle_output_commit(struct wl_listener *listener,
|
static void output_power_handle_output_commit(struct wl_listener *listener,
|
||||||
void *data) {
|
void *data) {
|
||||||
struct wlr_output_power_v1 *output_power =
|
struct wlr_output_power_v1 *output_power =
|
||||||
|
|
@ -66,6 +71,9 @@ static void output_power_handle_output_commit(struct wl_listener *listener,
|
||||||
if (event->state->committed & WLR_OUTPUT_STATE_ENABLED) {
|
if (event->state->committed & WLR_OUTPUT_STATE_ENABLED) {
|
||||||
output_power_v1_send_mode(output_power);
|
output_power_v1_send_mode(output_power);
|
||||||
}
|
}
|
||||||
|
if (event->state->committed & WLR_OUTPUT_STATE_BRIGHTNESS) {
|
||||||
|
output_power_v1_send_brightness(output_power);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void output_power_handle_set_mode(struct wl_client *client,
|
static void output_power_handle_set_mode(struct wl_client *client,
|
||||||
|
|
@ -93,9 +101,31 @@ static void output_power_handle_set_mode(struct wl_client *client,
|
||||||
wl_signal_emit_mutable(&output_power->manager->events.set_mode, &event);
|
wl_signal_emit_mutable(&output_power->manager->events.set_mode, &event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void output_power_handle_set_brightness(struct wl_client *client,
|
||||||
|
struct wl_resource *output_power_resource,
|
||||||
|
uint32_t value_u32) {
|
||||||
|
struct wlr_output_power_v1 *output_power =
|
||||||
|
output_power_from_resource(output_power_resource);
|
||||||
|
if (output_power == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!output_power->output->brightness_supported) {
|
||||||
|
zwlr_output_power_v1_send_failed(output_power->resource);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct wlr_output_power_v1_set_brightness_event event = {
|
||||||
|
.output = output_power->output,
|
||||||
|
.value = (double)value_u32 / UINT32_MAX,
|
||||||
|
};
|
||||||
|
wl_signal_emit_mutable(&output_power->manager->events.set_brightness, &event);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct zwlr_output_power_v1_interface output_power_impl = {
|
static const struct zwlr_output_power_v1_interface output_power_impl = {
|
||||||
.destroy = output_power_handle_destroy,
|
.destroy = output_power_handle_destroy,
|
||||||
.set_mode = output_power_handle_set_mode,
|
.set_mode = output_power_handle_set_mode,
|
||||||
|
.set_brightness = output_power_handle_set_brightness,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct zwlr_output_power_manager_v1_interface
|
static const struct zwlr_output_power_manager_v1_interface
|
||||||
|
|
@ -162,6 +192,9 @@ static void output_power_manager_get_output_power(struct wl_client *client,
|
||||||
|
|
||||||
wl_list_insert(&manager->output_powers, &output_power->link);
|
wl_list_insert(&manager->output_powers, &output_power->link);
|
||||||
output_power_v1_send_mode(output_power);
|
output_power_v1_send_mode(output_power);
|
||||||
|
if (output->brightness_supported) {
|
||||||
|
output_power_v1_send_brightness(output_power);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void output_power_manager_destroy(struct wl_client *client,
|
static void output_power_manager_destroy(struct wl_client *client,
|
||||||
|
|
@ -195,6 +228,7 @@ static void handle_display_destroy(struct wl_listener *listener, void *data) {
|
||||||
wl_signal_emit_mutable(&manager->events.destroy, manager);
|
wl_signal_emit_mutable(&manager->events.destroy, manager);
|
||||||
|
|
||||||
assert(wl_list_empty(&manager->events.set_mode.listener_list));
|
assert(wl_list_empty(&manager->events.set_mode.listener_list));
|
||||||
|
assert(wl_list_empty(&manager->events.set_brightness.listener_list));
|
||||||
assert(wl_list_empty(&manager->events.destroy.listener_list));
|
assert(wl_list_empty(&manager->events.destroy.listener_list));
|
||||||
|
|
||||||
wl_global_destroy(manager->global);
|
wl_global_destroy(manager->global);
|
||||||
|
|
@ -217,6 +251,7 @@ struct wlr_output_power_manager_v1 *wlr_output_power_manager_v1_create(
|
||||||
}
|
}
|
||||||
|
|
||||||
wl_signal_init(&manager->events.set_mode);
|
wl_signal_init(&manager->events.set_mode);
|
||||||
|
wl_signal_init(&manager->events.set_brightness);
|
||||||
wl_signal_init(&manager->events.destroy);
|
wl_signal_init(&manager->events.destroy);
|
||||||
|
|
||||||
wl_list_init(&manager->output_powers);
|
wl_list_init(&manager->output_powers);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue