Radio button and Toggleable
This commit is contained in:
@@ -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;
|
||||
};
|
||||
}
|
||||
|
@@ -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;
|
||||
};
|
||||
}
|
23
main.cpp
23
main.cpp
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user