From 5fa590ff66f6b531f13d03b28e7e8c5ab71c836b Mon Sep 17 00:00:00 2001 From: svsptech Date: Sun, 19 Apr 2026 19:21:57 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BA=D0=B5=D0=BB=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=20wm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wm/x11/cwmX11 | Bin 0 -> 138448 bytes wm/x11/src/main.c | 348 ++++++++++++++++++++++++++++++++++++++++++++ wm/x11/src/makefile | 36 +++++ 3 files changed, 384 insertions(+) create mode 100755 wm/x11/cwmX11 create mode 100644 wm/x11/src/main.c create mode 100644 wm/x11/src/makefile diff --git a/wm/x11/cwmX11 b/wm/x11/cwmX11 new file mode 100755 index 0000000000000000000000000000000000000000..d0d4289f2e86fdff66353dafb1902032d968e919 GIT binary patch literal 138448 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≷9`k+Vm;$z_erd|MR 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 literal 0 HcmV?d00001 diff --git a/wm/x11/src/main.c b/wm/x11/src/main.c new file mode 100644 index 0000000..2d39411 --- /dev/null +++ b/wm/x11/src/main.c @@ -0,0 +1,348 @@ +// main.c - чистая версия для FreeBSD +#ifndef __linux__ +#define __linux__ 1 // для совместимости +#endif +#ifndef _LINUX +#define _LINUX 1 +#endif + +#ifndef _SAPI +#define _SAPI SciterAPI +#endif + +#include +#include +#include +#include + +// X11, OpenGL и FreeBSD специфичные заголовки +#include +#include +#include +#include +#include + +#include + +// Sciter C API (не C++!) +#include + +// Глобальные переменные X11/GLX +Display *dpy = NULL; +Window root_win = 0; +Window comp_win = 0; +int screen = 0; +int screen_width = 0; +int screen_height = 0; + +GLXContext glx_ctx = NULL; +GLXFBConfig fb_config = 0; + +Atom wm_delete_window = 0; + +// Окно Sciter (структура вместо класса) +HWINDOW g_sciter_hwnd = NULL; + +// ------------------------------------------------------------- +// Инициализация X11 +// ------------------------------------------------------------- +void init_x11(void) { + dpy = XOpenDisplay(NULL); + if (!dpy) { + fprintf(stderr, "Ошибка: не могу открыть дисплей\n"); + exit(1); + } + + screen = DefaultScreen(dpy); + root_win = DefaultRootWindow(dpy); + + screen_width = WidthOfScreen(DefaultScreenOfDisplay(dpy)); + screen_height = HeightOfScreen(DefaultScreenOfDisplay(dpy)); + + XSetWindowAttributes attrs; + attrs.override_redirect = True; + attrs.background_pixel = 0; + attrs.border_pixel = 0; + attrs.event_mask = ExposureMask | KeyPressMask | StructureNotifyMask | KeyReleaseMask; + + comp_win = XCreateWindow(dpy, root_win, + 0, 0, screen_width, screen_height, 0, + CopyFromParent, InputOutput, CopyFromParent, + CWOverrideRedirect | CWBackPixel | CWBorderPixel | CWEventMask, + &attrs); + + // Установка состояния окна (поверх всех и полноэкранный режим) + Atom net_wm_state = XInternAtom(dpy, "_NET_WM_STATE", False); + Atom net_wm_state_above = XInternAtom(dpy, "_NET_WM_STATE_ABOVE", False); + Atom net_wm_state_fullscreen = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); + + Atom states[] = { net_wm_state_above, net_wm_state_fullscreen }; + XChangeProperty(dpy, comp_win, net_wm_state, XA_ATOM, 32, + PropModeReplace, (unsigned char *)states, 2); + + // Обработка закрытия окна + wm_delete_window = XInternAtom(dpy, "WM_DELETE_WINDOW", False); + XSetWMProtocols(dpy, comp_win, &wm_delete_window, 1); + + XMapWindow(dpy, comp_win); + XRaiseWindow(dpy, comp_win); + XFlush(dpy); + + printf("Окно создано: 0x%lx (%dx%d)\n", comp_win, screen_width, screen_height); +} + +// ------------------------------------------------------------- +// Инициализация GLX для FreeBSD +// ------------------------------------------------------------- +void init_glx(void) { + XWindowAttributes win_attrs; + XGetWindowAttributes(dpy, comp_win, &win_attrs); + Visual *window_visual = win_attrs.visual; + VisualID window_visual_id = XVisualIDFromVisual(window_visual); + + // Атрибуты для GLX + int fb_attribs[] = { + GLX_RENDER_TYPE, GLX_RGBA_BIT, + GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, + GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + GLX_ALPHA_SIZE, 8, + GLX_DEPTH_SIZE, 24, + GLX_DOUBLEBUFFER, True, + None + }; + + int num_fb; + GLXFBConfig *fb_configs = glXChooseFBConfig(dpy, screen, fb_attribs, &num_fb); + if (!fb_configs) { + fprintf(stderr, "Ошибка: не удалось получить FBConfig\n"); + exit(1); + } + + // Поиск совместимого FBConfig + GLXFBConfig compatible_config = 0; + for (int i = 0; i < num_fb; i++) { + int visual_id = 0; + glXGetFBConfigAttrib(dpy, fb_configs[i], GLX_VISUAL_ID, &visual_id); + if ((VisualID)visual_id == window_visual_id) { + compatible_config = fb_configs[i]; + break; + } + } + + if (!compatible_config) { + compatible_config = fb_configs[0]; + printf("Предупреждение: используется несовместимый FBConfig\n"); + } + + fb_config = compatible_config; + XFree(fb_configs); + + // Создание контекста OpenGL + glx_ctx = glXCreateNewContext(dpy, fb_config, GLX_RGBA_TYPE, NULL, True); + if (!glx_ctx) { + fprintf(stderr, "Ошибка: не удалось создать GLX контекст\n"); + exit(1); + } + + // Делаем контекст текущим + if (!glXMakeCurrent(dpy, comp_win, glx_ctx)) { + fprintf(stderr, "Ошибка: glXMakeCurrent не удался\n"); + exit(1); + } + + printf("GLX инициализирован. OpenGL: %s\n", glGetString(GL_VERSION)); +} + +// ------------------------------------------------------------- +// Функции обратного вызова Sciter +// ------------------------------------------------------------- +// Вызывается при необходимости перерисовки окна +void sciter_on_paint(HWINDOW hwnd, UINT_PTR reserved) { + // Sciter сам обрабатывает отрисовку через OpenGL + // Просто вызываем обновление + SciterUpdateWindow(hwnd); +} + +// ------------------------------------------------------------- +// Инициализация Sciter +// ------------------------------------------------------------- +void init_sciter(void) { + // Устанавливаем графический слой OpenGL (через Skia) + SciterSetOption(NULL, SCITER_SET_GFX_LAYER, GFX_LAYER_SKIA_OPENGL); + + // Включаем возможности для скриптов + SciterSetOption(NULL, SCITER_SET_SCRIPT_RUNTIME_FEATURES, + ALLOW_FILE_IO | ALLOW_SOCKET_IO | ALLOW_EVAL | ALLOW_SYSINFO); + + // Создаем окно Sciter (без WinAPI, через X11) + RECT frame_rect = {0, 0, screen_width, screen_height}; + + g_sciter_hwnd = SciterCreateWindow( + SW_MAIN | SW_ENABLE_DEBUG, + &frame_rect, + NULL, + NULL, + NULL + ); + + if (!g_sciter_hwnd) { + fprintf(stderr, "Ошибка: не удалось создать Sciter окно\n"); + exit(1); + } + + // Устанавливаем обработчик отрисовки + //sciter_callback(g_sciter_hwnd, SCITER_CB_PAINT, (void*)sciter_on_paint); + + // HTML контент + const char *html = + "" + "" + "

Calista + Sciter

" + "

Sciter работает через OpenGL на FreeBSD!

" + "" + "
Система готова
" + "
"; + + // Загружаем HTML + SciterLoadHtml(g_sciter_hwnd, html, (UINT)strlen(html), "/"); + + printf("Sciter инициализирован и HTML загружен\n"); +} + +// ------------------------------------------------------------- +// Обновление позиции окна Sciter +// ------------------------------------------------------------- +void update_sciter_window_size(int width, int height) { + if (g_sciter_hwnd) { + RECT rect = {0, 0, width, height}; + //SciterSetWindowRect(g_sciter_hwnd, &rect); + } +} + +// ------------------------------------------------------------- +// Главный цикл обработки событий +// ------------------------------------------------------------- +void main_loop(void) { + XEvent ev; + bool running = true; + + printf("Композитор запущен. Нажмите Q или Escape для выхода.\n"); + + while (running) { + // Обработка событий X11 + while (XPending(dpy) > 0) { + XNextEvent(dpy, &ev); + + switch (ev.type) { + case Expose: + if (ev.xexpose.count == 0) { + // Обновляем Sciter при необходимости + SciterUpdateWindow(g_sciter_hwnd); + } + break; + + case KeyPress: + { + char key_str[32]; + KeySym keysym; + XLookupString(&ev.xkey, key_str, sizeof(key_str), &keysym, NULL); + + // Выход по Q или Escape + if (keysym == XK_q || keysym == XK_Q || keysym == XK_Escape) { + printf("Выход по запросу пользователя\n"); + running = false; + } + break; + } + + case ConfigureNotify: + screen_width = ev.xconfigure.width; + screen_height = ev.xconfigure.height; + update_sciter_window_size(screen_width, screen_height); + break; + + case ClientMessage: + if ((Atom)ev.xclient.data.l[0] == wm_delete_window) { + printf("Получен WM_DELETE_WINDOW\n"); + running = false; + } + break; + + case DestroyNotify: + printf("Окно разрушено\n"); + running = false; + break; + } + } + + // Обновляем Sciter + SciterUpdateWindow(g_sciter_hwnd); + + // Небольшая задержка для снижения нагрузки на CPU + usleep(10000); // 10ms + } +} + +// ------------------------------------------------------------- +// Очистка ресурсов +// ------------------------------------------------------------- +void cleanup(void) { + if (g_sciter_hwnd) { + //SciterCloseWindow(g_sciter_hwnd); + g_sciter_hwnd = NULL; + } + + if (glx_ctx) { + glXMakeCurrent(dpy, None, NULL); + glXDestroyContext(dpy, glx_ctx); + glx_ctx = NULL; + } + + if (comp_win) { + XDestroyWindow(dpy, comp_win); + comp_win = 0; + } + + if (dpy) { + XCloseDisplay(dpy); + dpy = NULL; + } + + printf("Ресурсы освобождены\n"); +} + +// ------------------------------------------------------------- +// Точка входа +// ------------------------------------------------------------- +int main(int argc, char **argv) { + // Игнорируем аргументы + (void)argc; + (void)argv; + + printf("Запуск Calista композитора для FreeBSD\n"); + + init_x11(); + init_glx(); + init_sciter(); + + main_loop(); + cleanup(); + + return 0; +} \ No newline at end of file diff --git a/wm/x11/src/makefile b/wm/x11/src/makefile new file mode 100644 index 0000000..9974f2b --- /dev/null +++ b/wm/x11/src/makefile @@ -0,0 +1,36 @@ +# Makefile for Calista Compositor + +CC = cc +CFLAGS = -Wall -Wextra -O2 -g +CFLAGS += -I/usr/local/include +CFLAGS += -I/calista/engine/include + +LDFLAGS = -L/usr/local/lib -lX11 -lXcomposite -lXdamage -lXrender -lGL -lEGL +LDFLAGS += -L/calista/engine -lsciter + +TARGET = cwmX11 +SRCS = main.c +OBJS = $(SRCS:.c=.o) + +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CC) $(OBJS) -o $(TARGET) $(LDFLAGS) + mv $(TARGET) ./../ + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) $(TARGET) + +run: $(TARGET) + ./$(TARGET) + +install: $(TARGET) + cp $(TARGET) /usr/local/bin/ + +uninstall: + rm -f /usr/local/bin/$(TARGET) + +.PHONY: all clean run install uninstall \ No newline at end of file