Overrides - Fixed segfault in initialisation
Override definitions were being moved, so there was no pointer left to access the override on the next initialisation.
This commit is contained in:
parent
afe7c43351
commit
0e8c95f27e
4 changed files with 132 additions and 7 deletions
2
sync.cc
2
sync.cc
|
@ -440,7 +440,7 @@ void T_SyncOverrideSection::merge(
|
|||
section( os->title ).merge( *os );
|
||||
}
|
||||
for ( auto& ov : other.overrides ) {
|
||||
overrides.add( std::move( ov ) );
|
||||
overrides.add( ov->clone( ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
3
sync.hh
3
sync.hh
|
@ -222,6 +222,9 @@ class A_SyncOverride
|
|||
virtual void makeUI(
|
||||
uint32_t& counter ,
|
||||
T_StringBuilder& sb ) noexcept;
|
||||
|
||||
// Create a clone of the current override.
|
||||
virtual T_OwnPtr< A_SyncOverride > clone( ) const noexcept = 0;
|
||||
};
|
||||
|
||||
// Overrides section
|
||||
|
|
|
@ -659,6 +659,13 @@ void T_Float::makeEditWidgets(
|
|||
}
|
||||
}
|
||||
|
||||
P_SyncOverride T_Float::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_Float >( inputs_[ 0 ] , &title_[ 0 ] ) };
|
||||
copyTo( *c );
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*= T_Float2 ===================================================================*/
|
||||
|
||||
|
@ -694,6 +701,13 @@ void T_Float2::makeEditWidgets(
|
|||
}
|
||||
}
|
||||
|
||||
P_SyncOverride T_Float2::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_Float2 >( inputs_[ 0 ] , inputs_[ 1 ] , &title_[ 0 ] ) };
|
||||
copyTo( *c );
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*= T_Float3 ===================================================================*/
|
||||
|
||||
|
@ -731,6 +745,14 @@ void T_Float3::makeEditWidgets(
|
|||
}
|
||||
}
|
||||
|
||||
P_SyncOverride T_Float3::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_Float3 >( inputs_[ 0 ] , inputs_[ 1 ] ,
|
||||
inputs_[ 2 ] , &title_[ 0 ] ) };
|
||||
copyTo( *c );
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*= T_Float4 ===================================================================*/
|
||||
|
||||
|
@ -770,6 +792,14 @@ void T_Float4::makeEditWidgets(
|
|||
}
|
||||
}
|
||||
|
||||
P_SyncOverride T_Float4::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_Float4 >( inputs_[ 0 ] , inputs_[ 1 ] ,
|
||||
inputs_[ 2 ] , inputs_[ 3 ] , &title_[ 0 ] ) };
|
||||
copyTo( *c );
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*= A_Integer ==================================================================*/
|
||||
|
||||
|
@ -826,6 +856,13 @@ void T_Integer::makeEditWidgets(
|
|||
}
|
||||
}
|
||||
|
||||
P_SyncOverride T_Integer::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_Integer >( inputs_[ 0 ] , &title_[ 0 ] ) };
|
||||
copyTo( *c );
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*= T_Integer2 =================================================================*/
|
||||
|
||||
|
@ -861,6 +898,13 @@ void T_Integer2::makeEditWidgets(
|
|||
}
|
||||
}
|
||||
|
||||
P_SyncOverride T_Integer2::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_Integer2 >( inputs_[ 0 ] , inputs_[ 1 ] , &title_[ 0 ] ) };
|
||||
copyTo( *c );
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*= T_Integer3 =================================================================*/
|
||||
|
||||
|
@ -898,6 +942,14 @@ void T_Integer3::makeEditWidgets(
|
|||
}
|
||||
}
|
||||
|
||||
P_SyncOverride T_Integer3::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_Integer3 >( inputs_[ 0 ] , inputs_[ 1 ] ,
|
||||
inputs_[ 2 ] , &title_[ 0 ] ) };
|
||||
copyTo( *c );
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*= T_Integer4 =================================================================*/
|
||||
|
||||
|
@ -937,6 +989,14 @@ void T_Integer4::makeEditWidgets(
|
|||
}
|
||||
}
|
||||
|
||||
P_SyncOverride T_Integer4::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_Integer4 >( inputs_[ 0 ] , inputs_[ 1 ] ,
|
||||
inputs_[ 2 ] , inputs_[ 3 ] , &title_[ 0 ] ) };
|
||||
copyTo( *c );
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*= T_ColorGrading =============================================================*/
|
||||
|
||||
|
@ -989,6 +1049,16 @@ bool T_ColorGrading::setUnit(
|
|||
M_SETOPT_( unit_ , v );
|
||||
}
|
||||
|
||||
P_SyncOverride T_ColorGrading::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_ColorGrading >( inputs_[ 0 ] ,
|
||||
inputs_[ 1 ] , inputs_[ 2 ] , &title_[ 0 ] ) };
|
||||
c->location( ) = location( );
|
||||
c->base_ = base_;
|
||||
c->unit_ = unit_;
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*= T_CamOverride ==============================================================*/
|
||||
|
||||
|
@ -998,6 +1068,24 @@ T_CamOverride::T_CamOverride(
|
|||
camMode_( CM_INVALID )
|
||||
{}
|
||||
|
||||
P_SyncOverride T_CamOverride::clone( ) const noexcept
|
||||
{
|
||||
auto c{ NewOwned< T_CamOverride >( &title_[ 0 ] ) };
|
||||
c->location( ) = location( );
|
||||
const auto n{ inputs_.size( ) };
|
||||
for ( auto i = 0u ; i < n ; i ++ ) {
|
||||
c->inputs_.add( inputs_[ i ] );
|
||||
}
|
||||
c->fovConfig_ = fovConfig_;
|
||||
c->target_ = target_;
|
||||
c->upVector_ = upVector_;
|
||||
c->position_ = position_;
|
||||
c->angles_ = angles_;
|
||||
c->distance_ = distance_;
|
||||
c->camMode_ = camMode_;
|
||||
return c;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------*/
|
||||
|
||||
T_CamOverride::E_SetState T_CamOverride::setFieldOfView(
|
||||
|
|
|
@ -23,10 +23,18 @@ class A_Float : public A_SyncOverride
|
|||
: A_SyncOverride( type , title )
|
||||
{}
|
||||
|
||||
public:
|
||||
A_Float( T_String const& input ,
|
||||
T_String const& title ) noexcept;
|
||||
void copyTo( A_Float& other ) const noexcept
|
||||
{
|
||||
other.min_ = min_;
|
||||
other.max_ = max_;
|
||||
other.step_ = step_;
|
||||
other.decimals_ = decimals_;
|
||||
other.power_ = power_;
|
||||
other.slider_ = slider_;
|
||||
other.location( ) = location( );
|
||||
}
|
||||
|
||||
public:
|
||||
bool setMin( const float v ) noexcept;
|
||||
bool setMax( const float v ) noexcept;
|
||||
bool setStep( const float v ) noexcept;
|
||||
|
@ -52,6 +60,8 @@ class T_Float : public A_Float
|
|||
public:
|
||||
T_Float( T_String const& input ,
|
||||
T_String const& title ) noexcept;
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
};
|
||||
|
||||
// 2 float values
|
||||
|
@ -65,6 +75,8 @@ class T_Float2 : public A_Float
|
|||
T_Float2( T_String const& input0 ,
|
||||
T_String const& input1 ,
|
||||
T_String const& title ) noexcept;
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
};
|
||||
|
||||
// 3 float values
|
||||
|
@ -79,6 +91,8 @@ class T_Float3 : public A_Float
|
|||
T_String const& input1 ,
|
||||
T_String const& input2 ,
|
||||
T_String const& title ) noexcept;
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
};
|
||||
|
||||
// 4 float values
|
||||
|
@ -94,6 +108,8 @@ class T_Float4 : public A_Float
|
|||
T_String const& input2 ,
|
||||
T_String const& input3 ,
|
||||
T_String const& title ) noexcept;
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
};
|
||||
|
||||
|
||||
|
@ -114,10 +130,16 @@ class A_Integer : public A_SyncOverride
|
|||
: A_SyncOverride( type , title )
|
||||
{}
|
||||
|
||||
public:
|
||||
A_Integer( T_String const& input ,
|
||||
T_String const& title ) noexcept;
|
||||
void copyTo( A_Integer& other ) const noexcept
|
||||
{
|
||||
other.min_ = min_;
|
||||
other.max_ = max_;
|
||||
other.step_ = step_;
|
||||
other.slider_ = slider_;
|
||||
other.location( ) = location( );
|
||||
}
|
||||
|
||||
public:
|
||||
bool setMin( const int32_t v ) noexcept;
|
||||
bool setMax( const int32_t v ) noexcept;
|
||||
bool setStep( const float v ) noexcept;
|
||||
|
@ -140,6 +162,8 @@ class T_Integer : public A_Integer
|
|||
public:
|
||||
T_Integer( T_String const& input ,
|
||||
T_String const& title ) noexcept;
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
};
|
||||
|
||||
// 2 integers
|
||||
|
@ -153,6 +177,8 @@ class T_Integer2 : public A_Integer
|
|||
T_Integer2( T_String const& input0 ,
|
||||
T_String const& input1 ,
|
||||
T_String const& title ) noexcept;
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
};
|
||||
|
||||
// 3 integers
|
||||
|
@ -167,6 +193,8 @@ class T_Integer3 : public A_Integer
|
|||
T_String const& input1 ,
|
||||
T_String const& input2 ,
|
||||
T_String const& title ) noexcept;
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
};
|
||||
|
||||
// 4 integers
|
||||
|
@ -182,6 +210,8 @@ class T_Integer4 : public A_Integer
|
|||
T_String const& input2 ,
|
||||
T_String const& input3 ,
|
||||
T_String const& title ) noexcept;
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
};
|
||||
|
||||
|
||||
|
@ -209,6 +239,8 @@ class T_ColorGrading : public A_SyncOverride
|
|||
|
||||
float base( ) const noexcept { return base_ ? *base_ : 0.f; }
|
||||
float unit( ) const noexcept { return unit_ ? *unit_ : 1.f; }
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
};
|
||||
|
||||
|
||||
|
@ -272,6 +304,8 @@ class T_CamOverride : public A_SyncOverride , public virtual A_MouseCtrl
|
|||
public:
|
||||
T_CamOverride( T_String const& title ) noexcept;
|
||||
|
||||
P_SyncOverride clone( ) const noexcept override;
|
||||
|
||||
E_SetState setFieldOfView(
|
||||
T_String const& input ) noexcept;
|
||||
E_SetState setNearPlane(
|
||||
|
|
Loading…
Reference in a new issue