From 6624db873c91087bc1805b9d018c92c455b85190 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 1 Aug 2024 18:38:06 +0200 Subject: Move dropdown button text and icon code to dropdown button class --- include/GsrInfo.hpp | 66 ++++++++++++++++++++++++++++++++++++++++++ include/Theme.hpp | 18 ++++++++++++ include/gui/DropdownButton.hpp | 54 ++++++++++++++++++++++++++++++++++ include/gui/Utils.hpp | 13 +++++++++ 4 files changed, 151 insertions(+) create mode 100644 include/GsrInfo.hpp create mode 100644 include/Theme.hpp create mode 100644 include/gui/DropdownButton.hpp create mode 100644 include/gui/Utils.hpp (limited to 'include') diff --git a/include/GsrInfo.hpp b/include/GsrInfo.hpp new file mode 100644 index 0000000..e029919 --- /dev/null +++ b/include/GsrInfo.hpp @@ -0,0 +1,66 @@ +#pragma once + +#include +#include + +#include + +namespace gsr { + struct SupportedVideoCodecs { + bool h264 = false; + bool hevc = false; + bool av1 = false; + bool vp8 = false; + bool vp9 = false; + }; + + struct GsrMonitor { + std::string name; + mgl::vec2i size; + }; + + struct SupportedCaptureOptions { + bool window = false; + bool focused = false; + bool screen = false; + bool portal = false; + std::vector monitors; + }; + + enum class DisplayServer { + UNKNOWN, + X11, + WAYLAND + }; + + struct SystemInfo { + DisplayServer display_server = DisplayServer::UNKNOWN; + }; + + enum class GpuVendor { + UNKNOWN, + AMD, + INTEL, + NVIDIA + }; + + struct GpuInfo { + GpuVendor vendor = GpuVendor::UNKNOWN; + }; + + struct GsrInfo { + SystemInfo system_info; + GpuInfo gpu_info; + SupportedVideoCodecs supported_video_codecs; + SupportedCaptureOptions supported_capture_options; + }; + + enum class GsrInfoExitStatus { + OK, + FAILED_TO_RUN_COMMAND, + OPENGL_FAILED, + NO_DRM_CARD + }; + + GsrInfoExitStatus get_gpu_screen_recorder_info(GsrInfo *gsr_info); +} \ No newline at end of file diff --git a/include/Theme.hpp b/include/Theme.hpp new file mode 100644 index 0000000..182d264 --- /dev/null +++ b/include/Theme.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +namespace gsr { + struct GsrInfo; + + struct Theme { + Theme() = default; + Theme(const Theme&) = delete; + Theme& operator=(const Theme&) = delete; + + mgl::Color tint_color = mgl::Color(118, 185, 0); + }; + + void init_theme(const gsr::GsrInfo &gsr_info); + const Theme& get_theme(); +} \ No newline at end of file diff --git a/include/gui/DropdownButton.hpp b/include/gui/DropdownButton.hpp new file mode 100644 index 0000000..bcf769c --- /dev/null +++ b/include/gui/DropdownButton.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include "Widget.hpp" +#include +#include +#include +#include +#include + +namespace gsr { + class DropdownButton : public Widget { + public: + DropdownButton(mgl::Font *title_font, mgl::Font *description_font, const char *title, const char *description_activated, const char *description_deactivated, mgl::Texture *icon_texture, mgl::vec2f size); + DropdownButton(const DropdownButton&) = delete; + DropdownButton& operator=(const DropdownButton&) = delete; + + bool on_event(mgl::Event &event, mgl::Window &window) override; + void draw(mgl::Window &window) override; + + void add_item(const std::string &text, const std::string &id); + void set_item_label(const std::string &id, const std::string &new_label); + + void set_activated(bool activated); + + mgl::vec2f get_size(); + + std::function on_click; + private: + void update_if_dirty(); + private: + struct Item { + mgl::Text text; + std::string id; + }; + + std::vector items; + mgl::Font *title_font; + mgl::Font *description_font; + mgl::vec2f size; + bool mouse_inside = false; + bool show_dropdown = false; + bool dirty = true; + mgl::vec2f max_size; + int mouse_inside_item = -1; + + mgl::Text title; + mgl::Text description; + mgl::Sprite icon_sprite; + + std::string description_activated; + std::string description_deactivated; + bool activated = false; + }; +} \ No newline at end of file diff --git a/include/gui/Utils.hpp b/include/gui/Utils.hpp new file mode 100644 index 0000000..fe5ee49 --- /dev/null +++ b/include/gui/Utils.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +namespace mgl { + class Window; +} + +namespace gsr { + // Inner border + void draw_rectangle_outline(mgl::Window &window, mgl::vec2f pos, mgl::vec2f size, mgl::Color color, float border_size); +} \ No newline at end of file -- cgit v1.2.3