erythros/Include/Gui.HC

53 lines
No EOL
2.1 KiB
HolyC

U0 @gui_event_loop(CTask* task)
{
Fs->ipc = task->ipc;
IpcMessage* msg;
while (1) {
msg = Ipc.MsgRecv();
if (msg) {
switch (msg->type) {
// TODO:
case CPZ_MSG_WIN_WIDGET_DESTROY:
@gui_widget_destroy(msg->payload);
case CPZ_MSG_WIN_MOVE_TO:
break;
case CPZ_MSG_WIN_KEY_PRESS:
if (msg->payload(Window*)->callback.keypress)
msg->payload(Window*)->callback.keypress(msg->payload, msg->i64);
@gui_window_repaint(msg->payload, msg->type);
Compositor.theme.window_repaint(msg->payload, msg->type);
if (msg->payload(Window*)->callback.repaint)
msg->payload(Window*)->callback.repaint(msg->payload);
break;
case CPZ_MSG_WIN_MOUSE_AT:
if (msg->payload(Window*)->callback.mouseat)
msg->payload(Window*)->callback.mouseat(msg->payload);
@gui_window_repaint(msg->payload, msg->type);
Compositor.theme.window_repaint(msg->payload, msg->type);
if (msg->payload(Window*)->callback.repaint)
msg->payload(Window*)->callback.repaint(msg->payload);
break;
case CPZ_MSG_WIN_MOUSE_WHEEL:
case CPZ_MSG_WIN_LEFT_BTN_UP:
case CPZ_MSG_WIN_LEFT_BTN_DOWN:
case CPZ_MSG_WIN_RIGHT_BTN_UP:
case CPZ_MSG_WIN_RIGHT_BTN_DOWN:
case CPZ_MSG_WIN_REPAINT:
@gui_window_repaint(msg->payload, msg->type);
Compositor.theme.window_repaint(msg->payload, msg->type);
if (msg->payload(Window*)->callback.repaint)
msg->payload(Window*)->callback.repaint(msg->payload);
break;
// FIXME: add CPZ_MSG_WIN_RESIZE
default:
break;
}
Free(msg);
}
Sleep(1);
}
}
Ipc.InitQueue(Fs);
Spawn(&@gui_event_loop, Fs, Fs->task_name, 1);
System.Log(Fs, "Task running at 0x%08x", Fs);