/*
OmniaFramework - A collection of useful functionality
Copyright (C) 2025 OmniaX-Dev
This file is part of OmniaFramework.
OmniaFramework is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OmniaFramework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OmniaFramework. If not, see .
*/
#pragma once
#include
namespace ogfx
{
namespace gui
{
class ContextMenu : public Rectangle
{
public: struct Entry
{
inline Entry(const String& t, const stdvec& sub = {}) { text = t; }
String text { "" };
stdvec submenus;
private:
Vec2 size;
void update_size(BasicRenderer2D& gfx, i32 fontSize);
friend class ContextMenu;
};
public: struct Instance
{
stdvec entries;
};
public:
inline ContextMenu(WindowCore& window) : m_window(window) { create(); }
ContextMenu& create(void);
void draw(BasicRenderer2D& gfx);
void onMouseReleased(const Event& event);
void onMouseMoved(const Event& event);
void show(void);
void show(const Vec2& pos);
void hide(void);
void setInstance(const Instance& instance);
void setFontSize(i32 size);
inline bool isVisible(void) const { return m_visible; }
inline i32 getFontSize(void) const { return m_fontSize; }
private:
void update_size(void);
private:
WindowCore& m_window;
bool m_visible { false };
Instance m_data;
f32 m_entryHeight { 0 };
Rectangle m_padding { 10, 10, 10, 10 };
Vec2 m_mousePos;
i32 m_fontSize { 18 };
friend class Instance;
};
}
}