@@ -13,6 +13,7 @@ pkg_check_modules(GLES2 REQUIRED IMPORTED_TARGET glesv2)
|
|||||||
pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
|
pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
|
||||||
pkg_check_modules(LIBPORTAL REQUIRED IMPORTED_TARGET libportal)
|
pkg_check_modules(LIBPORTAL REQUIRED IMPORTED_TARGET libportal)
|
||||||
pkg_check_modules(XKBCOMMON REQUIRED IMPORTED_TARGET xkbcommon)
|
pkg_check_modules(XKBCOMMON REQUIRED IMPORTED_TARGET xkbcommon)
|
||||||
|
pkg_check_modules(FONTCONFIG REQUIRED IMPORTED_TARGET fontconfig)
|
||||||
pkg_check_modules(WAYLAND_PROTOCOLS REQUIRED wayland-protocols)
|
pkg_check_modules(WAYLAND_PROTOCOLS REQUIRED wayland-protocols)
|
||||||
pkg_check_modules(WLR_PROTOCOLS REQUIRED wlr-protocols)
|
pkg_check_modules(WLR_PROTOCOLS REQUIRED wlr-protocols)
|
||||||
|
|
||||||
@@ -117,7 +118,7 @@ add_executable(waylight
|
|||||||
${GEN_C_PRIVATES}
|
${GEN_C_PRIVATES}
|
||||||
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/App.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/App.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Frame.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Tick.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
|
||||||
)
|
)
|
||||||
add_dependencies(waylight generate_protocols)
|
add_dependencies(waylight generate_protocols)
|
||||||
@@ -134,6 +135,7 @@ target_link_libraries(waylight PRIVATE
|
|||||||
PkgConfig::GLIB
|
PkgConfig::GLIB
|
||||||
PkgConfig::LIBPORTAL
|
PkgConfig::LIBPORTAL
|
||||||
PkgConfig::XKBCOMMON
|
PkgConfig::XKBCOMMON
|
||||||
|
PkgConfig::FONTCONFIG
|
||||||
|
|
||||||
raylib
|
raylib
|
||||||
|
|
||||||
|
|||||||
67
flake.nix
67
flake.nix
@@ -23,41 +23,44 @@
|
|||||||
];
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
devShells.default = pkgs.mkShell.override { stdenv = pkgs.llvmPackages_21.libcxxStdenv; } {
|
devShells.default =
|
||||||
packages =
|
pkgs.mkShell.override { stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.gcc15Stdenv; }
|
||||||
with pkgs;
|
{
|
||||||
[
|
packages =
|
||||||
llvmPackages_21.clang-tools
|
with pkgs;
|
||||||
lldb
|
[
|
||||||
codespell
|
llvmPackages_21.clang-tools
|
||||||
doxygen
|
lldb
|
||||||
gtest
|
codespell
|
||||||
cppcheck
|
doxygen
|
||||||
inotify-tools
|
gtest
|
||||||
|
cppcheck
|
||||||
|
inotify-tools
|
||||||
|
|
||||||
pkg-config
|
pkg-config
|
||||||
wayland
|
wayland
|
||||||
wayland-protocols
|
wayland-protocols
|
||||||
wlr-protocols
|
wlr-protocols
|
||||||
wayland-scanner
|
wayland-scanner
|
||||||
libGL
|
libGL
|
||||||
libportal
|
libportal
|
||||||
glib
|
glib
|
||||||
libxkbcommon
|
libxkbcommon
|
||||||
]
|
fontconfig
|
||||||
++ buildInputs
|
]
|
||||||
++ nativeBuildInputs
|
++ buildInputs
|
||||||
++ pkgs.lib.optionals pkgs.stdenv.isLinux (
|
++ nativeBuildInputs
|
||||||
with pkgs;
|
++ pkgs.lib.optionals pkgs.stdenv.isLinux (
|
||||||
[
|
with pkgs;
|
||||||
valgrind-light
|
[
|
||||||
]
|
valgrind-light
|
||||||
);
|
]
|
||||||
|
);
|
||||||
|
|
||||||
env = { };
|
env = { };
|
||||||
|
|
||||||
shellHook = '''';
|
shellHook = '''';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
978
src/App.cpp
978
src/App.cpp
File diff suppressed because it is too large
Load Diff
18
src/App.hpp
18
src/App.hpp
@@ -41,7 +41,7 @@ private:
|
|||||||
auto init_signal() -> void;
|
auto init_signal() -> void;
|
||||||
auto init_theme_portal() -> void;
|
auto init_theme_portal() -> void;
|
||||||
auto pump_events() -> void;
|
auto pump_events() -> void;
|
||||||
auto render_frame() -> void;
|
auto tick() -> void;
|
||||||
auto create_layer_surface() -> void;
|
auto create_layer_surface() -> void;
|
||||||
auto destroy_layer_surface() -> void;
|
auto destroy_layer_surface() -> void;
|
||||||
auto ensure_egl_surface() -> void;
|
auto ensure_egl_surface() -> void;
|
||||||
@@ -60,7 +60,7 @@ private:
|
|||||||
wl_compositor *compositor {};
|
wl_compositor *compositor {};
|
||||||
wl_seat *seat {};
|
wl_seat *seat {};
|
||||||
wl_keyboard *kbd {};
|
wl_keyboard *kbd {};
|
||||||
wl_surface *wl_surface {};
|
wl_surface *surface {};
|
||||||
zwlr_layer_shell_v1 *layer_shell {};
|
zwlr_layer_shell_v1 *layer_shell {};
|
||||||
zwlr_layer_surface_v1 *layer_surface {};
|
zwlr_layer_surface_v1 *layer_surface {};
|
||||||
ext_background_effect_manager_v1 *mgr {};
|
ext_background_effect_manager_v1 *mgr {};
|
||||||
@@ -85,9 +85,9 @@ private:
|
|||||||
struct {
|
struct {
|
||||||
TypingBuffer typing {};
|
TypingBuffer typing {};
|
||||||
|
|
||||||
xkb_context *xkb_ctx {};
|
xkb_context *xkb_ctx_v {};
|
||||||
xkb_keymap *xkb_keymap {};
|
xkb_keymap *xkb_keymap_v {};
|
||||||
xkb_state *xkb_state {};
|
xkb_state *xkb_state_v {};
|
||||||
|
|
||||||
std::unordered_set<u32> held;
|
std::unordered_set<u32> held;
|
||||||
std::unordered_set<u32> pressed_syms;
|
std::unordered_set<u32> pressed_syms;
|
||||||
@@ -100,11 +100,11 @@ private:
|
|||||||
|
|
||||||
auto is_down_sym(xkb_keysym_t sym) const -> bool
|
auto is_down_sym(xkb_keysym_t sym) const -> bool
|
||||||
{
|
{
|
||||||
if (!xkb_state)
|
if (!xkb_state_v)
|
||||||
return false;
|
return false;
|
||||||
for (auto k : held) {
|
for (auto k : held) {
|
||||||
if (xkb_state_key_get_one_sym(
|
if (xkb_state_key_get_one_sym(
|
||||||
xkb_state, static_cast<xkb_keycode_t>(k + 8))
|
xkb_state_v, static_cast<xkb_keycode_t>(k + 8))
|
||||||
== sym)
|
== sym)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -123,9 +123,9 @@ private:
|
|||||||
|
|
||||||
auto mod_active(char const *name) const -> bool
|
auto mod_active(char const *name) const -> bool
|
||||||
{
|
{
|
||||||
return xkb_state
|
return xkb_state_v
|
||||||
&& xkb_state_mod_name_is_active(
|
&& xkb_state_mod_name_is_active(
|
||||||
xkb_state, name, XKB_STATE_MODS_EFFECTIVE)
|
xkb_state_v, name, XKB_STATE_MODS_EFFECTIVE)
|
||||||
> 0;
|
> 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
#include "App.hpp"
|
|
||||||
|
|
||||||
#include <EGL/egl.h>
|
|
||||||
#include <GLES3/gl3.h>
|
|
||||||
#include <print>
|
|
||||||
#include <raylib.h>
|
|
||||||
#include <rlgl.h>
|
|
||||||
#include <xkbcommon/xkbcommon.h>
|
|
||||||
|
|
||||||
auto App::render_frame() -> void {
|
|
||||||
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);
|
|
||||||
|
|
||||||
for (auto const cp : m_kbd.typing) {
|
|
||||||
std::println("Char typed: {} ({}) shift={} ctrl={}", rune_to_string(cp), cp,
|
|
||||||
m_kbd.shift() ? 'y' : 'n', m_kbd.ctrl() ? 'y' : 'n');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_kbd.is_sym_pressed(XKB_KEY_Escape)) {
|
|
||||||
set_visible(!visible());
|
|
||||||
if (m_kbd.ctrl() && m_kbd.shift()) {
|
|
||||||
m_running = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(BLANK);
|
|
||||||
|
|
||||||
DrawFPS(10, 10);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
|
|
||||||
eglSwapBuffers(m_gl.edpy, m_gl.esurf);
|
|
||||||
m_kbd.typing.clear();
|
|
||||||
m_kbd.clear_transients();
|
|
||||||
}
|
|
||||||
42
src/Tick.cpp
Normal file
42
src/Tick.cpp
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#include "App.hpp"
|
||||||
|
|
||||||
|
#include <EGL/egl.h>
|
||||||
|
#include <GLES3/gl3.h>
|
||||||
|
#include <print>
|
||||||
|
#include <raylib.h>
|
||||||
|
#include <rlgl.h>
|
||||||
|
#include <xkbcommon/xkbcommon.h>
|
||||||
|
|
||||||
|
auto App::tick() -> void
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
|
||||||
|
for (auto const cp : m_kbd.typing) {
|
||||||
|
std::println("Char typed: {} ({}) shift={} ctrl={}",
|
||||||
|
rune_to_string(cp), cp, m_kbd.shift() ? 'y' : 'n',
|
||||||
|
m_kbd.ctrl() ? 'y' : 'n');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_kbd.is_sym_pressed(XKB_KEY_Escape)) {
|
||||||
|
set_visible(!visible());
|
||||||
|
if (m_kbd.ctrl() && m_kbd.shift()) {
|
||||||
|
m_running = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
ClearBackground(BLANK);
|
||||||
|
|
||||||
|
DrawFPS(10, 10);
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
|
||||||
|
eglSwapBuffers(m_gl.edpy, m_gl.esurf);
|
||||||
|
m_kbd.typing.clear();
|
||||||
|
m_kbd.clear_transients();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user