- 重构模块使用新的代码风格 - 老代码 (src 目录下的代码) 继续使用之前的代码风格 通过在需要不同代码风格的目录下放对应 .clang-format 配置文件实现
64 lines
1.4 KiB
C
64 lines
1.4 KiB
C
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "wm_state.h"
|
|
|
|
typedef enum wm_service_event_type_t {
|
|
WM_SERVICE_EVENT_NONE,
|
|
WM_SERVICE_EVENT_RUNTIME_STARTED,
|
|
WM_SERVICE_EVENT_RUNTIME_STOPPING,
|
|
WM_SERVICE_EVENT_WINDOW_METADATA_CHANGED,
|
|
WM_SERVICE_EVENT_RENDER_OUTPUT,
|
|
} wm_service_event_type_t;
|
|
|
|
typedef struct wm_service_event_t {
|
|
wm_service_event_type_t type;
|
|
union {
|
|
struct {
|
|
wm_window_id_t window_id;
|
|
uint32_t changed_fields;
|
|
} window_metadata_changed;
|
|
|
|
struct {
|
|
wm_output_id_t output_id;
|
|
} render_output;
|
|
} as;
|
|
} wm_service_event_t;
|
|
|
|
typedef struct wm_service_t wm_service_t;
|
|
|
|
typedef struct wm_service_api_t {
|
|
bool (*init)(wm_service_t *service);
|
|
void (*handle_event)(
|
|
wm_service_t *service,
|
|
const wm_service_event_t *event,
|
|
const wm_state_t *state
|
|
);
|
|
void (*shutdown)(wm_service_t *service);
|
|
} wm_service_api_t;
|
|
|
|
struct wm_service_t {
|
|
const wm_service_api_t *api;
|
|
void *impl;
|
|
};
|
|
|
|
typedef struct wm_service_registry_t {
|
|
wm_service_t *items;
|
|
size_t count;
|
|
size_t capacity;
|
|
} wm_service_registry_t;
|
|
|
|
void wm_service_registry_init(wm_service_registry_t *registry);
|
|
void wm_service_registry_shutdown(wm_service_registry_t *registry);
|
|
|
|
bool wm_service_registry_register(
|
|
wm_service_registry_t *registry,
|
|
wm_service_t service
|
|
);
|
|
void wm_service_registry_emit(
|
|
wm_service_registry_t *registry,
|
|
const wm_service_event_t *event,
|
|
const wm_state_t *state
|
|
);
|