Trying ttf loading
This commit is contained in:
@@ -14,6 +14,15 @@ Element::~Element()
|
||||
{
|
||||
}
|
||||
|
||||
void Element::setParent(PElement element)
|
||||
{
|
||||
if(parent != nullptr)
|
||||
{
|
||||
parent->removeChild(this);
|
||||
}
|
||||
parent = element;
|
||||
}
|
||||
|
||||
PElement Element::getParent() const
|
||||
{
|
||||
return parent;
|
||||
@@ -24,6 +33,11 @@ void Element::addChild(PElement element)
|
||||
children.add(element);
|
||||
}
|
||||
|
||||
void Element::removeChild(PElement element)
|
||||
{
|
||||
children.remove(element, false);
|
||||
}
|
||||
|
||||
const Array<PElement> Element::getChildren()
|
||||
{
|
||||
return children;
|
||||
@@ -34,11 +48,6 @@ void Element::clear()
|
||||
children.clear();
|
||||
}
|
||||
|
||||
void Element::remove(PElement element)
|
||||
{
|
||||
children.remove(children.find(element));
|
||||
}
|
||||
|
||||
void Element::setEnabled(bool newEnabled)
|
||||
{
|
||||
enabled = newEnabled;
|
||||
|
||||
@@ -16,9 +16,9 @@ public:
|
||||
void setParent(PElement element);
|
||||
PElement getParent() const;
|
||||
void addChild(PElement element);
|
||||
void removeChild(PElement element);
|
||||
const Array<PElement> getChildren();
|
||||
void clear();
|
||||
void remove(PElement element);
|
||||
void setEnabled(bool newEnabled);
|
||||
bool isEnabled() const;
|
||||
// maybe not the healthiest inteface
|
||||
|
||||
@@ -5,18 +5,26 @@ using namespace Seele::UI;
|
||||
|
||||
void AddElementRenderHierarchyUpdate::apply(Array<RenderElement>& elements)
|
||||
{
|
||||
for(auto element : elements)
|
||||
{
|
||||
if(element.parent == parent)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
auto parentIt = elements.find([this](RenderElement e){return e.parent == parent;});
|
||||
parentIt->referencedElement->addChild(addedElement);
|
||||
addedElement->setParent(parentIt->referencedElement);
|
||||
|
||||
elements.emplace(parentIt->referencedElement, addedElement);
|
||||
}
|
||||
|
||||
void RemoveElementRenderHierarchyUpdate::apply(Array<RenderElement>& elements)
|
||||
{
|
||||
|
||||
auto elementIt = elements.find([this](RenderElement e){return e.referencedElement == element;});
|
||||
if(!removeChildren)
|
||||
{
|
||||
for(auto child : elementIt->referencedElement->getChildren())
|
||||
{
|
||||
child->setParent(elementIt->referencedElement->getParent());
|
||||
}
|
||||
}
|
||||
elementIt->referencedElement->setParent(nullptr);
|
||||
|
||||
elements.remove(elementIt);
|
||||
}
|
||||
|
||||
RenderHierarchy::RenderHierarchy()
|
||||
|
||||
@@ -1,18 +1,40 @@
|
||||
#pragma once
|
||||
#include "Elements/Element.h"
|
||||
#include "Containers/List.h"
|
||||
#include "Graphics/GraphicsResources.h"
|
||||
|
||||
namespace Seele
|
||||
{
|
||||
namespace UI
|
||||
{
|
||||
DECLARE_NAME_REF(Gfx, RenderCommand);
|
||||
struct RenderElementStyle
|
||||
{
|
||||
Vector2 position;
|
||||
Vector2 dimensions;
|
||||
Vector backgroundColor;
|
||||
uint32 backgroundImageIndex;
|
||||
Vector4 borderBottomColor;
|
||||
Vector4 borderLeftColor;
|
||||
Vector4 borderRightColor;
|
||||
Vector4 borderTopColor;
|
||||
float borderBottomLeftRadius;
|
||||
float borderBottomRightRadius;
|
||||
float borderTopLeftRadius;
|
||||
float borderTopRightRadius;
|
||||
Vector4 fontColor;
|
||||
float fontSize;
|
||||
float opacity;
|
||||
};
|
||||
static_assert(sizeof(RenderElementStyle) == 34*4);
|
||||
class RenderElement
|
||||
{
|
||||
public:
|
||||
RenderElement() = default;
|
||||
RenderElement(Element* parent, Element* referencedElement)
|
||||
: parent(parent)
|
||||
, referencedElement(referencedElement)
|
||||
{}
|
||||
~RenderElement() = default;
|
||||
uint32 hierarchyIndex;
|
||||
Element* parent;
|
||||
Element* referencedElement;
|
||||
};
|
||||
@@ -36,12 +58,13 @@ struct AddElementRenderHierarchyUpdate : public RenderHierarchyUpdate
|
||||
struct RemoveElementRenderHierarchyUpdate : public RenderHierarchyUpdate
|
||||
{
|
||||
Element* element;
|
||||
RemoveElementRenderHierarchyUpdate(Element* elementToRemove)
|
||||
bool removeChildren;
|
||||
RemoveElementRenderHierarchyUpdate(Element* elementToRemove, bool removeChildren = false)
|
||||
: element(elementToRemove)
|
||||
, removeChildren(removeChildren)
|
||||
{}
|
||||
virtual void apply(Array<RenderElement>& elements) override;
|
||||
};
|
||||
|
||||
class RenderHierarchy
|
||||
{
|
||||
public:
|
||||
@@ -58,6 +81,9 @@ private:
|
||||
static_assert(std::is_trivially_copyable_v<RenderElement>);
|
||||
// List of all drawable elements in draw order
|
||||
Array<RenderElement> drawElements;
|
||||
// Shader data used for styling elements
|
||||
Array<RenderElementStyle> elementStyles;
|
||||
Array<Gfx::PTexture> usedTextures;
|
||||
|
||||
List<RenderHierarchyUpdate*> updates;
|
||||
std::mutex updateLock;
|
||||
|
||||
Reference in New Issue
Block a user