Files
waylight/src/Tick.cpp
Slendi 7834724e53 IME
Signed-off-by: Slendi <slendi@socopon.com>
2025-10-10 03:45:30 +03:00

63 lines
1.3 KiB
C++

#include "App.hpp"
#include <cassert>
#include <EGL/egl.h>
#include <GLES3/gl3.h>
#include <raylib.h>
#include <rlgl.h>
#include <xkbcommon/xkbcommon.h>
auto App::tick() -> void
{
static std::pmr::string text_input_data;
m_ime.bound_text = &text_input_data;
m_ime.bound_id = 1;
process_pending_text_input();
if (!m_visible || m_gl.edpy == EGL_NO_DISPLAY
|| m_gl.esurf == EGL_NO_SURFACE)
return;
glViewport(0, 0, m_win_w, m_win_h);
if (m_kbd.is_sym_pressed(XKB_KEY_Escape)) {
set_visible(!visible());
if (m_kbd.ctrl() && m_kbd.shift()) {
m_running = false;
}
}
BeginDrawing();
ClearBackground(theme().window.background);
{
assert(m_gui);
u32 rune { 0 };
if (!m_kbd.typing.empty()) {
rune = m_kbd.typing.back();
m_kbd.typing.clear();
}
ImGuiGuard gui_scope(m_gui, rune, m_kbd.ctrl(), m_kbd.shift());
Rectangle const input_rect {
0.0f,
0.0f,
static_cast<float>(GetScreenWidth()),
static_cast<float>(GetScreenHeight()),
};
auto result = m_gui->text_input(1, text_input_data, input_rect);
if (result.test(1))
m_ime.surrounding_dirty = true;
update_text_input_state(text_input_data, 1, input_rect);
}
EndDrawing();
eglSwapBuffers(m_gl.edpy, m_gl.esurf);
m_kbd.typing.clear();
m_kbd.clear_transients();
}