forked from NaiJi/project-kyoku
Implement widget and button
This commit is contained in:
parent
92fd5c0c27
commit
686107b215
|
@ -0,0 +1,48 @@
|
|||
#include "button.h"
|
||||
|
||||
Button::Button(const std::string &text)
|
||||
{
|
||||
_button_text.setString(text);
|
||||
_button_text.setFillColor(sf::Color::Black);
|
||||
_button_content.setFillColor(sf::Color::White);
|
||||
}
|
||||
|
||||
void Button::input(const sf::Event& event)
|
||||
{
|
||||
switch (event.type)
|
||||
{
|
||||
case sf::Event::MouseButtonPressed:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Button::update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Button::draw(sf::RenderTarget& target, sf::RenderStates states) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Button::setRect(const sf::IntRect& rect)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Button::setPosition(const sf::Vector2f& position)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Button::setText(const std::string& text)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Button::setCallback(std::function<void(void)> callback)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
|
||||
#include "widget.h"
|
||||
#include <functional>
|
||||
#include <SFML/Graphics/RectangleShape.hpp>
|
||||
#include <SFML/Graphics/Text.hpp>
|
||||
|
||||
class Button : public Widget
|
||||
{
|
||||
public:
|
||||
Button(const std::string& text);
|
||||
|
||||
virtual void input(const sf::Event& event) override;
|
||||
virtual void update() override;
|
||||
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const override;
|
||||
virtual void setRect(const sf::IntRect& rect) override;
|
||||
virtual void setPosition(const sf::Vector2f& position) override;
|
||||
|
||||
void setText(const std::string& text);
|
||||
void setCallback(std::function<void(void)> callback);
|
||||
|
||||
private:
|
||||
sf::RectangleShape _button_content;
|
||||
sf::Text _button_text;
|
||||
};
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
#include "widget.h"
|
||||
|
||||
Widget::Widget(const std::shared_ptr<Widget>& parent) :
|
||||
_parent(parent)
|
||||
{
|
||||
if (_parent)
|
||||
_parent->addChild(shared_from_this());
|
||||
}
|
||||
|
||||
void Widget::addChild(const std::shared_ptr<Widget> &child)
|
||||
{
|
||||
_children.emplace_back(child);
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include <SFML/Window/Event.hpp>
|
||||
#include <SFML/Graphics/Drawable.hpp>
|
||||
|
||||
class Widget : public sf::Drawable, std::enable_shared_from_this<Widget>
|
||||
{
|
||||
public:
|
||||
Widget(const std::shared_ptr<Widget>& parent = nullptr);
|
||||
|
||||
virtual ~Widget() = default;
|
||||
|
||||
virtual void input(const sf::Event& event) = 0;
|
||||
virtual void update() = 0;
|
||||
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const = 0;
|
||||
virtual void setRect(const sf::FloatRect& rect) = 0;
|
||||
virtual void setPosition(const sf::Vector2f& position) = 0;
|
||||
|
||||
protected:
|
||||
void addChild(const std::shared_ptr<Widget>& child);
|
||||
|
||||
std::vector<std::shared_ptr<Widget>> _children;
|
||||
const std::shared_ptr<Widget> _parent;
|
||||
};
|
||||
|
Loading…
Reference in New Issue