combine with desktop project
Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
5
include/Common.h
Normal file
5
include/Common.h
Normal file
@@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include "model/Window.h"
|
||||
|
||||
auto createWindow(const char *title, int width, int height) -> Window *;
|
27
include/ResourceManager.h
Normal file
27
include/ResourceManager.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
#include <mutex>
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
class ResourceManager {
|
||||
public:
|
||||
static ResourceManager& getInstance();
|
||||
|
||||
ResourceManager(const ResourceManager&) = delete;
|
||||
ResourceManager& operator=(const ResourceManager&) = delete;
|
||||
ResourceManager(ResourceManager&&) = delete;
|
||||
ResourceManager& operator=(ResourceManager&&) = delete;
|
||||
|
||||
~ResourceManager();
|
||||
|
||||
SDL_Texture* get_texture(SDL_Renderer* renderer, const std::string& path);
|
||||
|
||||
private:
|
||||
ResourceManager();
|
||||
|
||||
std::unordered_map<std::string, SDL_Texture*> m_textures;
|
||||
|
||||
mutable std::mutex m_mutex;
|
||||
};
|
7
include/Version.h.in
Normal file
7
include/Version.h.in
Normal file
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#define MY_VERSION "@PROJECT_VERSION@"
|
||||
#define MY_PROJECT "@PROJECT_NAME@"
|
||||
#define MY_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
|
||||
#define MY_VERSION_MINOR @PROJECT_VERSION_MINOR@
|
||||
#define MY_VERSION_PATCH @PROJECT_VERSION_PATCH@
|
19
include/debug/DebugOverlay.h
Normal file
19
include/debug/DebugOverlay.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include "../model/AppContext.h"
|
||||
|
||||
namespace DebugOverlay {
|
||||
inline bool show_debug_window = false;
|
||||
inline bool show_unhandled_events = false;
|
||||
inline bool show_led_matrix = true;
|
||||
|
||||
void init(const AppContext *context);
|
||||
|
||||
void update(AppContext *context, const SDL_Event *event);
|
||||
|
||||
void render(const AppContext *context);
|
||||
|
||||
void cleanup();
|
||||
}
|
11
include/hal/u8g2_hal_sdl.h
Normal file
11
include/hal/u8g2_hal_sdl.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "u8g2.h"
|
||||
|
||||
#define U8G2_SCREEN_WIDTH (128)
|
||||
#define U8G2_SCREEN_HEIGHT (64)
|
||||
#define U8G2_SCREEN_FACTOR (3)
|
||||
#define U8G2_SCREEN_PADDING (25)
|
||||
|
||||
uint8_t u8x8_byte_sdl_hw_spi(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_ptr);
|
||||
uint8_t u8x8_gpio_and_delay_sdl(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_ptr);
|
44
include/model/AppContext.h
Normal file
44
include/model/AppContext.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#pragma once
|
||||
|
||||
#include "SDL3_ttf/SDL_ttf.h"
|
||||
#include "Window.h"
|
||||
|
||||
class Matrix;
|
||||
|
||||
class AppContext {
|
||||
public:
|
||||
explicit AppContext(const Window *window) : m_window(window) {
|
||||
m_font_default = TTF_OpenFont(
|
||||
"assets/haxrcorp-4089.otf", 21);
|
||||
m_font_text = TTF_OpenFont(
|
||||
"assets/Helvetica-Bold.otf", 21);
|
||||
}
|
||||
|
||||
~AppContext() {
|
||||
TTF_CloseFont(m_font_default);
|
||||
TTF_CloseFont(m_font_text);
|
||||
}
|
||||
|
||||
[[nodiscard]] auto window() const -> SDL_Window *;
|
||||
|
||||
[[nodiscard]] auto renderer() const -> SDL_Renderer *;
|
||||
|
||||
[[nodiscard]] auto surface() const -> SDL_Surface *;
|
||||
|
||||
void setMatrix(Matrix *matrix);
|
||||
|
||||
[[nodiscard]] auto matrix() const -> Matrix *;
|
||||
|
||||
[[nodiscard]] auto matrix_window() const -> SDL_Window *;
|
||||
|
||||
[[nodiscard]] auto matrix_renderer() const -> SDL_Renderer *;
|
||||
|
||||
void matrix_render() const;
|
||||
|
||||
TTF_Font *m_font_default = nullptr;
|
||||
|
||||
private:
|
||||
const Window *m_window;
|
||||
Matrix *m_matrix = nullptr;
|
||||
TTF_Font *m_font_text = nullptr;
|
||||
};
|
17
include/model/Window.h
Normal file
17
include/model/Window.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "SDL3/SDL.h"
|
||||
|
||||
class Window {
|
||||
public:
|
||||
explicit Window(SDL_Window* window)
|
||||
: m_window(window) {
|
||||
}
|
||||
|
||||
[[nodiscard]] auto window() const -> SDL_Window*;
|
||||
|
||||
[[nodiscard]] auto renderer() const -> SDL_Renderer *;
|
||||
|
||||
private:
|
||||
SDL_Window* m_window = nullptr;
|
||||
};
|
42
include/ui/Device.h
Normal file
42
include/ui/Device.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "UIWidget.h"
|
||||
#include "../model/AppContext.h"
|
||||
#include "common/Widget.h"
|
||||
|
||||
class Device final : public UIWidget {
|
||||
public:
|
||||
explicit Device(void* appstate);
|
||||
|
||||
void render() const override;
|
||||
|
||||
void hit_test(SDL_MouseMotionEvent* event) const;
|
||||
|
||||
void onButtonClicked(uint8_t button) const;
|
||||
|
||||
private:
|
||||
void draw_background() const;
|
||||
|
||||
void draw_screen() const;
|
||||
|
||||
void draw_text() const;
|
||||
|
||||
void render_u8g2() const;
|
||||
|
||||
void setScreen(const std::shared_ptr<Widget>& screen);
|
||||
|
||||
void pushScreen(const std::shared_ptr<Widget>& screen);
|
||||
|
||||
void popScreen();
|
||||
|
||||
static void pushKey(SDL_Keycode key);
|
||||
|
||||
std::vector<std::shared_ptr<UIWidget>> m_children{};
|
||||
|
||||
std::shared_ptr<Widget> widget;
|
||||
std::vector<std::shared_ptr<Widget>> history;
|
||||
};
|
16
include/ui/Matrix.h
Normal file
16
include/ui/Matrix.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
#include "../model/Window.h"
|
||||
|
||||
class Matrix {
|
||||
public:
|
||||
explicit Matrix(Window *window);
|
||||
|
||||
[[nodiscard]] Window *window() const;
|
||||
|
||||
void render() const;
|
||||
|
||||
private:
|
||||
void draw_colored_grid(int rows, int cols, float cellSize, float spacing) const;
|
||||
|
||||
Window *m_window;
|
||||
};
|
17
include/ui/UIWidget.h
Normal file
17
include/ui/UIWidget.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "../model/AppContext.h"
|
||||
|
||||
class UIWidget {
|
||||
public:
|
||||
explicit UIWidget(void *appstate);
|
||||
|
||||
virtual ~UIWidget();
|
||||
|
||||
virtual void render() const = 0;
|
||||
|
||||
[[nodiscard]] AppContext *get_context() const;
|
||||
|
||||
private:
|
||||
AppContext *m_context{};
|
||||
};
|
20
include/ui/widgets/Button.h
Normal file
20
include/ui/widgets/Button.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "../UIWidget.h"
|
||||
|
||||
#include <functional>
|
||||
|
||||
#define BUTTON_WIDTH (35)
|
||||
|
||||
class Button final : public UIWidget {
|
||||
public:
|
||||
Button(void* appState, float x, float y, float width, std::function<void()> callback);
|
||||
|
||||
void render() const override;
|
||||
|
||||
private:
|
||||
float m_x;
|
||||
float m_y;
|
||||
float m_width;
|
||||
std::function<void()> m_callback;
|
||||
};
|
20
include/ui/widgets/D_Pad.h
Normal file
20
include/ui/widgets/D_Pad.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "functional"
|
||||
|
||||
#include "ui/UIWidget.h"
|
||||
|
||||
#define DPAD_WIDTH (105)
|
||||
|
||||
class D_Pad final : public UIWidget {
|
||||
public:
|
||||
D_Pad(void* appState, float x, float y, float width, std::function<void(int)> callback);
|
||||
|
||||
void render() const override;
|
||||
|
||||
private:
|
||||
float m_x;
|
||||
float m_y;
|
||||
float m_width;
|
||||
std::function<void(int)> m_callback;
|
||||
};
|
Reference in New Issue
Block a user