diff --git a/engine/src/editor/undostack.cpp b/engine/src/editor/undostack.cpp index d871df47f..e9f1c4dcb 100644 --- a/engine/src/editor/undostack.cpp +++ b/engine/src/editor/undostack.cpp @@ -19,7 +19,7 @@ TString UndoCommand::text() const { } void UndoCommand::undo() { - for(int i = m_childs.size(); i >= 0; i--) { + for(int i = m_childs.size() - 1; i >= 0; i--) { m_childs[i]->undo(); } } diff --git a/modules/editor/shadertools/converter/functions/camera.h b/modules/editor/shadertools/converter/functions/camera.h index 3455dd0d3..d1e6b565a 100644 --- a/modules/editor/shadertools/converter/functions/camera.h +++ b/modules/editor/shadertools/converter/functions/camera.h @@ -6,6 +6,10 @@ class CameraPosition : public ShaderNode { A_OBJECT(CameraPosition, ShaderNode, Shader/Camera) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: CameraPosition() { m_outputs.push_back(std::make_pair("Output", MetaType::VECTOR3)); @@ -20,6 +24,10 @@ class CameraPosition : public ShaderNode { class CameraDirection : public ShaderNode { A_OBJECT(CameraDirection, ShaderNode, Shader/Camera) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: CameraDirection() { m_outputs.push_back(std::make_pair("Output", MetaType::VECTOR3)); @@ -34,6 +42,10 @@ class CameraDirection : public ShaderNode { class ScreenSize : public ShaderNode { A_OBJECT(ScreenSize, ShaderNode, Shader/Camera) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ScreenSize() { m_outputs.push_back(std::make_pair("Output", MetaType::VECTOR4)); @@ -64,6 +76,8 @@ class ScreenPosition : public ShaderNode { A_PROPERTIES( A_PROPERTY(bool, normalized, ScreenPosition::normalized, ScreenPosition::setNormalized) ) + A_NOMETHODS() + A_NOENUMS() public: ScreenPosition() : @@ -114,6 +128,8 @@ class ProjectionMatrix : public ShaderNode { A_PROPERTIES( A_PROPERTY(bool, inverted, ProjectionMatrix::inverted, ProjectionMatrix::setInverted) ) + A_NOMETHODS() + A_NOENUMS() public: ProjectionMatrix() : diff --git a/modules/editor/shadertools/converter/functions/constvalue.h b/modules/editor/shadertools/converter/functions/constvalue.h index 722c3facd..da07b8a73 100644 --- a/modules/editor/shadertools/converter/functions/constvalue.h +++ b/modules/editor/shadertools/converter/functions/constvalue.h @@ -6,6 +6,10 @@ class ConstPi : public ShaderNode { A_OBJECT(ConstPi, ShaderNode, Shader/Constant) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ConstPi() { m_outputs.push_back(std::make_pair("Value", MetaType::FLOAT)); @@ -22,6 +26,10 @@ class ConstPi : public ShaderNode { class ConstEuler : public ShaderNode { A_OBJECT(ConstEuler, ShaderNode, Shader/Constant) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ConstEuler() { m_outputs.push_back(std::make_pair("Value", MetaType::FLOAT)); @@ -38,6 +46,10 @@ class ConstEuler : public ShaderNode { class ConstGoldenRatio : public ShaderNode { A_OBJECT(ConstGoldenRatio, ShaderNode, Shader/Constant) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ConstGoldenRatio() { m_outputs.push_back(std::make_pair("Value", MetaType::FLOAT)); @@ -57,6 +69,8 @@ class ConstFloat : public ShaderNode { A_PROPERTIES( A_PROPERTY(float, Value, ConstFloat::value, ConstFloat::setValue) ) + A_NOMETHODS() + A_NOENUMS() public: ConstFloat() : @@ -91,6 +105,8 @@ class ConstInt : public ShaderNode { A_PROPERTIES( A_PROPERTY(int, Value, ConstFloat::value, ConstFloat::setValue) ) + A_NOMETHODS() + A_NOENUMS() public: ConstInt() : @@ -125,6 +141,8 @@ class ConstVector2 : public ShaderNode { A_PROPERTIES( A_PROPERTY(Vector2, Value, ConstVector2::value, ConstVector2::setValue) ) + A_NOMETHODS() + A_NOENUMS() public: ConstVector2() { @@ -157,6 +175,8 @@ class ConstVector3 : public ShaderNode { A_PROPERTIES( A_PROPERTY(Vector3, Value, ConstVector3::value, ConstVector3::setValue) ) + A_NOMETHODS() + A_NOENUMS() public: ConstVector3() { @@ -189,6 +209,8 @@ class ConstVector4 : public ShaderNode { A_PROPERTIES( A_PROPERTY(Vector4, Value, ConstVector4::value, ConstVector4::setValue) ) + A_NOMETHODS() + A_NOENUMS() public: ConstVector4() : @@ -223,6 +245,8 @@ class ConstColor : public ShaderNode { A_PROPERTIES( A_PROPERTYEX(Vector4, Value, ConstColor::value, ConstColor::setValue, "editor=Color") ) + A_NOMETHODS() + A_NOENUMS() public: ConstColor() : @@ -259,6 +283,8 @@ class ConstMatrix3 : public ShaderNode { A_PROPERTY(Vector3, Value1, ConstMatrix3::value1, ConstMatrix3::setValue1), A_PROPERTY(Vector3, Value2, ConstMatrix3::value2, ConstMatrix3::setValue2) ) + A_NOMETHODS() + A_NOENUMS() public: ConstMatrix3() { @@ -320,6 +346,8 @@ class ConstMatrix4 : public ShaderNode { A_PROPERTY(Vector4, Value2, ConstMatrix4::value2, ConstMatrix4::setValue2), A_PROPERTY(Vector4, Value3, ConstMatrix4::value3, ConstMatrix4::setValue3) ) + A_NOMETHODS() + A_NOENUMS() public: ConstMatrix4() { diff --git a/modules/editor/shadertools/converter/functions/coordinates.h b/modules/editor/shadertools/converter/functions/coordinates.h index 76fd6eefd..d8a18e038 100644 --- a/modules/editor/shadertools/converter/functions/coordinates.h +++ b/modules/editor/shadertools/converter/functions/coordinates.h @@ -8,6 +8,10 @@ class ProjectionCoord : public ShaderNode { A_OBJECT(ProjectionCoord, ShaderNode, Shader/Coordinates) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ProjectionCoord() { m_outputs.push_back(std::make_pair("Output", MetaType::VECTOR3)); @@ -27,6 +31,8 @@ class TexCoord : public ShaderNode { A_PROPERTIES( A_PROPERTY(int, Index, TexCoord::index, TexCoord::setIndex) ) + A_NOMETHODS() + A_NOENUMS() public: TexCoord() : @@ -56,6 +62,8 @@ class CoordPanner : public ShaderNode { A_PROPERTY(float, X, CoordPanner::valueX, CoordPanner::setValueX), A_PROPERTY(float, Y, CoordPanner::valueY, CoordPanner::setValueY) ) + A_NOMETHODS() + A_NOENUMS() public: CoordPanner() { diff --git a/modules/editor/shadertools/converter/functions/customfunction.h b/modules/editor/shadertools/converter/functions/customfunction.h index 429b65b6b..56cbef9fc 100644 --- a/modules/editor/shadertools/converter/functions/customfunction.h +++ b/modules/editor/shadertools/converter/functions/customfunction.h @@ -11,6 +11,10 @@ class CustomFunction : public ShaderNode { A_OBJECT(CustomFunction, ShaderNode, Graph) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: CustomFunction() { } diff --git a/modules/editor/shadertools/converter/functions/function.h b/modules/editor/shadertools/converter/functions/function.h index 5e1f00637..53db0cfe8 100644 --- a/modules/editor/shadertools/converter/functions/function.h +++ b/modules/editor/shadertools/converter/functions/function.h @@ -39,6 +39,8 @@ class ShaderNode : public GraphNode { A_METHODS( A_SLOT(ShaderNode::switchPreview) ) + A_NOPROPERTIES() + A_NOENUMS() public: ShaderNode(); diff --git a/modules/editor/shadertools/converter/functions/imageeffects.h b/modules/editor/shadertools/converter/functions/imageeffects.h index 6f023fdcf..5f65159c0 100644 --- a/modules/editor/shadertools/converter/functions/imageeffects.h +++ b/modules/editor/shadertools/converter/functions/imageeffects.h @@ -10,6 +10,8 @@ class Desaturate : public ShaderNode { A_PROPERTY(Vector3, RGB, Desaturate::rgb, Desaturate::setRgb), A_PROPERTY(float, fraction, Desaturate::fraction, Desaturate::setFraction) ) + A_NOMETHODS() + A_NOENUMS() public: Desaturate() : diff --git a/modules/editor/shadertools/converter/functions/logicoperator.h b/modules/editor/shadertools/converter/functions/logicoperator.h index 4282a799a..435988b11 100644 --- a/modules/editor/shadertools/converter/functions/logicoperator.h +++ b/modules/editor/shadertools/converter/functions/logicoperator.h @@ -20,6 +20,8 @@ class If : public ShaderNode { A_PROPERTY(float, AEB, If::getAEB, If::setAEB), A_PROPERTY(float, ALB, If::getALB, If::setALB) ) + A_NOMETHODS() + A_NOENUMS() public: If() : @@ -125,6 +127,10 @@ class If : public ShaderNode { class Compare : public ShaderNode { A_OBJECT(Compare, ShaderNode, Shader/Logic Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Compare() : m_a(0.0f), diff --git a/modules/editor/shadertools/converter/functions/materialparam.h b/modules/editor/shadertools/converter/functions/materialparam.h index 85778c04f..8fe52db38 100644 --- a/modules/editor/shadertools/converter/functions/materialparam.h +++ b/modules/editor/shadertools/converter/functions/materialparam.h @@ -10,6 +10,8 @@ class ParamFloat : public ShaderNode { A_PROPERTY(TString, Parameter_Name, ParamFloat::name, ParamFloat::setName), A_PROPERTY(float, Default_Value, ParamFloat::defaultValue, ParamFloat::setDefaultValue) ) + A_NOMETHODS() + A_NOENUMS() public: ParamFloat() : @@ -53,6 +55,8 @@ class ParamVector : public ShaderNode { A_PROPERTY(TString, Parameter_Name, ParamVector::name, ParamVector::setName), A_PROPERTY(Vector4, Default_Value, ParamVector::defaultValue, ParamVector::setDefaultValue) ) + A_NOMETHODS() + A_NOENUMS() public: ParamVector() : diff --git a/modules/editor/shadertools/converter/functions/mathoperator.h b/modules/editor/shadertools/converter/functions/mathoperator.h index 78089a107..3774d18bc 100644 --- a/modules/editor/shadertools/converter/functions/mathoperator.h +++ b/modules/editor/shadertools/converter/functions/mathoperator.h @@ -9,6 +9,10 @@ class MathOperation : public ShaderNode { A_OBJECT(MathOperation, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: MathOperation() { m_inputs.push_back(std::make_pair(a, MetaType::INVALID)); @@ -29,6 +33,10 @@ class MathOperation : public ShaderNode { class Subtraction : public MathOperation { A_OBJECT(Subtraction, MathOperation, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Subtraction() { m_expression = "-"; @@ -38,6 +46,10 @@ class Subtraction : public MathOperation { class Add : public MathOperation { A_OBJECT(Add, MathOperation, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Add() { m_expression = "+"; @@ -47,6 +59,10 @@ class Add : public MathOperation { class Divide : public MathOperation { A_OBJECT(Divide, MathOperation, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Divide() { m_expression = "/"; @@ -56,6 +72,10 @@ class Divide : public MathOperation { class Multiply : public MathOperation { A_OBJECT(Multiply, MathOperation, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Multiply() { m_expression = "*"; @@ -65,6 +85,10 @@ class Multiply : public MathOperation { class Step : public ShaderNode { A_OBJECT(Step, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Step() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -83,6 +107,10 @@ class Step : public ShaderNode { class Smoothstep : public ShaderNode { A_OBJECT(Smoothstep, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Smoothstep() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -102,6 +130,10 @@ class Smoothstep : public ShaderNode { class Mix : public ShaderNode { A_OBJECT(Mix, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Mix() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -121,6 +153,10 @@ class Mix : public ShaderNode { class Clamp : public ShaderNode { A_OBJECT(Clamp, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Clamp() { m_inputs.push_back(std::make_pair(a, MetaType::INVALID)); @@ -140,6 +176,10 @@ class Clamp : public ShaderNode { class Min : public ShaderNode { A_OBJECT(Min, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Min() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -158,6 +198,10 @@ class Min : public ShaderNode { class Max : public ShaderNode { A_OBJECT(Max, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Max() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -176,6 +220,10 @@ class Max : public ShaderNode { class Power : public ShaderNode { A_OBJECT(Power, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Power() { m_inputs.push_back(std::make_pair("Base", MetaType::INVALID)); @@ -194,6 +242,10 @@ class Power : public ShaderNode { class SquareRoot : public ShaderNode { A_OBJECT(SquareRoot, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: SquareRoot() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -211,6 +263,10 @@ class SquareRoot : public ShaderNode { class Logarithm : public ShaderNode { A_OBJECT(Logarithm, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Logarithm() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -228,6 +284,10 @@ class Logarithm : public ShaderNode { class Logarithm10 : public ShaderNode { A_OBJECT(Logarithm10, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Logarithm10() { m_inputs.push_back(std::make_pair(x, MetaType::FLOAT)); @@ -247,6 +307,10 @@ class Logarithm10 : public ShaderNode { class Logarithm2 : public ShaderNode { A_OBJECT(Logarithm2, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Logarithm2() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -264,6 +328,10 @@ class Logarithm2 : public ShaderNode { class FWidth : public ShaderNode { A_OBJECT(FWidth, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: FWidth() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -282,6 +350,10 @@ class FWidth : public ShaderNode { class Abs : public ShaderNode { A_OBJECT(Abs, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Abs() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -299,6 +371,10 @@ class Abs : public ShaderNode { class Sign : public ShaderNode { A_OBJECT(Sign, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Sign() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -316,6 +392,10 @@ class Sign : public ShaderNode { class Floor : public ShaderNode { A_OBJECT(Floor, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Floor() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -333,6 +413,10 @@ class Floor : public ShaderNode { class Ceil : public ShaderNode { A_OBJECT(Ceil, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Ceil() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -350,6 +434,10 @@ class Ceil : public ShaderNode { class Round : public ShaderNode { A_OBJECT(Round, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Round() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -367,6 +455,10 @@ class Round : public ShaderNode { class Truncate : public ShaderNode { A_OBJECT(Truncate, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Truncate() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -384,6 +476,10 @@ class Truncate : public ShaderNode { class Fract : public ShaderNode { A_OBJECT(Fract, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Fract() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -401,6 +497,10 @@ class Fract : public ShaderNode { class DDX : public ShaderNode { A_OBJECT(DDX, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: DDX() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -418,6 +518,10 @@ class DDX : public ShaderNode { class DDY : public ShaderNode { A_OBJECT(DDY, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: DDY() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -435,6 +539,10 @@ class DDY : public ShaderNode { class Exp : public ShaderNode { A_OBJECT(Exp, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Exp() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -452,6 +560,10 @@ class Exp : public ShaderNode { class Exp2 : public ShaderNode { A_OBJECT(Exp2, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Exp2() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -469,6 +581,10 @@ class Exp2 : public ShaderNode { class Remainder : public ShaderNode { A_OBJECT(Remainder, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Remainder() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -486,6 +602,10 @@ class Remainder : public ShaderNode { class RSqrt : public ShaderNode { A_OBJECT(RSqrt, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: RSqrt() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -503,6 +623,10 @@ class RSqrt : public ShaderNode { class Fmod : public ShaderNode { A_OBJECT(Fmod, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Fmod() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -523,6 +647,10 @@ class Fmod : public ShaderNode { class InverseLerp : public ShaderNode { A_OBJECT(InverseLerp, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: InverseLerp() { m_inputs.push_back(std::make_pair(a, MetaType::INVALID)); @@ -544,6 +672,10 @@ class InverseLerp : public ShaderNode { class Negate : public ShaderNode { A_OBJECT(Negate, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Negate() { m_inputs.push_back(std::make_pair(a, MetaType::INVALID)); @@ -563,6 +695,10 @@ class Negate : public ShaderNode { class Saturate : public ShaderNode { A_OBJECT(Saturate, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Saturate() { m_inputs.push_back(std::make_pair("in", MetaType::INVALID)); @@ -582,6 +718,10 @@ class Saturate : public ShaderNode { class Scale : public ShaderNode { A_OBJECT(Scale, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Scale() { m_inputs.push_back(std::make_pair("In", MetaType::INVALID)); @@ -602,6 +742,10 @@ class Scale : public ShaderNode { class ScaleAndOffset : public ShaderNode { A_OBJECT(ScaleAndOffset, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ScaleAndOffset() { m_inputs.push_back(std::make_pair("In", MetaType::INVALID)); @@ -623,6 +767,10 @@ class ScaleAndOffset : public ShaderNode { class OneMinus : public ShaderNode { A_OBJECT(OneMinus, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: OneMinus() { m_inputs.push_back(std::make_pair("in", MetaType::INVALID)); @@ -642,6 +790,10 @@ class OneMinus : public ShaderNode { class TriangleWave : public ShaderNode { A_OBJECT(TriangleWave, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: TriangleWave() { m_inputs.push_back(std::make_pair("in", MetaType::INVALID)); @@ -661,6 +813,10 @@ class TriangleWave : public ShaderNode { class SquareWave : public ShaderNode { A_OBJECT(SquareWave, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: SquareWave() { m_inputs.push_back(std::make_pair("in", MetaType::INVALID)); @@ -680,6 +836,10 @@ class SquareWave : public ShaderNode { class SawtoothWave : public ShaderNode { A_OBJECT(SawtoothWave, ShaderNode, Shader/Math Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: SawtoothWave() { m_inputs.push_back(std::make_pair("in", MetaType::INVALID)); diff --git a/modules/editor/shadertools/converter/functions/matrixoperations.h b/modules/editor/shadertools/converter/functions/matrixoperations.h index 8d0b5fc78..efc0860b3 100644 --- a/modules/editor/shadertools/converter/functions/matrixoperations.h +++ b/modules/editor/shadertools/converter/functions/matrixoperations.h @@ -12,6 +12,8 @@ class MatrixOperation : public ShaderNode { A_PROPERTY(Vector4, Value2, MatrixOperation::value2, MatrixOperation::setValue2), A_PROPERTY(Vector4, Value3, MatrixOperation::value3, MatrixOperation::setValue3) ) + A_NOMETHODS() + A_NOENUMS() public: MatrixOperation() { @@ -102,6 +104,10 @@ class MatrixOperation : public ShaderNode { class Determinant : public MatrixOperation { A_OBJECT(Determinant, MatrixOperation, Shader/Matrix Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Determinant() { m_function = "determinant"; @@ -112,6 +118,10 @@ class Determinant : public MatrixOperation { class Inverse : public MatrixOperation { A_OBJECT(Inverse, MatrixOperation, Shader/Matrix Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Inverse() { m_function = "inverse"; @@ -122,6 +132,10 @@ class Inverse : public MatrixOperation { class Transpose : public MatrixOperation { A_OBJECT(Transpose, MatrixOperation, Shader/Matrix Operations) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Transpose() { m_function = "transpose"; @@ -138,6 +152,8 @@ class ExtractPosition : public ShaderNode { A_PROPERTY(Vector4, Vector2, ExtractPosition::value2, ExtractPosition::setValue2), A_PROPERTY(Vector4, Vector3, ExtractPosition::value3, ExtractPosition::setValue3) ) + A_NOMETHODS() + A_NOENUMS() public: ExtractPosition() { @@ -227,6 +243,8 @@ class MakeMatrix : public ShaderNode { A_PROPERTY(Vector4, Vector2, MakeMatrix::value2, MakeMatrix::setValue2), A_PROPERTY(Vector4, Vector3, MakeMatrix::value3, MakeMatrix::setValue3) ) + A_NOMETHODS() + A_NOENUMS() public: MakeMatrix() { diff --git a/modules/editor/shadertools/converter/functions/surface.h b/modules/editor/shadertools/converter/functions/surface.h index 1bd37f082..38d946f6b 100644 --- a/modules/editor/shadertools/converter/functions/surface.h +++ b/modules/editor/shadertools/converter/functions/surface.h @@ -9,6 +9,8 @@ class Fresnel : public ShaderNode { A_PROPERTIES( A_PROPERTY(float, Power, Fresnel::power, Fresnel::setPower) ) + A_NOMETHODS() + A_NOENUMS() public: Fresnel() : @@ -59,6 +61,10 @@ class Fresnel : public ShaderNode { class SurfaceDepth : public ShaderNode { A_OBJECT(SurfaceDepth, ShaderNode, Shader/Surface) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: SurfaceDepth() { m_inputs.push_back(std::make_pair("Vertex Position", MetaType::VECTOR3)); @@ -85,6 +91,10 @@ class SurfaceDepth : public ShaderNode { class WorldBitangent : public ShaderNode { A_OBJECT(WorldBitangent, ShaderNode, Shader/Surface) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: WorldBitangent() { m_outputs.push_back(std::make_pair("Output", MetaType::VECTOR3)); @@ -101,6 +111,10 @@ class WorldBitangent : public ShaderNode { class WorldNormal : public ShaderNode { A_OBJECT(WorldNormal, ShaderNode, Shader/Surface) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: WorldNormal() { m_outputs.push_back(std::make_pair("Output", MetaType::VECTOR3)); @@ -117,6 +131,10 @@ class WorldNormal : public ShaderNode { class WorldPosition : public ShaderNode { A_OBJECT(WorldPosition, ShaderNode, Shader/Surface) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: WorldPosition() { m_outputs.push_back(std::make_pair("Output", MetaType::VECTOR3)); @@ -133,6 +151,10 @@ class WorldPosition : public ShaderNode { class WorldTangent : public ShaderNode { A_OBJECT(WorldTangent, ShaderNode, Shader/Surface) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: WorldTangent() { m_outputs.push_back(std::make_pair("Output", MetaType::VECTOR3)); diff --git a/modules/editor/shadertools/converter/functions/texturesample.h b/modules/editor/shadertools/converter/functions/texturesample.h index 0bc21b570..0e03e5d38 100644 --- a/modules/editor/shadertools/converter/functions/texturesample.h +++ b/modules/editor/shadertools/converter/functions/texturesample.h @@ -8,6 +8,10 @@ class TextureFunction : public ShaderNode { A_OBJECT(TextureFunction, ShaderNode, Shader/Texture) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: TextureFunction() { } @@ -66,6 +70,8 @@ class TextureObject : public TextureFunction { A_PROPERTIES( A_PROPERTYEX(Texture *, Texture, TextureObject::texture, TextureObject::setTexture, "editor=Asset") ) + A_NOMETHODS() + A_NOENUMS() public: TextureObject() : @@ -105,6 +111,8 @@ class TextureSample : public TextureFunction { A_PROPERTIES( A_PROPERTYEX(Texture *, Texture, TextureSample::texture, TextureSample::setTexture, "editor=Asset") ) + A_NOMETHODS() + A_NOENUMS() public: TextureSample() : @@ -149,6 +157,8 @@ class RenderTargetSample : public TextureFunction { A_PROPERTIES( A_PROPERTY(TString, Target_Name, RenderTargetSample::targetName, RenderTargetSample::setTargetName) ) + A_NOMETHODS() + A_NOENUMS() public: RenderTargetSample() { @@ -181,6 +191,10 @@ class RenderTargetSample : public TextureFunction { class TextureSampleCube : public TextureSample { A_OBJECT(TextureSampleCube, TextureFunction, Shader/Texture) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: TextureSampleCube() { m_inputs.push_back(std::make_pair(UV, MetaType::VECTOR3)); diff --git a/modules/editor/shadertools/converter/functions/time.h b/modules/editor/shadertools/converter/functions/time.h index 825d761d3..cef67f1a7 100644 --- a/modules/editor/shadertools/converter/functions/time.h +++ b/modules/editor/shadertools/converter/functions/time.h @@ -9,6 +9,8 @@ class Time : public ShaderNode { A_PROPERTIES( A_PROPERTY(float, scale, Time::scale, Time::setScale) ) + A_NOMETHODS() + A_NOENUMS() public: Time() : @@ -53,6 +55,10 @@ class Time : public ShaderNode { class DeltaTime : public Time { A_OBJECT(DeltaTime, Time, Shader/Time) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: DeltaTime() { } @@ -64,6 +70,10 @@ class DeltaTime : public Time { class CosTime : public Time { A_OBJECT(CosTime, Time, Shader/Time) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: CosTime() { } @@ -75,6 +85,10 @@ class CosTime : public Time { class SinTime : public Time { A_OBJECT(SinTime, Time, Shader/Time) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: SinTime() { } diff --git a/modules/editor/shadertools/converter/functions/trigonometry.h b/modules/editor/shadertools/converter/functions/trigonometry.h index 172624717..c7b81244f 100644 --- a/modules/editor/shadertools/converter/functions/trigonometry.h +++ b/modules/editor/shadertools/converter/functions/trigonometry.h @@ -6,6 +6,10 @@ class ArcCosine : public ShaderNode { A_OBJECT(ArcCosine, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ArcCosine() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -24,6 +28,10 @@ class ArcCosine : public ShaderNode { class ArcSine : public ShaderNode { A_OBJECT(ArcSine, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ArcSine() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -42,6 +50,10 @@ class ArcSine : public ShaderNode { class ArcTangent : public ShaderNode { A_OBJECT(ArcTangent, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ArcTangent() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -60,6 +72,10 @@ class ArcTangent : public ShaderNode { class ArcTangent2 : public ShaderNode { A_OBJECT(ArcTangent2, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: ArcTangent2() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -79,6 +95,10 @@ class ArcTangent2 : public ShaderNode { class Cosine : public ShaderNode { A_OBJECT(Cosine, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Cosine() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -97,6 +117,10 @@ class Cosine : public ShaderNode { class CosineHyperbolic : public ShaderNode { A_OBJECT(CosineHyperbolic, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: CosineHyperbolic() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -115,6 +139,10 @@ class CosineHyperbolic : public ShaderNode { class Sine : public ShaderNode { A_OBJECT(Sine, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Sine() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -133,6 +161,10 @@ class Sine : public ShaderNode { class SineHyperbolic : public ShaderNode { A_OBJECT(SineHyperbolic, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: SineHyperbolic() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -151,6 +183,10 @@ class SineHyperbolic : public ShaderNode { class Tangent : public ShaderNode { A_OBJECT(Tangent, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Tangent() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -169,6 +205,10 @@ class Tangent : public ShaderNode { class TangentHyperbolic : public ShaderNode { A_OBJECT(TangentHyperbolic, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: TangentHyperbolic() { m_inputs.push_back(std::make_pair(a, MetaType::FLOAT)); @@ -187,6 +227,10 @@ class TangentHyperbolic : public ShaderNode { class Degrees : public ShaderNode { A_OBJECT(Degrees, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Degrees() { m_inputs.push_back(std::make_pair(r, MetaType::FLOAT)); @@ -205,6 +249,10 @@ class Degrees : public ShaderNode { class Radians : public ShaderNode { A_OBJECT(Radians, ShaderNode, Shader/Trigonometry Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Radians() { m_inputs.push_back(std::make_pair(r, MetaType::FLOAT)); diff --git a/modules/editor/shadertools/converter/functions/vectoroperator.h b/modules/editor/shadertools/converter/functions/vectoroperator.h index e53665ac4..d05d11377 100644 --- a/modules/editor/shadertools/converter/functions/vectoroperator.h +++ b/modules/editor/shadertools/converter/functions/vectoroperator.h @@ -13,6 +13,10 @@ class VectorOperator : public ShaderNode { class CrossProduct : public ShaderNode { A_OBJECT(CrossProduct, ShaderNode, Shader/Vector Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: CrossProduct() { m_inputs.push_back(std::make_pair(a, MetaType::INVALID)); @@ -32,6 +36,10 @@ class CrossProduct : public ShaderNode { class Distance : public ShaderNode { A_OBJECT(Distance, ShaderNode, Shader/Vector Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Distance() { m_inputs.push_back(std::make_pair(a, MetaType::INVALID)); @@ -51,6 +59,10 @@ class Distance : public ShaderNode { class DotProduct : public ShaderNode { A_OBJECT(DotProduct, ShaderNode, Shader/Vector Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: DotProduct() { m_inputs.push_back(std::make_pair(a, MetaType::INVALID)); @@ -70,6 +82,10 @@ class DotProduct : public ShaderNode { class Length : public ShaderNode { A_OBJECT(Length, ShaderNode, Shader/Vector Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Length() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -88,6 +104,10 @@ class Length : public ShaderNode { class Normalize : public ShaderNode { A_OBJECT(Normalize, ShaderNode, Shader/Vector Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Normalize() { m_inputs.push_back(std::make_pair(x, MetaType::INVALID)); @@ -106,6 +126,10 @@ class Normalize : public ShaderNode { class Reflect : public ShaderNode { A_OBJECT(Reflect, ShaderNode, Shader/Vector Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Reflect() { m_inputs.push_back(std::make_pair("i", MetaType::VECTOR3)); @@ -125,6 +149,10 @@ class Reflect : public ShaderNode { class Refract : public ShaderNode { A_OBJECT(Refract, ShaderNode, Shader/Vector Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Refract() { m_inputs.push_back(std::make_pair("i", MetaType::VECTOR3)); @@ -145,6 +173,10 @@ class Refract : public ShaderNode { class Append : public VectorOperator { A_OBJECT(Append, ShaderNode, Shader/Vector Operators) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Append() { m_inputs.push_back(std::make_pair(x, MetaType::FLOAT)); @@ -212,7 +244,8 @@ class Split : public VectorOperator { A_PROPERTY(float, default_Z, Split::valueZ, Split::setValueZ), A_PROPERTY(float, default_W, Split::valueW, Split::setValueW) ) - + A_NOMETHODS() + A_NOENUMS() public: Split() { @@ -288,6 +321,7 @@ class Swizzle : public VectorOperator { A_PROPERTY(float, default_Z, Swizzle::valueZ, Swizzle::setValueZ), A_PROPERTY(float, default_W, Swizzle::valueW, Swizzle::setValueW) ) + A_NOMETHODS() A_ENUMS( A_ENUM(Components, A_VALUE(X), @@ -388,6 +422,8 @@ class Mask : public VectorOperator { A_PROPERTY(bool, B, Mask::b, Mask::setB), A_PROPERTY(bool, A, Mask::a, Mask::setA) ) + A_NOMETHODS() + A_NOENUMS() public: Mask() : diff --git a/modules/editor/shadertools/converter/rootnode.h b/modules/editor/shadertools/converter/rootnode.h index 38df8858a..ff59e846a 100644 --- a/modules/editor/shadertools/converter/rootnode.h +++ b/modules/editor/shadertools/converter/rootnode.h @@ -10,7 +10,7 @@ class ShaderRootNode : public GraphNode { A_OBJECT(ShaderRootNode, GraphNode, Graph) A_PROPERTIES( - A_PROPERTYEX(Type, materialType, ShaderRootNode::materialType, ShaderRootNode::setMaterialType, "enum=Type"), + A_PROPERTYEX(MaterialType, materialType, ShaderRootNode::materialType, ShaderRootNode::setMaterialType, "enum=MaterialType"), A_PROPERTYEX(LightModel, lightingModel, ShaderRootNode::lightModel, ShaderRootNode::setLightModel, "enum=LightModel"), A_PROPERTY(bool, wireFrame, ShaderRootNode::isWireframe, ShaderRootNode::setWireframe), A_PROPERTY(bool, twoSided, ShaderRootNode::isDoubleSided, ShaderRootNode::setDoubleSided), @@ -44,7 +44,7 @@ class ShaderRootNode : public GraphNode { ) A_ENUMS( - A_ENUM(Type, + A_ENUM(MaterialType, A_VALUE(Surface), A_VALUE(PostProcess), A_VALUE(LightFunction)), @@ -99,7 +99,7 @@ class ShaderRootNode : public GraphNode { public: - enum Type { + enum MaterialType { Surface, PostProcess, LightFunction diff --git a/modules/editor/shadertools/converter/shadergraph.cpp b/modules/editor/shadertools/converter/shadergraph.cpp index bc1bf4f75..b9de63391 100644 --- a/modules/editor/shadertools/converter/shadergraph.cpp +++ b/modules/editor/shadertools/converter/shadergraph.cpp @@ -72,6 +72,9 @@ ShaderGraph::ShaderGraph() : scanForCustomFunctions(); + // Base + ShaderNode::registerClassFactory(Engine::resourceSystem()); + // Constants ConstColor::registerClassFactory(Engine::resourceSystem()); ConstPi::registerClassFactory(Engine::resourceSystem()); @@ -106,6 +109,8 @@ ShaderGraph::ShaderGraph() : ParamVector::registerClassFactory(Engine::resourceSystem()); // Texture + TextureFunction::registerClassFactory(Engine::resourceSystem()); + TextureObject::registerClassFactory(Engine::resourceSystem()); TextureSample::registerClassFactory(Engine::resourceSystem()); RenderTargetSample::registerClassFactory(Engine::resourceSystem()); @@ -141,6 +146,9 @@ ShaderGraph::ShaderGraph() : Smoothstep::registerClassFactory(Engine::resourceSystem()); SquareRoot::registerClassFactory(Engine::resourceSystem()); Step::registerClassFactory(Engine::resourceSystem()); + + MathOperation::registerClassFactory(Engine::resourceSystem()); + Subtraction::registerClassFactory(Engine::resourceSystem()); Truncate::registerClassFactory(Engine::resourceSystem()); InverseLerp::registerClassFactory(Engine::resourceSystem()); @@ -157,6 +165,8 @@ ShaderGraph::ShaderGraph() : SawtoothWave::registerClassFactory(Engine::resourceSystem()); // Matrix operations + MatrixOperation::registerClassFactory(Engine::resourceSystem()); + Determinant::registerClassFactory(Engine::resourceSystem()); Inverse::registerClassFactory(Engine::resourceSystem()); Transpose::registerClassFactory(Engine::resourceSystem()); diff --git a/modules/uikit/includes/components/abstractslider.h b/modules/uikit/includes/components/abstractslider.h index 1f3f09088..36055bacc 100644 --- a/modules/uikit/includes/components/abstractslider.h +++ b/modules/uikit/includes/components/abstractslider.h @@ -9,7 +9,7 @@ class UIKIT_EXPORT AbstractSlider : public Widget { A_OBJECT(AbstractSlider, Widget, General) A_PROPERTIES( - A_PROPERTYEX(int, orientation, AbstractSlider::orientation, AbstractSlider::setOrientation, "enum=Orientation"), + A_PROPERTYEX(Orientation, orientation, AbstractSlider::orientation, AbstractSlider::setOrientation, "enum=Orientation"), A_PROPERTY(int, value, AbstractSlider::value, AbstractSlider::setValue), A_PROPERTY(int, minimum, AbstractSlider::minimum, AbstractSlider::setMinimum), A_PROPERTY(int, maximum, AbstractSlider::maximum, AbstractSlider::setMaximum), @@ -48,7 +48,7 @@ class UIKIT_EXPORT AbstractSlider : public Widget { virtual void setMaximum(int maximum); Widget *knob() const; - void setKnob(Widget *handle); + void setKnob(Widget *knob); public: // signals void pressed(); @@ -63,9 +63,11 @@ class UIKIT_EXPORT AbstractSlider : public Widget { int m_minimum; int m_maximum; + int m_orientation; + float m_currentFade; - int m_orientation; + float m_areaGap; bool m_hovered; diff --git a/modules/uikit/includes/components/progressbar.h b/modules/uikit/includes/components/progressbar.h index 4dda83b47..4c7f99ffd 100644 --- a/modules/uikit/includes/components/progressbar.h +++ b/modules/uikit/includes/components/progressbar.h @@ -7,7 +7,7 @@ class UIKIT_EXPORT ProgressBar : public Widget { A_OBJECT(ProgressBar, Widget, Components/UI) A_PROPERTIES( - A_PROPERTYEX(int, orientation, ProgressBar::orientation, ProgressBar::setOrientation, "enum=Orientation"), + A_PROPERTYEX(ProgressOrientation, orientation, ProgressBar::orientation, ProgressBar::setOrientation, "enum=ProgressOrientation"), A_PROPERTY(float, from, ProgressBar::from, ProgressBar::setFrom), A_PROPERTY(float, to, ProgressBar::to, ProgressBar::setTo), A_PROPERTY(float, value, ProgressBar::value, ProgressBar::setValue), @@ -18,14 +18,14 @@ class UIKIT_EXPORT ProgressBar : public Widget { ) A_NOMETHODS() A_ENUMS( - A_ENUM(Orientation, + A_ENUM(BarOrientation, A_VALUE(Horizontal), A_VALUE(Vertical) ) ) public: - enum Orientation { + enum ProgressOrientation { Horizontal, Vertical }; diff --git a/modules/uikit/includes/components/recttransform.h b/modules/uikit/includes/components/recttransform.h index b4cbd4ca0..7092b6e08 100644 --- a/modules/uikit/includes/components/recttransform.h +++ b/modules/uikit/includes/components/recttransform.h @@ -34,27 +34,27 @@ class UIKIT_EXPORT RectTransform : public Transform { ~RectTransform(); Vector2 size() const; - void setSize(const Vector2 size); + void setSize(const Vector2 &size); Vector2 pivot() const; - void setPivot(const Vector2 pivot); + void setPivot(const Vector2 &pivot); Vector2 minAnchors() const; - void setMinAnchors(const Vector2 anchors); + void setMinAnchors(const Vector2 &anchors); Vector2 maxAnchors() const; - void setMaxAnchors(const Vector2 anchors); + void setMaxAnchors(const Vector2 &anchors); - void setAnchors(const Vector2 minimum, const Vector2 maximum); + void setAnchors(const Vector2 &minimum, const Vector2 &maximum); Vector4 margin() const; - void setMargin(const Vector4 margin); + void setMargin(const Vector4 &margin); Vector4 border() const; - void setBorder(const Vector4 border); + void setBorder(const Vector4 &border); Vector4 padding() const; - void setPadding(const Vector4 padding); + void setPadding(const Vector4 &padding); bool mouseTracking() const; void setMouseTracking(bool tracking); diff --git a/modules/uikit/includes/components/scrollbar.h b/modules/uikit/includes/components/scrollbar.h new file mode 100644 index 000000000..49499c2b9 --- /dev/null +++ b/modules/uikit/includes/components/scrollbar.h @@ -0,0 +1,56 @@ +#ifndef SCROLLBAR_H +#define SCROLLBAR_H + +#include "abstractslider.h" + +class UIKIT_EXPORT ScrollBar : public AbstractSlider { + A_OBJECT(ScrollBar, AbstractSlider, Components/UI) + + A_NOPROPERTIES() + A_METHODS( + A_SLOT(ScrollBar::stepBack), + A_SLOT(ScrollBar::stepFront) + ) + A_NOENUMS() + +public: + ScrollBar(); + + void setValue(int value) override; + void setMinimum(int value) override; + void setMaximum(int value) override; + + void setOrientation(int value) override; + + int pageStep() const; + void setPageStep(int page); + + int singleStep() const; + void setSingleStep(int step); + + void stepBack(); + void stepFront(); + + Widget *backArrow() const; + void setBackArrow(Widget *arrow); + + Widget *frontArrow() const; + void setFrontArrow(Widget *arrow); + +private: + void recalcKnob(); + + void boundChanged(const Vector2 &size) override; + + void update() override; + + void composeComponent() override; + +private: + int m_pageStep; + + int m_singleStep; + +}; + +#endif // SCROLLBAR_H diff --git a/modules/uikit/includes/components/slider.h b/modules/uikit/includes/components/slider.h index c2b01b15b..d854b252d 100644 --- a/modules/uikit/includes/components/slider.h +++ b/modules/uikit/includes/components/slider.h @@ -8,6 +8,10 @@ class ProgressBar; class UIKIT_EXPORT Slider : public AbstractSlider { A_OBJECT(Slider, AbstractSlider, Components/UI) + A_NOPROPERTIES() + A_NOMETHODS() + A_NOENUMS() + public: Slider(); diff --git a/modules/uikit/src/components/abstractslider.cpp b/modules/uikit/src/components/abstractslider.cpp index df9a69385..801887d41 100644 --- a/modules/uikit/src/components/abstractslider.cpp +++ b/modules/uikit/src/components/abstractslider.cpp @@ -3,20 +3,24 @@ #include "components/recttransform.h" #include "components/frame.h" +#include #include namespace { const char *gKnob("knob"); const char *gFrameClass("Frame"); + + const float gFadeDuration = 0.2f; } AbstractSlider::AbstractSlider() : m_value(2), m_minimum(0), m_maximum(10), - m_currentFade(1.0f), m_orientation(Horizontal), + m_currentFade(1.0f), + m_areaGap(0.0f), m_hovered(false) { } @@ -34,6 +38,7 @@ int AbstractSlider::value() const { } void AbstractSlider::setValue(int value) { + value = CLAMP(value, m_minimum, m_maximum); if(m_value != value) { m_value = value; @@ -61,9 +66,61 @@ Widget *AbstractSlider::knob() const { return static_cast(subWidget(gKnob)); } -void AbstractSlider::setKnob(Widget *handle) { - setSubWidget(handle); +void AbstractSlider::setKnob(Widget *knob) { + setSubWidget(knob); } void AbstractSlider::update() { + Vector4 pos = Input::mousePosition(); + if(Input::touchCount() > 0) { + pos = Input::touchPosition(0); + } + + RectTransform *rect = rectTransform(); + + bool hover = rect->isHovered(pos.x, pos.y); + if(m_hovered != hover) { + m_currentFade = 0.0f; + m_hovered = hover; + } + + if(m_hovered) { + if(Input::isMouseButtonDown(Input::MOUSE_LEFT) || (Input::touchCount() > 0 && Input::touchState(0) == Input::TOUCH_BEGAN)) { + m_currentFade = 0.0f; + + Widget::setFocusWidget(this); + + emitSignal(_SIGNAL(pressed())); + } + + if((Input::isMouseButton(Input::MOUSE_LEFT) || Input::touchCount() > 0)) { + Vector3 min, max; + rect->bound().box(min, max); + if(m_orientation == Horizontal) { + min.x += m_areaGap; + max.x -= m_areaGap; + } else { + min.y += m_areaGap; + max.y -= m_areaGap; + } + + Vector2 local(Vector2(pos.x, pos.y) - min); + Vector2 factor(local.x / (max.x - min.x), local.y / (max.y - min.y)); + + float f = (m_orientation == Horizontal) ? factor.x : (m_areaGap > 0.0f ? 1.0f - factor.y : factor.y); + if(f >= 0.0f && f <= 1.0f) { + int newValue = round(MIX(m_minimum, m_maximum, f)); + if(newValue != m_value) { + setValue(newValue); + + emitSignal(_SIGNAL(valueChanged(int)), newValue); + } + } + } + } + + if(m_currentFade < 1.0f) { + m_currentFade += 1.0f / gFadeDuration * Timer::deltaTime(); + m_currentFade = CLAMP(m_currentFade, 0.0f, 1.0f); + } } diff --git a/modules/uikit/src/components/image.cpp b/modules/uikit/src/components/image.cpp index b59e72d30..9d7c17a4e 100644 --- a/modules/uikit/src/components/image.cpp +++ b/modules/uikit/src/components/image.cpp @@ -66,8 +66,8 @@ void Image::draw(CommandBuffer &buffer) { Vector2 scl(m_size.x / (extent.x * 2.0f), m_size.y / (extent.y * 2.0f)); for(auto &it : m_mesh->vertices()) { - it.x = (it.x + extent.x) * scl.x; - it.y = (it.y + extent.y) * scl.y; + it.x = it.x * scl.x; + it.y = it.y * scl.y; } } } else { @@ -81,7 +81,16 @@ void Image::draw(CommandBuffer &buffer) { m_dirty = false; } - m_material->setTransform(rectTransform()); + RectTransform *rect = rectTransform(); + Matrix4 mat(rect->worldTransform()); + + const Vector3Vector &verts(m_mesh->vertices()); + Vector2 scl(rect->worldScale()); + + mat[12] -= verts[0].x * scl.x; + mat[13] -= verts[0].y * scl.y; + + m_material->setTransform(mat); buffer.drawMesh(m_mesh, 0, Material::Translucent, *m_material); @@ -215,10 +224,10 @@ void Image::boundChanged(const Vector2 &size) { */ void Image::makeDefaultMesh() { m_mesh->setVertices({ - { 0.0f, 0.0f, 0.0f}, - { 0.0f, m_size.y, 0.0f}, - {m_size.x, m_size.y, 0.0f}, - {m_size.x, 0.0f, 0.0f}, + {-m_size.x * 0.5f,-m_size.y * 0.5f, 0.0f}, + {-m_size.x * 0.5f, m_size.y * 0.5f, 0.0f}, + { m_size.x * 0.5f, m_size.y * 0.5f, 0.0f}, + { m_size.x * 0.5f,-m_size.y * 0.5f, 0.0f}, }); m_mesh->setUv0({ {0.0f, 0.0f}, diff --git a/modules/uikit/src/components/recttransform.cpp b/modules/uikit/src/components/recttransform.cpp index 1df24a765..5021953d7 100644 --- a/modules/uikit/src/components/recttransform.cpp +++ b/modules/uikit/src/components/recttransform.cpp @@ -45,7 +45,7 @@ Vector2 RectTransform::size() const { /*! Sets the \a size of the RectTransform. */ -void RectTransform::setSize(const Vector2 size) { +void RectTransform::setSize(const Vector2 &size) { if(m_size != size) { if(abs(m_minAnchors.x - m_maxAnchors.x) <= EPSILON) { m_size.x = size.x - m_margin.y - m_margin.w; @@ -68,7 +68,7 @@ Vector2 RectTransform::pivot() const { /*! Sets the \a pivot point of the RectTransform. */ -void RectTransform::setPivot(const Vector2 pivot) { +void RectTransform::setPivot(const Vector2 &pivot) { if(m_pivot != pivot) { m_pivot = pivot; @@ -85,7 +85,7 @@ Vector2 RectTransform::minAnchors() const { /*! Sets the minimum \a anchors of the RectTransform. */ -void RectTransform::setMinAnchors(const Vector2 anchors) { +void RectTransform::setMinAnchors(const Vector2 &anchors) { if(m_minAnchors != anchors) { m_minAnchors = anchors; @@ -102,7 +102,7 @@ Vector2 RectTransform::maxAnchors() const { /*! Sets the maximum \a anchors of the RectTransform. */ -void RectTransform::setMaxAnchors(const Vector2 anchors) { +void RectTransform::setMaxAnchors(const Vector2 &anchors) { if(m_maxAnchors != anchors) { m_maxAnchors = anchors; @@ -113,7 +113,7 @@ void RectTransform::setMaxAnchors(const Vector2 anchors) { /*! Sets both the \a minimum and \a maximum anchors of the RectTransform. */ -void RectTransform::setAnchors(const Vector2 minimum, const Vector2 maximum) { +void RectTransform::setAnchors(const Vector2 &minimum, const Vector2 &maximum) { if(m_minAnchors != minimum) { m_minAnchors = minimum; } @@ -135,7 +135,7 @@ Vector4 RectTransform::margin() const { /*! Sets the top, right, bottom and left \a margin offsets of the RectTransform. */ -void RectTransform::setMargin(const Vector4 margin) { +void RectTransform::setMargin(const Vector4 &margin) { if(m_margin != margin) { m_margin = margin; @@ -153,7 +153,7 @@ Vector4 RectTransform::border() const { /*! Sets the top, right, bottom and left \a border width of the RectTransform. */ -void RectTransform::setBorder(const Vector4 border) { +void RectTransform::setBorder(const Vector4 &border) { if(m_border != border) { m_border = border; @@ -171,7 +171,7 @@ Vector4 RectTransform::padding() const { /*! Sets the top, right, bottom and left \a padding offsets of the RectTransform. */ -void RectTransform::setPadding(const Vector4 padding) { +void RectTransform::setPadding(const Vector4 &padding) { if(m_padding != padding) { m_padding = padding; diff --git a/modules/uikit/src/components/scrollbar.cpp b/modules/uikit/src/components/scrollbar.cpp new file mode 100644 index 000000000..5811a0606 --- /dev/null +++ b/modules/uikit/src/components/scrollbar.cpp @@ -0,0 +1,275 @@ +#include "components/scrollbar.h" + +#include "components/frame.h" + +#include +#include +#include +#include + +namespace { + const char *gKnob("knob"); + const char *gBackArrow("backArrow"); + const char *gFrontArrow("frontArrow"); + + const char *gFrameClass("Frame"); + const char *gButtonClass("Button"); + + const char *gUiSprite(".embedded/ui.png"); + const char *gSpriteArrow("Arrow"); +} + +ScrollBar::ScrollBar() : + m_pageStep(2), + m_singleStep(1) { + + m_areaGap = 20.0f; +} + +void ScrollBar::setValue(int value) { + AbstractSlider::setValue(value); + + recalcKnob(); +} + +void ScrollBar::setMinimum(int value) { + AbstractSlider::setMinimum(value); + + recalcKnob(); +} + +void ScrollBar::setMaximum(int value) { + AbstractSlider::setMaximum(value); + + recalcKnob(); +} + +void ScrollBar::setOrientation(int value) { + AbstractSlider::setOrientation(value); + + setBackArrow(backArrow()); + setFrontArrow(frontArrow()); + + recalcKnob(); +} + +int ScrollBar::pageStep() const { + return m_pageStep; +} + +void ScrollBar::setPageStep(int page) { + m_pageStep = page; + + recalcKnob(); +} + +int ScrollBar::singleStep() const { + return m_singleStep; +} + +void ScrollBar::setSingleStep(int step) { + m_singleStep = step; +} + +void ScrollBar::stepBack() { + setValue(m_value - m_singleStep); +} + +void ScrollBar::stepFront() { + setValue(m_value + m_singleStep); +} + +Widget *ScrollBar::backArrow() const { + return subWidget(gBackArrow); +} + +void ScrollBar::setBackArrow(Widget *arrow) { + Button *button = dynamic_cast