Break out material handling into dedicated class.

This commit is contained in:
jmsgrogan 2023-01-24 09:51:15 +00:00
parent fc44c4c623
commit 73051a5f27
17 changed files with 221 additions and 153 deletions

View file

@ -55,16 +55,7 @@ void GeometryNode::updateMaterial()
return;
}
if (mHasFillColor)
{
mBackgroundItem->setFillColor(mFillColor);
}
if (mHasStrokeColor && mStrokeThickness > 0)
{
mBackgroundItem->setOutlineColor(mStrokeColor);
mBackgroundItem->setOutlineThickness(mStrokeThickness);
}
mBackgroundItem->updateSolidMaterial(*mMaterial);
}
void GeometryNode::update(SceneInfo* sceneInfo)

View file

@ -137,7 +137,7 @@ void GridNode::update(SceneInfo*)
if (mMaterialIsDirty)
{
mOutlineModel->setFillColor(mStrokeColor);
mOutlineModel->updateSolidMaterial(*mMaterial);
mMaterialIsDirty = false;
}

View file

@ -2,8 +2,7 @@
MaterialNode::MaterialNode(const Transform& transform)
: AbstractVisualNode(transform),
mFillColor(Color(255, 255, 255)),
mStrokeColor(Color(0, 0, 0))
mMaterial(std::make_unique<BasicMaterial>())
{
}
@ -13,52 +12,27 @@ MaterialNode::~MaterialNode()
}
const Color& MaterialNode::getFillColor() const
const BasicMaterial* MaterialNode::getMaterial() const
{
return mFillColor;
}
const Color& MaterialNode::getStrokeColor() const
{
return mStrokeColor;
return mMaterial.get();
}
void MaterialNode::setHasStrokeColor(bool hasStroke)
{
if (mHasStrokeColor != hasStroke)
{
mHasStrokeColor = hasStroke;
mMaterialIsDirty = true;
}
mMaterialIsDirty = mMaterial->setHasStrokeColor(hasStroke);
}
void MaterialNode::setHasFillColor(bool hasFill)
{
if (mHasFillColor != hasFill)
{
mHasFillColor = hasFill;
mMaterialIsDirty = true;
}
mMaterialIsDirty = mMaterial->setHasFillColor(hasFill);
}
void MaterialNode::setFillColor(const Color& color)
{
mHasFillColor = true;
if (mFillColor != color)
{
mMaterialIsDirty = true;
mFillColor = color;
}
mMaterialIsDirty = mMaterial->setFillColor(color);
}
void MaterialNode::setStrokeColor(const Color& color)
void MaterialNode::setStrokeColor(const Color& color)
{
mHasStrokeColor = true;
if (mStrokeColor != color)
{
mMaterialIsDirty = true;
mStrokeColor = color;
}
mMaterialIsDirty = mMaterial->setStrokeColor(color);
}

View file

@ -1,8 +1,7 @@
#pragma once
#include "AbstractVisualNode.h"
#include "Color.h"
#include "BasicMaterial.h"
class MaterialNode : public AbstractVisualNode
{
@ -10,20 +9,14 @@ public:
MaterialNode(const Transform& transform);
virtual ~MaterialNode();
const Color& getFillColor() const;
const Color& getStrokeColor() const;
const BasicMaterial* getMaterial() const;
void setHasStrokeColor(bool hasStroke);
void setHasFillColor(bool hasFill);
void setFillColor(const Color& color);
void setStrokeColor(const Color& color);
protected:
bool mHasFillColor{ false };
bool mHasStrokeColor{ true };
Color mFillColor;
Color mStrokeColor;
std::unique_ptr<BasicMaterial> mMaterial;
bool mMaterialIsDirty{true};
};

View file

@ -88,7 +88,7 @@ void MeshNode::update(SceneInfo*)
if (mMaterialIsDirty)
{
mModel->setFillColor(mFillColor);
mModel->updateSolidMaterial(*mMaterial);
mMaterialIsDirty = false;
}
}

View file

@ -175,7 +175,7 @@ void TextNode::update(SceneInfo* sceneInfo)
if (mMaterialIsDirty)
{
mTextItem->setFillColor(mFillColor);
mTextItem->updateSolidMaterial(*mMaterial);
mMaterialIsDirty = false;
}
}