Trying ttf loading

This commit is contained in:
Dynamitos
2022-04-13 13:01:46 +02:00
parent bebfb94752
commit 3fec36295a
42 changed files with 563 additions and 549 deletions
+14 -5
View File
@@ -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;
+1 -1
View File
@@ -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
+16 -8
View File
@@ -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()
+30 -4
View File
@@ -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;