- 重构模块使用新的代码风格 - 老代码 (src 目录下的代码) 继续使用之前的代码风格 通过在需要不同代码风格的目录下放对应 .clang-format 配置文件实现
71 lines
1.6 KiB
C
71 lines
1.6 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,
|
|
// 只影响窗口装饰,不改变 layout 结果;例如焦点切换导致边框颜色变化
|
|
WM_DIRTY_DECORATION = 1u << 4,
|
|
WM_DIRTY_RENDER = 1u << 5,
|
|
} 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; // runtime 解析出的有效边框宽度
|
|
wm_rgba32_t border_rgba; // runtime 解析出的有效边框颜色
|
|
} 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);
|