Convert visual layers to scene nodes.

This commit is contained in:
James Grogan 2022-11-16 15:06:08 +00:00
parent 798cb365d7
commit 3e53bd9e00
64 changed files with 863 additions and 551 deletions

View file

@ -6,16 +6,14 @@
#include "MeshPrimitives.h"
#include "FontItem.h"
#include "SceneText.h"
#include "Color.h"
TextNode::TextNode(const std::string& content, const DiscretePoint& loc)
: AbstractVisualNode(loc)
: MaterialNode(loc)
{
mTextData.mContent = content;
mTextData.mFont = FontItem("Arial", 16);
mTextData.mLocation = loc;
mTextData.mFillColor = Color(255, 255, 255);
mTextData.mStrokeColor = Color(0, 0, 0);
mContent= content;
}
TextNode::~TextNode()
@ -28,15 +26,6 @@ std::unique_ptr<TextNode> TextNode::Create(const std::string& content, const Dis
return std::make_unique<TextNode>(content, loc);
}
const Color& TextNode::getFillColor() const
{
return mTextData.mFillColor;
}
const Color& TextNode::getStrokeColor() const
{
return mTextData.mStrokeColor;
}
std::string TextNode::getFontLabel() const
{
return {};
@ -44,41 +33,40 @@ std::string TextNode::getFontLabel() const
std::string TextNode::getContent() const
{
return mTextData.mContent;
return mContent;
}
void TextNode::setContent(const std::string& content)
{
mTextData.mContent = content;
if (mContent != content)
{
mContent = content;
mContentIsDirty = true;
}
}
void TextNode::setFillColor(const Color& color)
void TextNode::update(FontsManager* fontsManager)
{
mTextData.mFillColor = color;
}
void TextNode::setStrokeColor(const Color& color)
{
mTextData.mStrokeColor = color;
}
void TextNode::update(FontsManager* drawingManager)
{
updateMesh();
updateTexture(drawingManager);
}
const TextData& TextNode::getTextData() const
{
return mTextData;
}
void TextNode::updateMesh()
{
}
void TextNode::updateTexture(FontsManager* fontsManager)
{
if (!mSceneItem)
{
mSceneItem = std::make_unique<SceneText>();
}
if (!mContentIsDirty)
{
dynamic_cast<SceneText*>(mSceneItem.get())->setContent(mContent);
mContentIsDirty = false;
}
if (mTransformIsDirty)
{
mSceneItem->updateTransform({mLocation});
mTransformIsDirty = false;
}
if (mMaterialIsDirty)
{
mSceneItem->updateUniformColor(mFillColor);
mMaterialIsDirty = false;
}
}