output: add output state setters

This ensures compositors don't forget to set the committed flag
or the mode_type when setting a field.
This commit is contained in:
Simon Ser 2022-06-07 18:54:42 +02:00
parent 0173275f7e
commit 6688a3d9ea
3 changed files with 70 additions and 0 deletions

View File

@ -501,6 +501,23 @@ bool wlr_output_cursor_move(struct wlr_output_cursor *cursor,
void wlr_output_cursor_destroy(struct wlr_output_cursor *cursor);
void wlr_output_state_set_enabled(struct wlr_output_state *state,
bool enabled);
void wlr_output_state_set_mode(struct wlr_output_state *state,
struct wlr_output_mode *mode);
void wlr_output_state_set_custom_mode(struct wlr_output_state *state,
int32_t width, int32_t height, int32_t refresh);
void wlr_output_state_set_scale(struct wlr_output_state *state, float scale);
void wlr_output_state_set_transform(struct wlr_output_state *state,
enum wl_output_transform transform);
void wlr_output_state_set_adaptive_sync_enabled(struct wlr_output_state *state,
bool enabled);
void wlr_output_state_set_render_format(struct wlr_output_state *state,
uint32_t format);
void wlr_output_state_set_subpixel(struct wlr_output_state *state,
enum wl_output_subpixel subpixel);
/**
* Returns the transform that, when composed with `tr`, gives
* `WL_OUTPUT_TRANSFORM_NORMAL`.

View File

@ -6,6 +6,7 @@ wlr_files += files(
'output/cursor.c',
'output/output.c',
'output/render.c',
'output/state.c',
'output/transform.c',
'scene/subsurface_tree.c',
'scene/surface.c',

52
types/output/state.c Normal file
View File

@ -0,0 +1,52 @@
#include "types/wlr_output.h"
void wlr_output_state_set_enabled(struct wlr_output_state *state,
bool enabled) {
state->committed |= WLR_OUTPUT_STATE_ENABLED;
state->enabled = enabled;
}
void wlr_output_state_set_mode(struct wlr_output_state *state,
struct wlr_output_mode *mode) {
state->committed |= WLR_OUTPUT_STATE_MODE;
state->mode_type = WLR_OUTPUT_STATE_MODE_FIXED;
state->mode = mode;
}
void wlr_output_state_set_custom_mode(struct wlr_output_state *state,
int32_t width, int32_t height, int32_t refresh) {
state->committed |= WLR_OUTPUT_STATE_MODE;
state->mode_type = WLR_OUTPUT_STATE_MODE_CUSTOM;
state->custom_mode.width = width;
state->custom_mode.height = height;
state->custom_mode.refresh = refresh;
}
void wlr_output_state_set_scale(struct wlr_output_state *state, float scale) {
state->committed |= WLR_OUTPUT_STATE_SCALE;
state->scale = scale;
}
void wlr_output_state_set_transform(struct wlr_output_state *state,
enum wl_output_transform transform) {
state->committed |= WLR_OUTPUT_STATE_TRANSFORM;
state->transform = transform;
}
void wlr_output_state_set_adaptive_sync_enabled(struct wlr_output_state *state,
bool enabled) {
state->committed |= WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED;
state->adaptive_sync_enabled = enabled;
}
void wlr_output_state_set_render_format(struct wlr_output_state *state,
uint32_t format) {
state->committed |= WLR_OUTPUT_STATE_RENDER_FORMAT;
state->render_format = format;
}
void wlr_output_state_set_subpixel(struct wlr_output_state *state,
enum wl_output_subpixel subpixel) {
state->committed |= WLR_OUTPUT_STATE_SUBPIXEL;
state->subpixel = subpixel;
}