215 lines
7.1 KiB
C++
215 lines
7.1 KiB
C++
|
|
/*
|
|
* Libpdraw: A Versitile GUI for use with a primitive drawing system!
|
|
* Copyright (C) 2022 Rebekah Rowe
|
|
*
|
|
* This program 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.
|
|
*
|
|
* This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <iostream>
|
|
|
|
#include "lib/xoverlay.h"
|
|
#include "libpdraw/gui/gui.hpp"
|
|
#include <embed_resources.hpp>
|
|
#include <glez/detail/render.hpp>
|
|
#include <glez/draw.hpp>
|
|
#include <glez/glez.hpp>
|
|
|
|
// xorg conflict
|
|
#undef RootWindow
|
|
|
|
#include "libpdraw/gui/widgets/slider.hpp"
|
|
#include "libpdraw/gui/widgets/titlebar.hpp"
|
|
//#include "gui/csplitcontainer.hpp"
|
|
#include "libpdraw/gui/canvas.hpp"
|
|
#include "libpdraw/gui/widgets/basebutton.hpp"
|
|
#include "libpdraw/gui/widgets/basewindow.hpp"
|
|
#include "libpdraw/gui/widgets/checkbox.hpp"
|
|
#include "libpdraw/gui/widgets/dropdown.hpp"
|
|
#include "libpdraw/gui/widgets/keyinput.hpp"
|
|
#include "libpdraw/gui/widgets/textinput.hpp"
|
|
|
|
#include "libpdraw/gui/listmenu/itemsublist.hpp"
|
|
#include "libpdraw/gui/listmenu/itemtitle.hpp"
|
|
#include "libpdraw/gui/listmenu/itemvariable.hpp"
|
|
#include "libpdraw/gui/listmenu/list.hpp"
|
|
#include "libpdraw/gui/tabbedmenu/cvarcontainer.hpp"
|
|
#include "libpdraw/gui/tabbedmenu/menucontainer.hpp"
|
|
#include "libpdraw/gui/tabbedmenu/menuwindow.hpp"
|
|
|
|
#include "input.hpp"
|
|
|
|
static ui::Var<int> text({ "nonya" }, "Editable Text", 1);
|
|
|
|
class TestWindow : public CBaseWindow {
|
|
public:
|
|
TestWindow()
|
|
: CBaseWindow("root_test", nullptr) {
|
|
this->always_visible = false;
|
|
this->hover = false;
|
|
SetMaxSize(1270, 1000);
|
|
SetPositionMode(PositionMode::FLOATING);
|
|
|
|
auto* titlebar = new CTitleBar(this, "Test uwu~");
|
|
AddChild(titlebar);
|
|
// this->visible = true;
|
|
|
|
AddChild(new CTextLabel("button_label", this, "Button widget:"));
|
|
AddChild(new CBaseButton("button", this, "I'm Clickable!", [this](CBaseButton*) {
|
|
std::cout << "Hey hey I was pressed!" << std::endl;
|
|
this->button_clicked = !this->button_clicked;
|
|
}));
|
|
|
|
AddChild(new CTextLabel("checkbox_label", this, "Checkbox widget:"));
|
|
AddChild(new CCheckbox("checkbox", this, false));
|
|
|
|
AddChild(new CTextLabel("slider_label", this, "Slider widget:"));
|
|
auto* slider = new CSlider("slider", this);
|
|
slider->SetStep(0.1f);
|
|
AddChild(slider);
|
|
|
|
AddChild(new CTextLabel("dropdown_label", this, "Dropdown widget:"));
|
|
auto dropdown = new CDropdown("dropdown", this);
|
|
dropdown->AddValue("Im the cutest princess!");
|
|
dropdown->AddValue("No I am, hmp!");
|
|
dropdown->AddValue("*doomguy noises*");
|
|
dropdown->SetSize(150, 16);
|
|
AddChild(dropdown);
|
|
|
|
AddChild(new CTextLabel("text_input_label", this, "Text input widget:"));
|
|
auto* text_input = new CTextInput("text_input", this);
|
|
text_input->SetValue("You can edit me!");
|
|
AddChild(text_input);
|
|
|
|
AddChild(new CTextLabel("key_input_label", this, "Key widget:"));
|
|
auto key_input = new CKeyInput("key_input");
|
|
key_input->SetSize(78, 10);
|
|
AddChild(key_input);
|
|
}
|
|
virtual void Update() override {
|
|
this->CBaseWindow::Update();
|
|
if (this->button_clicked)
|
|
g_pGUI->GetRootWindow()->ShowTooltip("This is an example of a very long tooltip! You can click me again to hide me from view. Thanks for using libpdraw ;)");
|
|
}
|
|
CTextInput* text_box = nullptr;
|
|
bool button_clicked = false;
|
|
};
|
|
|
|
static const std::string menu_list = R"(
|
|
"Libpdraw"
|
|
"GUI" [
|
|
"GUI Menu"
|
|
"n_gui_visible"
|
|
"Particles" [
|
|
"Particle Preferences"
|
|
"n_gui_ncc_particles_enabled"
|
|
"n_gui_ncc_particles_type"
|
|
"n_gui_ncc_particles_chance"
|
|
"n_gui_ncc_particles_pack_size"
|
|
"n_gui_ncc_particles_safe"
|
|
"n_gui_ncc_particles_gravity"
|
|
"n_gui_ncc_particles_jittering"
|
|
"n_gui_ncc_particles_wind"
|
|
"n_gui_ncc_particles_jittering_chance"
|
|
]
|
|
"Debug" [
|
|
"Debug Menu Enjoy"
|
|
"n_gui_debug_draw_bounds"
|
|
]
|
|
]
|
|
)";
|
|
|
|
int main() {
|
|
xoverlay_init();
|
|
|
|
glez::init(xoverlay_library.width, xoverlay_library.height);
|
|
|
|
{
|
|
input::RefreshInput();
|
|
xoverlay_draw_begin();
|
|
glez::begin();
|
|
|
|
g_pGUI = new CatGUI();
|
|
g_pGUI->Setup();
|
|
|
|
glez::end();
|
|
xoverlay_draw_end();
|
|
}
|
|
|
|
auto test_window = new TestWindow();
|
|
|
|
g_pGUI->m_pRootWindow->AddChild(test_window);
|
|
|
|
using namespace menu::ncc;
|
|
// auto* list_menu = List::FromString(menu_list);
|
|
auto* list_menu = new List();
|
|
list_menu->Fill(ui::BaseVar::GetList());
|
|
ItemTitle* find = nullptr;
|
|
for (auto* i : list_menu->m_children)
|
|
if ((find = dynamic_cast<ItemTitle*>(i)))
|
|
break;
|
|
if (find)
|
|
find->brackets = true;
|
|
list_menu->SetMaxSize(1000, 1000);
|
|
list_menu->Show();
|
|
g_pGUI->m_pRootWindow->AddChild(list_menu);
|
|
|
|
auto* tabbedmenu = new CMenuWindow("menu_window", g_pGUI->m_pRootWindow);
|
|
tabbedmenu->SetMaxSize(912, 410);
|
|
|
|
tabbedmenu->AddTab("aimbot", "Main");
|
|
CMenuContainer* tab = tabbedmenu->GetTab("aimbot");
|
|
tab->AddChild(new CTextLabel("label", tab, "This is a bool!", true));
|
|
tab->AddChild(new CCVarContainer(tab, &text));
|
|
tabbedmenu->AddTab("esp", "Sub");
|
|
tabbedmenu->AddTab("esp2", "Sub2");
|
|
tabbedmenu->AddTab("esp3", "Sub3");
|
|
|
|
// tabbedmenu->SetOffset((draw::width - 912) / 2, (draw::height - 410) / 2);
|
|
g_pGUI->m_pRootWindow->AddChild(tabbedmenu);
|
|
|
|
for (auto& i : ui::BaseVar::GetList())
|
|
printf("ui::BaseVar: %s\n", i->command_name.c_str());
|
|
xoverlay_show();
|
|
while (1) {
|
|
input::RefreshInput();
|
|
// Must be called in that order.
|
|
xoverlay_draw_begin();
|
|
glez::begin();
|
|
{
|
|
|
|
// glez::draw::rect(100, 300, 200, 100, glez::rgba(255, 0, 128));
|
|
// auto mouse = input::GetMouse();
|
|
// glez::draw::rect(mouse.first - 6, mouse.second - 6, 12, 12, glez::rgba(255, 0, 128));
|
|
g_pGUI->m_pRootWindow->Update();
|
|
// glez::draw::rect_textured(50, 50, 100, 100, g_pGUI->m_pRootWindow->GetColor(), dispenser, 0, 10, 40, 94, 7);
|
|
/*bool pressed = input::GetKey(CatKey::CATKEY_MOUSE_1);
|
|
if (!click) {
|
|
if (pressed) {
|
|
click = true;
|
|
auto size = test_window->GetSize();
|
|
printf("test_window size: %i, %i\n", size.first, size.second);
|
|
size = test_window->GetMaxSize();
|
|
printf("test_window max size: %i, %i\n", size.first, size.second);
|
|
}
|
|
} else if (!pressed) {
|
|
click = false;
|
|
}*/
|
|
}
|
|
glez::end();
|
|
xoverlay_draw_end();
|
|
}
|
|
return 0;
|
|
}
|