From 7465b18ae83b3a962b23b4544690563122044a31 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 30 Jun 2023 20:19:26 +0200 Subject: [PATCH] add rendering routines for devices --- gui/CMakeLists.txt | 4 +++- gui/include/DeviceRenderer.hpp | 20 ++++++++++++++++++++ gui/include/NetworkRenderer.hpp | 17 +++++++++++++++++ gui/src/DeviceRenderer.cpp | 26 ++++++++++++++++++++++++++ gui/src/NetworkRenderer.cpp | 19 +++++++++++++++++++ gui/src/main.cpp | 9 ++++++++- 6 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 gui/include/DeviceRenderer.hpp create mode 100644 gui/include/NetworkRenderer.hpp create mode 100644 gui/src/DeviceRenderer.cpp create mode 100644 gui/src/NetworkRenderer.cpp diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 37de521..5369158 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -3,10 +3,12 @@ add_subdirectory(3rdparty/imgui) add_executable(netsim "src/main.cpp" + "src/NetworkRenderer.cpp" + "src/DeviceRenderer.cpp" ) target_sources(netsim PRIVATE ${IMGUI_SOURCES}) -target_include_directories(netsim PRIVATE ${IMGUI_INCLUDE_DIR}) +target_include_directories(netsim PRIVATE ${IMGUI_INCLUDE_DIR} include) target_link_libraries(netsim PRIVATE libnetsim diff --git a/gui/include/DeviceRenderer.hpp b/gui/include/DeviceRenderer.hpp new file mode 100644 index 0000000..f835396 --- /dev/null +++ b/gui/include/DeviceRenderer.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include "Device.hpp" + +struct SDL_Renderer; + +class DeviceRenderer { +public: + DeviceRenderer(std::shared_ptr device, uint16_t x, uint16_t y); + + void Render(SDL_Renderer* renderer) const; + void Deselect(); + +private: + SDL_FRect bbox; + bool selected; + std::shared_ptr device; +}; \ No newline at end of file diff --git a/gui/include/NetworkRenderer.hpp b/gui/include/NetworkRenderer.hpp new file mode 100644 index 0000000..9d274f8 --- /dev/null +++ b/gui/include/NetworkRenderer.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include +#include "Network.hpp" +#include "DeviceRenderer.hpp" + +class NetworkRenderer { +public: + NetworkRenderer(Network& network); + + void AddDevice(std::shared_ptr device, uint16_t x, uint16_t y); + void Render(SDL_Renderer* renderer) const; + +private: + Network& network; + std::vector devices; +}; \ No newline at end of file diff --git a/gui/src/DeviceRenderer.cpp b/gui/src/DeviceRenderer.cpp new file mode 100644 index 0000000..5c95fee --- /dev/null +++ b/gui/src/DeviceRenderer.cpp @@ -0,0 +1,26 @@ +#include "DeviceRenderer.hpp" + +#include + +DeviceRenderer::DeviceRenderer(std::shared_ptr device, uint16_t x, uint16_t y) : + device(device), selected(false) +{ + bbox.x = x; + bbox.y = y; + bbox.w = 50; + bbox.h = 50; +} + +void DeviceRenderer::Deselect() { + selected = false; +} + +void DeviceRenderer::Render(SDL_Renderer* renderer) const { + SDL_SetRenderDrawColor(renderer, 150, 150, 150, 255); + SDL_RenderFillRect(renderer, &bbox); + + if (selected) { + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDL_RenderRect(renderer, &bbox); + } +} \ No newline at end of file diff --git a/gui/src/NetworkRenderer.cpp b/gui/src/NetworkRenderer.cpp new file mode 100644 index 0000000..6723e35 --- /dev/null +++ b/gui/src/NetworkRenderer.cpp @@ -0,0 +1,19 @@ +#include "NetworkRenderer.hpp" + +#include "DeviceRenderer.hpp" + +NetworkRenderer::NetworkRenderer(Network& network) : + network(network) +{ + +} + +void NetworkRenderer::AddDevice(std::shared_ptr device, uint16_t x, uint16_t y) { + devices.push_back(DeviceRenderer(device, x, y)); +} + +void NetworkRenderer::Render(SDL_Renderer* renderer) const { + for (const DeviceRenderer& device : devices) { + device.Render(renderer); + } +} \ No newline at end of file diff --git a/gui/src/main.cpp b/gui/src/main.cpp index a4311a0..a858a89 100644 --- a/gui/src/main.cpp +++ b/gui/src/main.cpp @@ -6,6 +6,7 @@ #include "imgui_impl_sdlrenderer3.h" #include "Netsim.hpp" +#include "NetworkRenderer.hpp" int main(int argc, char** argv) { SDL_Init(SDL_INIT_VIDEO); @@ -27,6 +28,7 @@ int main(int argc, char** argv) { ImGui::StyleColorsDark(); Network network("Testnet"); + NetworkRenderer networkRenderer(network); bool shouldClose = false; SDL_Event event; @@ -46,6 +48,8 @@ int main(int argc, char** argv) { SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); + networkRenderer.Render(renderer); + ImGui_ImplSDL3_NewFrame(); ImGui_ImplSDLRenderer3_NewFrame(); ImGui::NewFrame(); @@ -54,7 +58,10 @@ int main(int argc, char** argv) { if (ImGui::BeginMenu("New...")) { if (ImGui::MenuItem("Host")) { - network.addDevice(Device::create("12:34:56:78:9A:BC")); + auto device = Device::create("12:34:56:78:9A:BC"); + + network.addDevice(device); + networkRenderer.AddDevice(device, 400, 400); }; ImGui::EndMenu();