mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-06-14 14:32:57 -04:00
Merge branch 'brightness' into 'master'
Add brightness support See merge request wlroots/wlroots!5384
This commit is contained in:
commit
5e94bd284e
11 changed files with 129 additions and 4 deletions
|
|
@ -261,6 +261,10 @@ static void output_apply_state(struct wlr_output *output,
|
|||
}
|
||||
}
|
||||
|
||||
if (state->committed & WLR_OUTPUT_STATE_BRIGHTNESS) {
|
||||
output->brightness = state->brightness;
|
||||
}
|
||||
|
||||
bool geometry_updated = state->committed &
|
||||
(WLR_OUTPUT_STATE_MODE | WLR_OUTPUT_STATE_TRANSFORM |
|
||||
WLR_OUTPUT_STATE_SUBPIXEL);
|
||||
|
|
@ -359,6 +363,7 @@ void wlr_output_init(struct wlr_output *output, struct wlr_backend *backend,
|
|||
.render_format = DRM_FORMAT_XRGB8888,
|
||||
.transform = WL_OUTPUT_TRANSFORM_NORMAL,
|
||||
.scale = 1,
|
||||
.brightness = 1,
|
||||
.commit_seq = 0,
|
||||
};
|
||||
|
||||
|
|
@ -590,6 +595,10 @@ static uint32_t output_compare_state(struct wlr_output *output,
|
|||
output->color_range == state->color_range) {
|
||||
fields |= WLR_OUTPUT_STATE_COLOR_REPRESENTATION;
|
||||
}
|
||||
if ((state->committed & WLR_OUTPUT_STATE_BRIGHTNESS) &&
|
||||
output->brightness == state->brightness) {
|
||||
fields |= WLR_OUTPUT_STATE_BRIGHTNESS;
|
||||
}
|
||||
return fields;
|
||||
}
|
||||
|
||||
|
|
@ -687,6 +696,7 @@ static bool output_basic_test(struct wlr_output *output,
|
|||
{ WLR_OUTPUT_STATE_SUBPIXEL, "subpixel" },
|
||||
{ WLR_OUTPUT_STATE_COLOR_TRANSFORM, "color transform" },
|
||||
{ WLR_OUTPUT_STATE_IMAGE_DESCRIPTION, "image description" },
|
||||
{ WLR_OUTPUT_STATE_BRIGHTNESS, "brightness" },
|
||||
};
|
||||
if (!enabled) {
|
||||
for (size_t i = 0; i < sizeof(needs_enabled) / sizeof(needs_enabled[0]); i++) {
|
||||
|
|
@ -726,6 +736,12 @@ static bool output_basic_test(struct wlr_output *output,
|
|||
}
|
||||
}
|
||||
|
||||
if ((state->committed & WLR_OUTPUT_STATE_BRIGHTNESS) &&
|
||||
!output->brightness_supported) {
|
||||
wlr_log(WLR_DEBUG, "Brightness is not supported for this output");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -149,6 +149,11 @@ void wlr_output_state_set_color_encoding_and_range(
|
|||
state->color_range = range;
|
||||
}
|
||||
|
||||
void wlr_output_state_set_brightness(struct wlr_output_state *state, float value) {
|
||||
state->committed |= WLR_OUTPUT_STATE_BRIGHTNESS;
|
||||
state->brightness = value;
|
||||
}
|
||||
|
||||
bool wlr_output_state_copy(struct wlr_output_state *dst,
|
||||
const struct wlr_output_state *src) {
|
||||
struct wlr_output_state copy = *src;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
#include <wlr/util/log.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,
|
||||
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);
|
||||
}
|
||||
|
||||
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,
|
||||
void *data) {
|
||||
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) {
|
||||
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,
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
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 = {
|
||||
.destroy = output_power_handle_destroy,
|
||||
.set_mode = output_power_handle_set_mode,
|
||||
.set_brightness = output_power_handle_set_brightness,
|
||||
};
|
||||
|
||||
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);
|
||||
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,
|
||||
|
|
@ -195,6 +228,7 @@ static void handle_display_destroy(struct wl_listener *listener, void *data) {
|
|||
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_brightness.listener_list));
|
||||
assert(wl_list_empty(&manager->events.destroy.listener_list));
|
||||
|
||||
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_brightness);
|
||||
wl_signal_init(&manager->events.destroy);
|
||||
|
||||
wl_list_init(&manager->output_powers);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue