mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-27 05:34:00 +00:00
141 lines
4.2 KiB
C
141 lines
4.2 KiB
C
#ifndef CLEONOS_UWM_H
|
|
#define CLEONOS_UWM_H
|
|
|
|
#include "../cmd_runtime.h"
|
|
|
|
#define USH_UWM_APP_COUNT 3U
|
|
#define USH_UWM_TERMINAL_INDEX 1
|
|
#define USH_UWM_TASKMGR_INDEX 2
|
|
#define USH_UWM_TASKBAR_INDEX 3
|
|
#define USH_UWM_START_INDEX 4
|
|
#define USH_UWM_WINDOW_COUNT 5U
|
|
#define USH_UWM_TTY_DISPLAY 1ULL
|
|
|
|
#define USH_UWM_TOP_CLAMP_Y 24
|
|
#define USH_UWM_TITLE_H 32
|
|
#define USH_UWM_TASKBAR_H 48
|
|
#define USH_UWM_START_W 320
|
|
#define USH_UWM_START_H 360
|
|
#define USH_UWM_APP_START_W 360
|
|
#define USH_UWM_APP_START_H 240
|
|
#define USH_UWM_MIN_WINDOW_W 220
|
|
#define USH_UWM_MIN_WINDOW_H 150
|
|
#define USH_UWM_MOVE_STEP 16
|
|
#define USH_UWM_RESIZE_GRIP 18
|
|
#define USH_UWM_CONTROL_W 46
|
|
#define USH_UWM_EVENT_BUDGET 128ULL
|
|
#define USH_UWM_STARTUP_KEY_DRAIN_MAX 256ULL
|
|
#define USH_UWM_IDLE_SPINS 32
|
|
|
|
#define USH_UWM_TASKBAR_START_W 48
|
|
#define USH_UWM_TASKBAR_SEARCH_W 220
|
|
#define USH_UWM_TASKBAR_BUTTON_W 132
|
|
#define USH_UWM_TASKBAR_BUTTON_GAP 6
|
|
|
|
#define USH_UWM_KEY_LEFT 1ULL
|
|
#define USH_UWM_KEY_RIGHT 2ULL
|
|
#define USH_UWM_KEY_UP 3ULL
|
|
#define USH_UWM_KEY_DOWN 4ULL
|
|
|
|
#define USH_UWM_WM_FLAG_TOPMOST 0x1ULL
|
|
|
|
typedef unsigned int ush_uwm_u32;
|
|
|
|
typedef enum ush_uwm_window_kind {
|
|
USH_UWM_KIND_APP = 0,
|
|
USH_UWM_KIND_TASKBAR = 1,
|
|
USH_UWM_KIND_START = 2
|
|
} ush_uwm_window_kind;
|
|
|
|
typedef struct ush_uwm_window {
|
|
u64 id;
|
|
int x;
|
|
int y;
|
|
int w;
|
|
int h;
|
|
ush_uwm_u32 *pixels;
|
|
u64 pixel_count;
|
|
int alive;
|
|
int minimized;
|
|
int closed;
|
|
int topmost;
|
|
int maximized;
|
|
int restore_x;
|
|
int restore_y;
|
|
int restore_w;
|
|
int restore_h;
|
|
int dirty;
|
|
ush_uwm_window_kind kind;
|
|
ush_uwm_u32 accent;
|
|
char title[32];
|
|
char subtitle[64];
|
|
} ush_uwm_window;
|
|
|
|
typedef struct ush_uwm_session {
|
|
int screen_w;
|
|
int screen_h;
|
|
int active_window;
|
|
int dragging;
|
|
int drag_window;
|
|
int drag_offset_x;
|
|
int drag_offset_y;
|
|
int resizing;
|
|
int resize_window;
|
|
int resize_start_x;
|
|
int resize_start_y;
|
|
int resize_start_w;
|
|
int resize_start_h;
|
|
int resize_pending_w;
|
|
int resize_pending_h;
|
|
int start_open;
|
|
u64 mouse_packet_seen;
|
|
u64 app_registry_last_tick;
|
|
u64 tty_before;
|
|
int tty_switched;
|
|
char last_error[96];
|
|
u64 app_pids[USH_UWM_APP_COUNT];
|
|
u64 app_states[USH_UWM_APP_COUNT];
|
|
ush_uwm_window windows[USH_UWM_WINDOW_COUNT];
|
|
} ush_uwm_session;
|
|
|
|
int ush_uwm_window_index_valid(int index);
|
|
int ush_uwm_app_index_valid(int index);
|
|
int ush_uwm_clampi(int value, int min_value, int max_value);
|
|
int ush_uwm_u64_as_i32(u64 raw);
|
|
void ush_uwm_drain_startup_keys(void);
|
|
int ush_uwm_app_registry_running(ush_uwm_session *sess, int index);
|
|
int ush_uwm_refresh_app_registry(ush_uwm_session *sess);
|
|
|
|
int ush_uwm_alloc_pixels(ush_uwm_window *win);
|
|
int ush_uwm_replace_pixels(ush_uwm_window *win, int width, int height);
|
|
void ush_uwm_render_window(ush_uwm_session *sess, int index);
|
|
void ush_uwm_refresh_window(ush_uwm_session *sess, int index);
|
|
int ush_uwm_create_window(ush_uwm_window *win);
|
|
int ush_uwm_present_window(const ush_uwm_window *win);
|
|
void ush_uwm_destroy_kernel_window(ush_uwm_window *win);
|
|
void ush_uwm_destroy_window(ush_uwm_window *win);
|
|
int ush_uwm_window_move_clamped(ush_uwm_session *sess, int index, int target_x, int target_y);
|
|
int ush_uwm_window_resize(ush_uwm_session *sess, int index, int target_w, int target_h);
|
|
void ush_uwm_set_active(ush_uwm_session *sess, int index);
|
|
void ush_uwm_focus_next(ush_uwm_session *sess);
|
|
void ush_uwm_minimize_window(ush_uwm_session *sess, int index);
|
|
void ush_uwm_close_window(ush_uwm_session *sess, int index);
|
|
void ush_uwm_restore_window(ush_uwm_session *sess, int index);
|
|
void ush_uwm_toggle_topmost(ush_uwm_session *sess, int index);
|
|
void ush_uwm_toggle_maximize(ush_uwm_session *sess, int index);
|
|
void ush_uwm_toggle_start(ush_uwm_session *sess);
|
|
void ush_uwm_close_start(ush_uwm_session *sess);
|
|
void ush_uwm_refresh_taskbar(ush_uwm_session *sess);
|
|
|
|
void ush_uwm_handle_event(ush_uwm_session *sess, int window_index, const cleonos_wm_event *event, int *running);
|
|
int ush_uwm_loop(ush_uwm_session *sess);
|
|
|
|
int ush_uwm_prepare_session(ush_uwm_session *sess);
|
|
int ush_uwm_start(ush_uwm_session *sess);
|
|
void ush_uwm_stop(ush_uwm_session *sess);
|
|
int ush_uwm_switch_to_display_tty(ush_uwm_session *sess);
|
|
void ush_uwm_restore_tty(ush_uwm_session *sess);
|
|
int ush_cmd_uwm(const char *arg);
|
|
|
|
#endif
|