Switching UIFrame to sf::Color* for outline and fill members. Haven't tested with Python integration, but I wrote the methods to take a crack at it
This commit is contained in:
		
							parent
							
								
									c4d5a497d4
								
							
						
					
					
						commit
						884a49a63a
					
				
							
								
								
									
										86
									
								
								src/UI.cpp
								
								
								
								
							
							
						
						
									
										86
									
								
								src/UI.cpp
								
								
								
								
							| 
						 | 
					@ -8,12 +8,86 @@ void UIDrawable::render()
 | 
				
			||||||
    render(sf::Vector2f());
 | 
					    render(sf::Vector2f());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
UIFrame::UIFrame():
 | 
					UIFrame::UIFrame():
 | 
				
			||||||
x(0), y(0), w(0), h(0), outline(0), fillColor(0,0,0,255), outlineColor(0,0,0,0)
 | 
					x(0), y(0), w(0), h(0), outline(0)
 | 
				
			||||||
{}
 | 
					{
 | 
				
			||||||
 | 
					    pyOutlineColor = NULL;
 | 
				
			||||||
 | 
					    pyFillColor = NULL;
 | 
				
			||||||
 | 
					    _outlineColor = NULL;
 | 
				
			||||||
 | 
					    _fillColor = NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
UIFrame::UIFrame(float _x, float _y, float _w, float _h):
 | 
					UIFrame::UIFrame(float _x, float _y, float _w, float _h):
 | 
				
			||||||
x(_x), y(_y), w(_w), h(_h), outline(0), fillColor(0,0,0,255), outlineColor(0,0,0,0)
 | 
					x(_x), y(_y), w(_w), h(_h), outline(0)
 | 
				
			||||||
{}
 | 
					{
 | 
				
			||||||
 | 
					    pyOutlineColor = NULL;
 | 
				
			||||||
 | 
					    pyFillColor = NULL;
 | 
				
			||||||
 | 
					    _outlineColor = NULL;
 | 
				
			||||||
 | 
					    _fillColor = NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UIFrame::~UIFrame()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (pyOutlineColor) { Py_DECREF(pyOutlineColor); }
 | 
				
			||||||
 | 
					    else { if (_outlineColor) { delete _outlineColor; } }
 | 
				
			||||||
 | 
					    if (pyFillColor) { Py_DECREF(pyFillColor); }
 | 
				
			||||||
 | 
					    else { if (_fillColor) { delete _fillColor; } }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					    sf::Color& fillColor(); // getter
 | 
				
			||||||
 | 
					    void fillColor(sf::Color c); // C++ setter
 | 
				
			||||||
 | 
					    void fillColor(PyObject* pyColor); // Python setter
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    sf::Color& outlineColor(); // getter
 | 
				
			||||||
 | 
					    void outlineColor(sf::Color c); // C++ setter
 | 
				
			||||||
 | 
					    void outlineColor(PyObject* pyColor); // Python setter
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sf::Color UIFrame::fillColor()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (_fillColor == NULL) return sf::Color();
 | 
				
			||||||
 | 
					    return *_fillColor;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void UIFrame::fillColor(sf::Color c)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (pyFillColor) { Py_DECREF(pyFillColor); }
 | 
				
			||||||
 | 
					    else { delete _fillColor; }
 | 
				
			||||||
 | 
					    _fillColor = new sf::Color(c.r, c.g, c.b, c.a);
 | 
				
			||||||
 | 
					    pyFillColor = NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void UIFrame::fillColor(PyColorObject* pyColor)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (pyFillColor) { Py_DECREF(pyFillColor); }
 | 
				
			||||||
 | 
					    else { delete _fillColor; }
 | 
				
			||||||
 | 
					    Py_INCREF(pyColor);
 | 
				
			||||||
 | 
					    pyFillColor = pyColor;
 | 
				
			||||||
 | 
					    _fillColor = &(pyFillColor->color);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sf::Color UIFrame::outlineColor()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (_outlineColor == NULL) return sf::Color();
 | 
				
			||||||
 | 
					    return *_outlineColor;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void UIFrame::outlineColor(sf::Color c)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (pyOutlineColor) { Py_DECREF(pyOutlineColor); }
 | 
				
			||||||
 | 
					    else { delete _outlineColor; }
 | 
				
			||||||
 | 
					    _outlineColor = new sf::Color(c.r, c.g, c.b, c.a);
 | 
				
			||||||
 | 
					    pyOutlineColor = NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void UIFrame::outlineColor(PyColorObject* pyColor)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (pyOutlineColor) { Py_DECREF(pyOutlineColor); }
 | 
				
			||||||
 | 
					    else { delete _outlineColor; }
 | 
				
			||||||
 | 
					    Py_INCREF(pyColor);
 | 
				
			||||||
 | 
					    pyOutlineColor = pyColor;
 | 
				
			||||||
 | 
					    _outlineColor = &(pyOutlineColor->color);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UIFrame::render(sf::Vector2f offset)
 | 
					void UIFrame::render(sf::Vector2f offset)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -25,8 +99,8 @@ void UIFrame::render(sf::Vector2f offset)
 | 
				
			||||||
    sf::RectangleShape box = sf::RectangleShape(sf::Vector2f(w,h));
 | 
					    sf::RectangleShape box = sf::RectangleShape(sf::Vector2f(w,h));
 | 
				
			||||||
    sf::Vector2f pos = sf::Vector2f(x, y);
 | 
					    sf::Vector2f pos = sf::Vector2f(x, y);
 | 
				
			||||||
    box.setPosition(offset + pos);
 | 
					    box.setPosition(offset + pos);
 | 
				
			||||||
    box.setFillColor(fillColor);
 | 
					    if (_fillColor) { box.setFillColor(fillColor()); }
 | 
				
			||||||
    box.setOutlineColor(outlineColor);
 | 
					    if (_outlineColor) { box.setOutlineColor(outlineColor()); }
 | 
				
			||||||
    box.setOutlineThickness(outline);
 | 
					    box.setOutlineThickness(outline);
 | 
				
			||||||
    Resources::game->getWindow().draw(box);
 | 
					    Resources::game->getWindow().draw(box);
 | 
				
			||||||
    for (auto drawable : children) {
 | 
					    for (auto drawable : children) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								src/UI.h
								
								
								
								
							
							
						
						
									
										26
									
								
								src/UI.h
								
								
								
								
							| 
						 | 
					@ -14,19 +14,38 @@ public:
 | 
				
			||||||
    std::string action;
 | 
					    std::string action;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//PyColorObject struct required to embed Python colors into UIFrame
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					    PyObject_HEAD
 | 
				
			||||||
 | 
					    sf::Color color;
 | 
				
			||||||
 | 
					} PyColorObject;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class UIFrame: public UIDrawable
 | 
					class UIFrame: public UIDrawable
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    UIFrame(float, float, float, float);
 | 
					    UIFrame(float, float, float, float);
 | 
				
			||||||
    UIFrame();
 | 
					    UIFrame();
 | 
				
			||||||
 | 
					    ~UIFrame();
 | 
				
			||||||
    //sf::RectangleShape box;
 | 
					    //sf::RectangleShape box;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Simulate RectangleShape
 | 
					    //Simulate RectangleShape
 | 
				
			||||||
    sf::Color fillColor, outlineColor;
 | 
					 | 
				
			||||||
    float x, y, w, h, outline;
 | 
					    float x, y, w, h, outline;
 | 
				
			||||||
    std::vector<UIDrawable*> children;
 | 
					    std::vector<UIDrawable*> children;
 | 
				
			||||||
    void render(sf::Vector2f) override final;
 | 
					    void render(sf::Vector2f) override final;
 | 
				
			||||||
    void move(sf::Vector2f);
 | 
					    void move(sf::Vector2f);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    sf::Color fillColor(); // getter
 | 
				
			||||||
 | 
					    void fillColor(sf::Color c); // C++ setter
 | 
				
			||||||
 | 
					    void fillColor(PyColorObject* pyColor); // Python setter
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    sf::Color outlineColor(); // getter
 | 
				
			||||||
 | 
					    void outlineColor(sf::Color c); // C++ setter
 | 
				
			||||||
 | 
					    void outlineColor(PyColorObject* pyColor); // Python setter
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    sf::Color *_fillColor, *_outlineColor;
 | 
				
			||||||
 | 
					    PyColorObject *pyFillColor, *pyOutlineColor;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class UICaption: public UIDrawable
 | 
					class UICaption: public UIDrawable
 | 
				
			||||||
| 
						 | 
					@ -49,10 +68,7 @@ namespace mcrfpydef {
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // Color Definitions
 | 
					    // Color Definitions
 | 
				
			||||||
    // struct, members, new, set_member, PyTypeObject
 | 
					    // struct, members, new, set_member, PyTypeObject
 | 
				
			||||||
    typedef struct {
 | 
					
 | 
				
			||||||
        PyObject_HEAD
 | 
					 | 
				
			||||||
        sf::Color color;
 | 
					 | 
				
			||||||
    } PyColorObject;
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    static PyMemberDef PyColor_members[]
 | 
					    static PyMemberDef PyColor_members[]
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,20 +18,20 @@ UITestScene::UITestScene(GameEngine* g) : Scene(g)
 | 
				
			||||||
        //e1.box.setPosition(100, 150);
 | 
					        //e1.box.setPosition(100, 150);
 | 
				
			||||||
        //e1.box.setSize(sf::Vector2f(400,400));
 | 
					        //e1.box.setSize(sf::Vector2f(400,400));
 | 
				
			||||||
        //e1.box.setFillColor(sf::Color(255, 0, 0));
 | 
					        //e1.box.setFillColor(sf::Color(255, 0, 0));
 | 
				
			||||||
    e1.fillColor = sf::Color(255,0,0);
 | 
					    e1.fillColor(sf::Color(255,0,0));
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    e1a = UIFrame(50,50,200,200);
 | 
					    e1a = UIFrame(50,50,200,200);
 | 
				
			||||||
        //e1a.box.setPosition(50, 50);
 | 
					        //e1a.box.setPosition(50, 50);
 | 
				
			||||||
        //e1a.box.setSize(sf::Vector2f(200,200));
 | 
					        //e1a.box.setSize(sf::Vector2f(200,200));
 | 
				
			||||||
        //e1a.box.setFillColor(sf::Color(0, 255, 0));
 | 
					        //e1a.box.setFillColor(sf::Color(0, 255, 0));
 | 
				
			||||||
    e1a.fillColor = sf::Color(0, 255, 0);
 | 
					    e1a.fillColor(sf::Color(0, 255, 0));
 | 
				
			||||||
    e1.children.push_back(&e1a);
 | 
					    e1.children.push_back(&e1a);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    e1aa = UIFrame(5,5,100,100);
 | 
					    e1aa = UIFrame(5,5,100,100);
 | 
				
			||||||
        //e1aa.box.setPosition(5, 5);
 | 
					        //e1aa.box.setPosition(5, 5);
 | 
				
			||||||
        //e1aa.box.setSize(sf::Vector2f(100,100));
 | 
					        //e1aa.box.setSize(sf::Vector2f(100,100));
 | 
				
			||||||
        //e1aa.box.setFillColor(sf::Color(0, 0, 255));
 | 
					        //e1aa.box.setFillColor(sf::Color(0, 0, 255));
 | 
				
			||||||
    e1aa.fillColor = sf::Color(0, 0, 255);  
 | 
					    e1aa.fillColor(sf::Color(0, 0, 255));  
 | 
				
			||||||
    e1a.children.push_back(&e1aa);
 | 
					    e1a.children.push_back(&e1aa);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    e2 = UICaption();
 | 
					    e2 = UICaption();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue