Radio button and Toggleable

This commit is contained in:
2024-07-31 18:53:43 -04:00
parent 58d0eb0f74
commit 9c86b3036b
4 changed files with 85 additions and 24 deletions

View File

@@ -309,4 +309,31 @@ namespace JUI
bool clicked = false;
bool click_debounce = false;
};
class Toggleable {
public:
Event<> OnToggleEvent;
Event<> OnToggleOnEvent;
Event<> OnToggleOffEvent;
public:
virtual void OnToggleOn() {
OnToggleOnEvent.Invoke();
}
virtual void OnToggleOff() {
OnToggleOffEvent.Invoke();
}
virtual void Update() {
OnToggleEvent.Invoke();
toggled = !toggled;
if (toggled) {
OnToggleOn();
} else {
OnToggleOff();
}
}
protected:
bool toggled = false;
};
}

View File

@@ -14,9 +14,23 @@
namespace JUI
{
class RadioButton : public Button
class RadioButton : public Button, public Toggleable
{
//public:
//Event<> OnToggleOnEvent;
//Event<> OnToggleOffEvent;
public:
RadioButton();
explicit RadioButton(Widget* parent);
~RadioButton() override {};
public:
//virtual void OnToggleOn();
//virtual void OnToggleOff();
void OnClick(const J3ML::LinearAlgebra::Vector2 &mouse_pos, const JUI::MouseBtn &btn) override;
//void OnRelease(const J3ML::LinearAlgebra::Vector2 &mouse_pos, const JUI::MouseBtn &bnt,
// bool still_hovering) override;
void Update(float delta) override;
protected:
//bool toggle = false;
};
}

View File

@@ -12,7 +12,7 @@
#include <iostream>
#include <JGL/JGL.h>
#include "JUI/Widgets/Rect.hpp"
#include "JUI/Widgets/Button.hpp"
#include "JUI/Widgets/RadioButton.hpp"
#include "JUI/Widgets/Window.hpp"
#include "JUI/Widgets/Scene.hpp"
#include "JUI/Widgets/Text.hpp"
@@ -25,10 +25,10 @@ JUI::Scene* scene;
JUI::Scene* CreateScene() {
using namespace JUI;
Scene* root = new Scene();
Scene *root = new Scene();
// Rect //
Rect* rect_element = new Rect(root);
Rect *rect_element = new Rect(root);
rect_element->SetName("JimBob");
//Rect* element = new Rect(root);
@@ -42,16 +42,16 @@ JUI::Scene* CreateScene() {
rect_element->BorderColor({255, 255, 255});
rect_element->SetBorderWidth(2.f);
rect_element->MouseEnter += [rect_element] (auto coords) {
rect_element->MouseEnter += [rect_element](auto coords) {
DEBUG("Hello I am the rect please give me money")
rect_element->BGColor({0, 128, 0});
};
rect_element->MouseExit += [rect_element] (auto coords) {
rect_element->MouseExit += [rect_element](auto coords) {
rect_element->BGColor({0, 64, 0});
};
Text* text = new Text(rect_element);
Text *text = new Text(rect_element);
text->SetContent("YO MAMA");
text->SetFont(FreeSans);
text->SetTextSize(48);
@@ -60,9 +60,9 @@ JUI::Scene* CreateScene() {
// Button //
Button* button_element = new Button(root);
RadioButton *button_element = new RadioButton(root);
button_element->SetName("BobJim");
button_element->BGColor({0,0,64});
button_element->BGColor({0, 0, 64});
button_element->SetSize({0, 0, 0.1f, 0.1f});
button_element->SetClipsDescendants(true);
button_element->BorderColor({255, 255, 255});
@@ -70,11 +70,12 @@ JUI::Scene* CreateScene() {
auto bpos = rect_element->GetSize();
DEBUG(std::format("Just testing shit {} {}", bpos.X.Scale, bpos.Y.Scale));
//exit(1);
button_element->SetPosition({bpos.X.Pixels, bpos.Y.Pixels, bpos.X.Scale - 0.2f, 0}); // I don't know how to use sx and sy - maxine
button_element->OnClickEvent += [rect_element] (Vector2 MouseCoords, JUI::MouseBtn mbtn) {
button_element->SetPosition(
{bpos.X.Pixels, bpos.Y.Pixels, bpos.X.Scale - 0.2f, 0}); // I don't know how to use sx and sy - maxine
button_element->OnToggleOnEvent += [rect_element] () {
rect_element->BGColor({64, 0, 0});
};
button_element->OnReleaseEvent += [rect_element] (Vector2 MouseCoords, JUI::MouseBtn mbtn, bool MouseStillOver) {
button_element->OnToggleOffEvent += [rect_element] () {
rect_element->BGColor({0, 64, 0});
};
Text* btntext = new Text(button_element);

View File

@@ -3,19 +3,38 @@
namespace JUI
{
RadioButton::RadioButton() : Button(), Toggleable() {}
RadioButton::RadioButton(Widget* parent) : RadioButton() {
this->SetParent(parent);
}
/*
void RadioButton::OnToggleOn() {
OnToggleOnEvent.Invoke();
}
void RadioButton::OnToggleOff() {
OnToggleOffEvent.Invoke();
}
*/
void RadioButton::OnClick(const J3ML::LinearAlgebra::Vector2 &mouse_pos, const JUI::MouseBtn &btn) {
Button::OnClick(mouse_pos, btn);
Toggleable::Update();
/*
toggle = !toggle;
if (toggle) {
OnToggleOn();
} else {
OnToggleOff();
}
*/
}
void RadioButton::Update(float delta)
{
// TODO: Shove this into RadioButton
/*if (hover_debounce && (mbtn == JUI::MouseBtn::Left && mb_state == true && prev_mb_state != true)) {
clicked = true;
if (!click_debounce) {
OnClick(last_known_mouse_pos, mbtn);
click_debounce = true;
} else {
OnRelease(last_known_mouse_pos, mbtn, mb_state);
click_debounce = false;
}
}*/
Button::Update(delta);
}
}