Skip to content

Commit

Permalink
#5570: Add light properties panel
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Apr 9, 2021
1 parent 45962b7 commit a7e5ae8
Show file tree
Hide file tree
Showing 6 changed files with 594 additions and 16 deletions.
413 changes: 413 additions & 0 deletions install/ui/materialeditor.fbp

Large diffs are not rendered by default.

78 changes: 78 additions & 0 deletions install/ui/materialeditor.xrc
Expand Up @@ -3175,6 +3175,84 @@
<style>wxTAB_TRAVERSAL</style>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxEXPAND | wxALL</flag>
<border>5</border>
<object class="wxPanel" name="MaterialPreviewLightPanel">
<style>wxTAB_TRAVERSAL</style>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxALL|wxEXPAND</flag>
<border>6</border>
<object class="wxFlexGridSizer">
<rows>0</rows>
<cols>2</cols>
<vgap>6</vgap>
<hgap>6</hgap>
<growablecols>1</growablecols>
<growablerows></growablerows>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<border>0</border>
<object class="wxStaticText" name="m_staticText71">
<label>Classname:</label>
<wrap>-1</wrap>
</object>
</object>
<object class="sizeritem">
<option>1</option>
<flag>wxALIGN_CENTER_VERTICAL|wxEXPAND</flag>
<border>0</border>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<border>0</border>
<object class="wxTextCtrl" name="MaterialPreviewLightClassname">
<value></value>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL|wxLEFT</flag>
<border>6</border>
<object class="wxButton" name="MaterialPreviewLightChooseClassnameButton">
<label>Choose...</label>
<default>0</default>
<markup>0</markup>
<bitmap />
</object>
</object>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<border>0</border>
<object class="wxStaticText" name="m_staticText72">
<label>Colour:</label>
<wrap>-1</wrap>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<border>0</border>
<object class="wxColourPickerCtrl" name="MaterialPreviewLightColour">
<value>#000000</value>
<style>wxCLRP_DEFAULT_STYLE</style>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
Expand Down
72 changes: 56 additions & 16 deletions radiant/ui/materials/editor/MaterialEditor.cpp
Expand Up @@ -17,6 +17,7 @@
#include <wx/radiobut.h>
#include <wx/collpane.h>
#include <wx/statbmp.h>
#include <wx/clrpicker.h>

#include "wxutil/SourceView.h"
#include "wxutil/FileChooser.h"
Expand Down Expand Up @@ -142,23 +143,9 @@ MaterialEditor::MaterialEditor() :
auto* previewPanel = getControl<wxPanel>("MaterialEditorPreviewPanel");
_preview.reset(new MaterialPreview(previewPanel));

// Collapsible preview pane
auto sourceTextPanel = new wxCollapsiblePane(previewPanel, wxID_ANY, _("Material Source Text"));
_sourceView = new wxutil::D3MaterialSourceViewCtrl(sourceTextPanel->GetPane());
_sourceView->SetMinSize(wxSize(-1, 400));

sourceTextPanel->Bind(wxEVT_COLLAPSIBLEPANE_CHANGED, [=](wxCollapsiblePaneEvent& ev)
{
previewPanel->Layout();
});

auto paneSizer = new wxBoxSizer(wxVERTICAL);
paneSizer->Add(_sourceView, 1, wxGROW | wxEXPAND);
sourceTextPanel->GetPane()->SetSizer(paneSizer);
sourceTextPanel->Collapse();

previewPanel->GetSizer()->Add(_preview->getWidget(), 1, wxEXPAND);
previewPanel->GetSizer()->Add(sourceTextPanel, 0, wxEXPAND);
setupSourceTextPanel(previewPanel);
setupPreviewLightProperties(previewPanel);

setupBasicMaterialPage();
setupMaterialProperties();
Expand Down Expand Up @@ -222,6 +209,59 @@ int MaterialEditor::ShowModal()
return returnCode;
}

void MaterialEditor::setupSourceTextPanel(wxWindow* previewPanel)
{
auto sourceTextPanel = new wxCollapsiblePane(previewPanel, wxID_ANY, _("Material Source Text"));
_sourceView = new wxutil::D3MaterialSourceViewCtrl(sourceTextPanel->GetPane());
_sourceView->SetMinSize(wxSize(-1, 400));

sourceTextPanel->Bind(wxEVT_COLLAPSIBLEPANE_CHANGED, [=](wxCollapsiblePaneEvent& ev)
{
previewPanel->Layout();
});

auto paneSizer = new wxBoxSizer(wxVERTICAL);
paneSizer->Add(_sourceView, 1, wxGROW | wxEXPAND);
sourceTextPanel->GetPane()->SetSizer(paneSizer);
sourceTextPanel->Collapse();

previewPanel->GetSizer()->Add(sourceTextPanel, 0, wxEXPAND);
}

void MaterialEditor::setupPreviewLightProperties(wxWindow* previewPanel)
{
auto collapsiblePane = new wxCollapsiblePane(previewPanel, wxID_ANY, _("Light Properties"));

auto propertyPanel = getControl<wxPanel>("MaterialPreviewLightPanel");
propertyPanel->GetContainingSizer()->Detach(propertyPanel);
propertyPanel->Reparent(collapsiblePane->GetPane());
propertyPanel->SetMinSize(wxSize(-1, 100));

collapsiblePane->Bind(wxEVT_COLLAPSIBLEPANE_CHANGED, [=](wxCollapsiblePaneEvent& ev)
{
previewPanel->Layout();
});

auto paneSizer = new wxBoxSizer(wxVERTICAL);
paneSizer->Add(propertyPanel, 1, wxGROW | wxEXPAND);
collapsiblePane->GetPane()->SetSizer(paneSizer);
collapsiblePane->Collapse();

previewPanel->GetSizer()->Add(collapsiblePane, 0, wxEXPAND);

// Wire up the signals
_preview->signal_LightChanged().connect([this] ()
{
getControl<wxTextCtrl>("MaterialPreviewLightClassname")->SetValue(_preview->getLightClassname());

auto colour = _preview->getLightColour() * 255.0;
getControl<wxColourPickerCtrl>("MaterialPreviewLightColour")->SetColour(
wxColour(static_cast<wxColour::ChannelType>(colour.x()),
static_cast<wxColour::ChannelType>(colour.y()),
static_cast<wxColour::ChannelType>(colour.z())));
});
}

void MaterialEditor::_onClose(wxCommandEvent& ev)
{
// Check all unsaved materials
Expand Down
2 changes: 2 additions & 0 deletions radiant/ui/materials/editor/MaterialEditor.h
Expand Up @@ -109,6 +109,8 @@ class MaterialEditor :
void setupSurfaceFlag(const std::string& controlName, Material::SurfaceFlags flag);
void setupMaterialFlag(const std::string& controlName, Material::Flags flag);
void setupStageFlag(const std::string& controlName, IShaderLayer::Flags flags);
void setupSourceTextPanel(wxWindow* previewPanel);
void setupPreviewLightProperties(wxWindow* previewPanel);

void createExpressionBinding(const std::string& textCtrlName,
const std::function<shaders::IShaderExpression::Ptr(const IShaderLayer::Ptr&)>& loadFunc,
Expand Down
36 changes: 36 additions & 0 deletions radiant/ui/materials/editor/MaterialPreview.cpp
Expand Up @@ -239,6 +239,8 @@ void MaterialPreview::setupSceneGraph()

setViewOrigin(Vector3(1, 1, 1) * distance);
setViewAngles(Vector3(37, 135, 0));

_sigLightChanged.emit();
}
catch (std::runtime_error&)
{
Expand Down Expand Up @@ -295,4 +297,38 @@ void MaterialPreview::onTestModelSelectionChanged(wxCommandEvent& ev)
queueDraw();
}

sigc::signal<void>& MaterialPreview::signal_LightChanged()
{
return _sigLightChanged;
}

std::string MaterialPreview::getLightClassname()
{
return _light ? Node_getEntity(_light)->getEntityClass()->getName() : "";
}

void MaterialPreview::setLightClassname(const std::string& className)
{

}

Vector3 MaterialPreview::getLightColour()
{
if (!_light) return Vector3(0,0,0);

auto value = Node_getEntity(_light)->getKeyValue("_color");

if (value.empty())
{
value = "1 1 1";
}

return string::convert<Vector3>(value, Vector3(0,0,0));
}

void MaterialPreview::setLightColour(const Vector3& colour)
{

}

}
9 changes: 9 additions & 0 deletions radiant/ui/materials/editor/MaterialPreview.h
Expand Up @@ -35,6 +35,8 @@ class MaterialPreview :
wxToolBarToolBase* _testModelSphereButton;
wxToolBarToolBase* _testModelTilesButton;

sigc::signal<void> _sigLightChanged;

public:
MaterialPreview(wxWindow* parent);

Expand All @@ -45,6 +47,13 @@ class MaterialPreview :

void enableFrobHighlight(bool enable);

std::string getLightClassname();
void setLightClassname(const std::string& className);
Vector3 getLightColour();
void setLightColour(const Vector3& colour);

sigc::signal<void>& signal_LightChanged();

protected:
bool canDrawGrid() override;
void setupSceneGraph() override;
Expand Down

0 comments on commit a7e5ae8

Please sign in to comment.