Skip to content

Commit

Permalink
#5567: Adding/removing stages in basic mode is working now
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Apr 2, 2021
1 parent c364a9b commit 0c88787
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 15 deletions.
69 changes: 54 additions & 15 deletions radiant/ui/materials/editor/MaterialEditor.cpp
Expand Up @@ -300,20 +300,54 @@ void MaterialEditor::_onBasicMapEntryChanged(const std::string& entryName, IShad
return;
}

auto existingStage = findMaterialStageByType(type);
auto textCtrl = getControl<MapExpressionEntry>(entryName)->GetTextCtrl();

auto newValue = textCtrl->GetValue().ToStdString();

if (!existingStage.first)
// Clearing the text control is the same as removing the stage
if (newValue.empty())
{
// Create stage?
// Remove the corresponding stage
auto stageToRemove = findMaterialStageByType(type);

if (stageToRemove.first)
{
_material->removeLayer(stageToRemove.second);
updateStageListFromMaterial();
onMaterialChanged();
updateBasicImagePreview();
}

return;
}

auto stage = _material->getEditableLayer(existingStage.second);

auto textCtrl = getControl<MapExpressionEntry>(entryName)->GetTextCtrl();
// Non-empty text, create the stage if necessary
auto existingStage = findMaterialStageByType(type);
IEditableShaderLayer::Ptr stage;
bool stageCreated = false;

if (existingStage.first)
{
stage = _material->getEditableLayer(existingStage.second);
}

if (!stage)
{
auto index = _material->addLayer(type);

stage = _material->getEditableLayer(index);
stageCreated = true;
}

stage->setMapExpressionFromString(textCtrl->GetValue().ToStdString());

if (stageCreated)
{
updateStageListFromMaterial();
}

updateStageControls();
updateBasicImagePreview();
onMaterialChanged();
}

Expand Down Expand Up @@ -1545,15 +1579,7 @@ void MaterialEditor::updateBasicPageFromMaterial()
materialTypeDropdown->Select(materialTypeDropdown->FindString(surfType));
}

auto editorImgTabImage = getControl<TexturePreview>("BasicEditorImageTabImage");
auto diffuseTabImage = getControl<TexturePreview>("BasicDiffuseTabImage");
auto bumpTabImage = getControl<TexturePreview>("BasicBumpTabImage");
auto specularTabImage = getControl<TexturePreview>("BasicSpecularTabImage");

editorImgTabImage->SetMaterial(_material);
diffuseTabImage->SetMaterial(_material);
bumpTabImage->SetMaterial(_material);
specularTabImage->SetMaterial(_material);
updateBasicImagePreview();

auto editorImageMap = getControl<MapExpressionEntry>("BasicEditorImageEntry");
auto diffuseImageMap = getControl<MapExpressionEntry>("BasicDiffuseImageEntry");
Expand All @@ -1576,6 +1602,19 @@ void MaterialEditor::updateBasicPageFromMaterial()
specularImageMap->SetValue(expression ? expression->getExpressionString() : "");
}

void MaterialEditor::updateBasicImagePreview()
{
auto editorImgTabImage = getControl<TexturePreview>("BasicEditorImageTabImage");
auto diffuseTabImage = getControl<TexturePreview>("BasicDiffuseTabImage");
auto bumpTabImage = getControl<TexturePreview>("BasicBumpTabImage");
auto specularTabImage = getControl<TexturePreview>("BasicSpecularTabImage");

editorImgTabImage->SetMaterial(_material);
diffuseTabImage->SetMaterial(_material);
bumpTabImage->SetMaterial(_material);
specularTabImage->SetMaterial(_material);
}

void MaterialEditor::updateControlsFromMaterial()
{
util::ScopedBoolLock lock(_materialUpdateInProgress);
Expand Down
1 change: 1 addition & 0 deletions radiant/ui/materials/editor/MaterialEditor.h
Expand Up @@ -136,6 +136,7 @@ class MaterialEditor :
std::pair<IShaderLayer::Ptr, std::size_t> findMaterialStageByType(IShaderLayer::Type type);

void updateBasicPageFromMaterial();
void updateBasicImagePreview();
void updateStageControls();
void updateStageBlendControls();
void updateStageTextureControls();
Expand Down

0 comments on commit 0c88787

Please sign in to comment.