desktop code refactoring

Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
2025-04-10 23:31:16 +02:00
parent b3bf03999b
commit 5b82cd8189
22 changed files with 163 additions and 158 deletions

42
src/ui/Device.h Normal file
View 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;
};

17
src/ui/Matrix.h Normal file
View File

@@ -0,0 +1,17 @@
#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
src/ui/UIWidget.h Normal file
View 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{};
};

View File

@@ -21,8 +21,10 @@ Button::Button(
}
void Button::render() const {
const auto button = ResourceManager::getInstance().get_texture(get_context()->renderer(), "assets/button_normal.png");
const auto overlay =ResourceManager::getInstance().get_texture(get_context()->renderer(), "assets/button_pressed_overlay.png");
const auto button = ResourceManager::getInstance().get_texture(
get_context()->renderer(), "assets/button_normal.png");
const auto overlay = ResourceManager::getInstance().get_texture(
get_context()->renderer(), "assets/button_pressed_overlay.png");
const auto dst = SDL_FRect(m_x, m_y, m_width, m_width);
SDL_RenderTexture(get_context()->renderer(), button, nullptr, &dst);

20
src/ui/widgets/Button.h Normal file
View File

@@ -0,0 +1,20 @@
#pragma once
#include "ui/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;
};

View File

@@ -1,6 +1,6 @@
#include "ui/widgets/D_Pad.h"
#include <ResourceManager.h>
#include "ResourceManager.h"
D_Pad::D_Pad(
void* appState,

19
src/ui/widgets/D_Pad.h Normal file
View File

@@ -0,0 +1,19 @@
#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;
};