Skip to content

Commit

Permalink
#5532: Fix compilation in gcc
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Mar 22, 2021
1 parent 156adbb commit bd51ca2
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 15 deletions.
25 changes: 18 additions & 7 deletions radiant/ui/materials/Binding.h
@@ -1,6 +1,7 @@
#pragma once

#include "ishaders.h"
#include "util/ScopedBoolLock.h"
#include <wx/checkbox.h>

namespace ui
Expand Down Expand Up @@ -41,13 +42,23 @@ template<typename Source>
struct TargetSelector
{
using TargetType = Source;

static TargetType CastToTarget(const Source& source)
{
return source;
}
};

// Specialisation for shader layer editing, where the target type is an IEditableShaderLayer
template<>
struct TargetSelector<IShaderLayer::Ptr>
{
using TargetType = IEditableShaderLayer::Ptr;

static TargetType CastToTarget(const IShaderLayer::Ptr& source)
{
return std::static_pointer_cast<IEditableShaderLayer>(source);
}
};

template<typename Source, typename ValueType>
Expand All @@ -63,11 +74,6 @@ class TwoWayBinding :
using AcquireTargetFunc = std::function<Target()>;
using PostUpdateFunc = std::function<void()>;

Target UseSourceAsTarget()
{
return Binding<Source>::getSource();
}

protected:
LoadFunc _loadValue;
AcquireTargetFunc _acquireTarget;
Expand All @@ -81,7 +87,7 @@ class TwoWayBinding :
TwoWayBinding(const LoadFunc& loadValue,
const UpdateFunc& updateValue,
const PostUpdateFunc& postChangeNotify = PostUpdateFunc(),
const AcquireTargetFunc& acquireTarget = std::bind(&TwoWayBinding::UseSourceAsTarget, this)) :
const AcquireTargetFunc& acquireTarget = AcquireTargetFunc()) :
_loadValue(loadValue),
_acquireTarget(acquireTarget),
_updateValue(updateValue),
Expand All @@ -96,7 +102,12 @@ class TwoWayBinding :
return Target();
}

return _acquireTarget();
if (std::is_same<Source, Target>::value)
{
return TargetSelector<Source>::CastToTarget(Binding<Source>::getSource());
}

return _acquireTarget ? _acquireTarget() : Target();
}

protected:
Expand Down
4 changes: 2 additions & 2 deletions radiant/ui/materials/CheckBoxBinding.h
Expand Up @@ -17,14 +17,14 @@ class CheckBoxBinding :
CheckBoxBinding(wxCheckBox* checkbox,
const typename BaseBinding::LoadFunc& loadFunc,
const typename BaseBinding::UpdateFunc& saveFunc) :
CheckBoxBinding(checkbox, loadFunc, saveFunc, BaseBinding::PostUpdateFunc())
CheckBoxBinding(checkbox, loadFunc, saveFunc, typename BaseBinding::PostUpdateFunc())
{}

CheckBoxBinding(wxCheckBox* checkbox,
const typename BaseBinding::LoadFunc& loadFunc,
const typename BaseBinding::UpdateFunc& saveFunc,
const typename BaseBinding::PostUpdateFunc& postChangeNotify) :
CheckBoxBinding(checkbox, loadFunc, saveFunc, postChangeNotify, std::bind(&BaseBinding::UseSourceAsTarget, this))
CheckBoxBinding(checkbox, loadFunc, saveFunc, postChangeNotify, typename BaseBinding::AcquireTargetFunc())
{}

CheckBoxBinding(wxCheckBox* checkbox,
Expand Down
4 changes: 2 additions & 2 deletions radiant/ui/materials/ExpressionBinding.h
Expand Up @@ -21,14 +21,14 @@ class ExpressionBinding :
ExpressionBinding(wxTextCtrl* textCtrl,
const typename BaseBinding::LoadFunc& loadFunc,
const typename BaseBinding::UpdateFunc& saveFunc) :
ExpressionBinding(textCtrl, loadFunc, saveFunc, BaseBinding::PostUpdateFunc())
ExpressionBinding(textCtrl, loadFunc, saveFunc, typename BaseBinding::PostUpdateFunc())
{}

ExpressionBinding(wxTextCtrl* textCtrl,
const typename BaseBinding::LoadFunc& loadFunc,
const typename BaseBinding::UpdateFunc& saveFunc,
const typename BaseBinding::PostUpdateFunc& postChangeNotify) :
ExpressionBinding(textCtrl, loadFunc, saveFunc, postChangeNotify, std::bind(&BaseBinding::UseSourceAsTarget, this))
ExpressionBinding(textCtrl, loadFunc, saveFunc, postChangeNotify, typename BaseBinding::AcquireTargetFunc())
{}

ExpressionBinding(wxTextCtrl* textCtrl,
Expand Down
2 changes: 2 additions & 0 deletions radiant/ui/materials/MaterialPreview.cpp
@@ -1,7 +1,9 @@
#include "MaterialPreview.h"

#include "i18n.h"
#include "ibrush.h"
#include "ientity.h"
#include "imodelcache.h"
#include "ieclass.h"
#include "ishaders.h"
#include "string/convert.h"
Expand Down
4 changes: 2 additions & 2 deletions radiant/ui/materials/RadioButtonBinding.h
Expand Up @@ -21,8 +21,8 @@ class RadioButtonBinding :
RadioButtonBinding(wxRadioButton* radioButton,
const typename BaseBinding::LoadFunc& loadFunc,
const typename BaseBinding::UpdateFunc& saveFunc,
const typename BaseBinding::PostUpdateFunc& postChangeNotify = BaseBinding::PostUpdateFunc(),
const typename BaseBinding::AcquireTargetFunc& acquireSaveTarget = BaseBinding::UseSourceAsTarget) :
const typename BaseBinding::PostUpdateFunc& postChangeNotify = typename BaseBinding::PostUpdateFunc(),
const typename BaseBinding::AcquireTargetFunc& acquireSaveTarget = typename BaseBinding::AcquireTargetFunc()) :
BaseBinding(loadFunc, saveFunc, postChangeNotify, acquireSaveTarget),
_radioButton(radioButton)
{
Expand Down
4 changes: 2 additions & 2 deletions radiant/ui/materials/SpinCtrlBinding.h
Expand Up @@ -21,14 +21,14 @@ class SpinCtrlBinding :
SpinCtrlBinding(SpinCtrlType* spinCtrl,
const typename BaseBinding::LoadFunc& loadFunc,
const typename BaseBinding::UpdateFunc& saveFunc) :
SpinCtrlBinding(spinCtrl, loadFunc, saveFunc, BaseBinding::PostUpdateFunc())
SpinCtrlBinding(spinCtrl, loadFunc, saveFunc, typename BaseBinding::PostUpdateFunc())
{}

SpinCtrlBinding(SpinCtrlType* spinCtrl,
const typename BaseBinding::LoadFunc& loadFunc,
const typename BaseBinding::UpdateFunc& saveFunc,
const typename BaseBinding::PostUpdateFunc& postChangeNotify) :
SpinCtrlBinding(spinCtrl, loadFunc, saveFunc, postChangeNotify, std::bind(&BaseBinding::UseSourceAsTarget, this))
SpinCtrlBinding(spinCtrl, loadFunc, saveFunc, postChangeNotify, typename BaseBinding::AcquireTargetFunc())
{}

SpinCtrlBinding(SpinCtrlType* spinCtrl,
Expand Down
1 change: 1 addition & 0 deletions radiantcore/shaders/ExpressionSlots.h
@@ -1,5 +1,6 @@
#pragma once

#include "ishaderlayer.h"
#include "ishaderexpression.h"

namespace shaders
Expand Down

0 comments on commit bd51ca2

Please sign in to comment.