68 lines
1.3 KiB
C
68 lines
1.3 KiB
C
#pragma once
|
|
|
|
#include "wm_types.h"
|
|
|
|
typedef enum wm_dirty_flags_t {
|
|
WM_DIRTY_NONE = 0,
|
|
WM_DIRTY_STATE = 1u << 0,
|
|
WM_DIRTY_LAYOUT = 1u << 1,
|
|
WM_DIRTY_STACK = 1u << 2,
|
|
WM_DIRTY_OUTPUT = 1u << 3,
|
|
WM_DIRTY_RENDER = 1u << 4,
|
|
} wm_dirty_flags_t;
|
|
|
|
typedef enum wm_effect_type_t {
|
|
WM_EFFECT_NONE,
|
|
WM_EFFECT_MAP_WINDOW,
|
|
WM_EFFECT_UNMAP_WINDOW,
|
|
WM_EFFECT_CONFIGURE_WINDOW,
|
|
WM_EFFECT_FOCUS_WINDOW,
|
|
WM_EFFECT_RESTACK_WINDOWS,
|
|
WM_EFFECT_RENDER_OUTPUT,
|
|
} wm_effect_type_t;
|
|
|
|
typedef struct wm_effect_t {
|
|
wm_effect_type_t type;
|
|
union {
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} map_window;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} unmap_window;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
wm_rect_t rect;
|
|
uint16_t border_width;
|
|
} configure_window;
|
|
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
} focus_window;
|
|
|
|
struct {
|
|
const wm_window_id_t *stack_order;
|
|
size_t stack_count;
|
|
} restack_windows;
|
|
|
|
struct {
|
|
wm_output_id_t output_id;
|
|
} render_output;
|
|
} as;
|
|
} wm_effect_t;
|
|
|
|
typedef struct wm_plan_t {
|
|
wm_effect_t *effects;
|
|
size_t effect_count;
|
|
size_t effect_capacity;
|
|
uint32_t dirty_flags;
|
|
} wm_plan_t;
|
|
|
|
void wm_plan_init(wm_plan_t *plan);
|
|
void wm_plan_reset(wm_plan_t *plan);
|
|
void wm_plan_shutdown(wm_plan_t *plan);
|
|
|
|
bool wm_plan_push_effect(wm_plan_t *plan, wm_effect_t effect);
|