Changing edited fade category properly updates widgets in edit window

This commit is contained in:
Olivier Prat 2017-06-29 17:14:20 +02:00
parent fb33b8d1c1
commit c5ca23f4ea
5 changed files with 290 additions and 228 deletions

View file

@ -94,29 +94,46 @@ void FadeSwitchJob::distribute(const render::RenderContextPointer& renderContext
void FadeJobConfig::setEditedCategory(int value) { void FadeJobConfig::setEditedCategory(int value) {
assert(value < EVENT_CATEGORY_COUNT); assert(value < EVENT_CATEGORY_COUNT);
editedCategory = std::min<int>(EVENT_CATEGORY_COUNT, value); editedCategory = std::min<int>(EVENT_CATEGORY_COUNT, value);
emit dirtyCategory();
emit dirty(); emit dirty();
} }
void FadeJobConfig::setDuration(float value) { void FadeJobConfig::setDuration(float value) {
duration[editedCategory] = value; _duration[editedCategory] = value;
emit dirty(); emit dirty();
} }
float FadeJobConfig::getDuration() const {
return _duration[editedCategory];
}
void FadeJobConfig::setBaseSizeX(float value) { void FadeJobConfig::setBaseSizeX(float value) {
baseSize[editedCategory].x = FADE_MIN_SCALE*powf(FADE_MAX_SCALE/ FADE_MIN_SCALE, value); baseSize[editedCategory].x = FADE_MIN_SCALE*powf(FADE_MAX_SCALE/ FADE_MIN_SCALE, value);
emit dirty(); emit dirty();
} }
float FadeJobConfig::getBaseSizeX() const {
return logf(baseSize[editedCategory].x / FADE_MIN_SCALE) / logf(FADE_MAX_SCALE / FADE_MIN_SCALE);
}
void FadeJobConfig::setBaseSizeY(float value) { void FadeJobConfig::setBaseSizeY(float value) {
baseSize[editedCategory].y = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value); baseSize[editedCategory].y = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty(); emit dirty();
} }
float FadeJobConfig::getBaseSizeY() const {
return logf(baseSize[editedCategory].y / FADE_MIN_SCALE) / logf(FADE_MAX_SCALE / FADE_MIN_SCALE);
}
void FadeJobConfig::setBaseSizeZ(float value) { void FadeJobConfig::setBaseSizeZ(float value) {
baseSize[editedCategory].z = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value); baseSize[editedCategory].z = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty(); emit dirty();
} }
float FadeJobConfig::getBaseSizeZ() const {
return logf(baseSize[editedCategory].z / FADE_MIN_SCALE) / logf(FADE_MAX_SCALE / FADE_MIN_SCALE);
}
void FadeJobConfig::setBaseLevel(float value) { void FadeJobConfig::setBaseLevel(float value) {
baseLevel[editedCategory] = value; baseLevel[editedCategory] = value;
emit dirty(); emit dirty();
@ -127,21 +144,37 @@ void FadeJobConfig::setBaseInverted(bool value) {
emit dirty(); emit dirty();
} }
bool FadeJobConfig::isBaseInverted() const {
return baseInverted[editedCategory];
}
void FadeJobConfig::setNoiseSizeX(float value) { void FadeJobConfig::setNoiseSizeX(float value) {
noiseSize[editedCategory].x = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value); noiseSize[editedCategory].x = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty(); emit dirty();
} }
float FadeJobConfig::getNoiseSizeX() const {
return logf(noiseSize[editedCategory].x / FADE_MIN_SCALE) / logf(FADE_MAX_SCALE / FADE_MIN_SCALE);
}
void FadeJobConfig::setNoiseSizeY(float value) { void FadeJobConfig::setNoiseSizeY(float value) {
noiseSize[editedCategory].y = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value); noiseSize[editedCategory].y = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty(); emit dirty();
} }
float FadeJobConfig::getNoiseSizeY() const {
return logf(noiseSize[editedCategory].y / FADE_MIN_SCALE) / logf(FADE_MAX_SCALE / FADE_MIN_SCALE);
}
void FadeJobConfig::setNoiseSizeZ(float value) { void FadeJobConfig::setNoiseSizeZ(float value) {
noiseSize[editedCategory].z = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value); noiseSize[editedCategory].z = FADE_MIN_SCALE*powf(FADE_MAX_SCALE / FADE_MIN_SCALE, value);
emit dirty(); emit dirty();
} }
float FadeJobConfig::getNoiseSizeZ() const {
return logf(noiseSize[editedCategory].z / FADE_MIN_SCALE) / logf(FADE_MAX_SCALE / FADE_MIN_SCALE);
}
void FadeJobConfig::setNoiseLevel(float value) { void FadeJobConfig::setNoiseLevel(float value) {
noiseLevel[editedCategory] = value; noiseLevel[editedCategory] = value;
emit dirty(); emit dirty();
@ -152,6 +185,10 @@ void FadeJobConfig::setEdgeWidth(float value) {
emit dirty(); emit dirty();
} }
float FadeJobConfig::getEdgeWidth() const {
return sqrtf(edgeWidth[editedCategory]);
}
void FadeJobConfig::setEdgeInnerColorR(float value) { void FadeJobConfig::setEdgeInnerColorR(float value) {
edgeInnerColor[editedCategory].r = value; edgeInnerColor[editedCategory].r = value;
emit dirty(); emit dirty();
@ -205,7 +242,7 @@ void FadeConfigureJob::configure(const Config& config) {
for (auto i = 0; i < FadeJobConfig::EVENT_CATEGORY_COUNT; i++) { for (auto i = 0; i < FadeJobConfig::EVENT_CATEGORY_COUNT; i++) {
auto& configuration = _configurations[i]; auto& configuration = _configurations[i];
_parameters->_durations[i] = config.duration[i]; _parameters->_durations[i] = config._duration[i];
configuration._baseInvSizeAndLevel.x = 1.f / config.baseSize[i].x; configuration._baseInvSizeAndLevel.x = 1.f / config.baseSize[i].x;
configuration._baseInvSizeAndLevel.y = 1.f / config.baseSize[i].y; configuration._baseInvSizeAndLevel.y = 1.f / config.baseSize[i].y;
configuration._baseInvSizeAndLevel.z = 1.f / config.baseSize[i].z; configuration._baseInvSizeAndLevel.z = 1.f / config.baseSize[i].z;

View file

@ -32,7 +32,7 @@ signals:
class FadeJobConfig : public render::Job::Config { class FadeJobConfig : public render::Job::Config {
Q_OBJECT Q_OBJECT
Q_PROPERTY(int editedCategory MEMBER editedCategory WRITE setEditedCategory NOTIFY dirty) Q_PROPERTY(int editedCategory MEMBER editedCategory WRITE setEditedCategory NOTIFY dirtyCategory)
Q_PROPERTY(float duration READ getDuration WRITE setDuration NOTIFY dirty) Q_PROPERTY(float duration READ getDuration WRITE setDuration NOTIFY dirty)
Q_PROPERTY(float baseSizeX READ getBaseSizeX WRITE setBaseSizeX NOTIFY dirty) Q_PROPERTY(float baseSizeX READ getBaseSizeX WRITE setBaseSizeX NOTIFY dirty)
Q_PROPERTY(float baseSizeY READ getBaseSizeY WRITE setBaseSizeY NOTIFY dirty) Q_PROPERTY(float baseSizeY READ getBaseSizeY WRITE setBaseSizeY NOTIFY dirty)
@ -69,37 +69,37 @@ public:
void setEditedCategory(int value); void setEditedCategory(int value);
void setDuration(float value); void setDuration(float value);
float getDuration() const { return duration[editedCategory]; } float getDuration() const;
void setBaseSizeX(float value); void setBaseSizeX(float value);
float getBaseSizeX() const { return baseSize[editedCategory].x; } float getBaseSizeX() const;
void setBaseSizeY(float value); void setBaseSizeY(float value);
float getBaseSizeY() const { return baseSize[editedCategory].y; } float getBaseSizeY() const;
void setBaseSizeZ(float value); void setBaseSizeZ(float value);
float getBaseSizeZ() const { return baseSize[editedCategory].z; } float getBaseSizeZ() const;
void setBaseLevel(float value); void setBaseLevel(float value);
float getBaseLevel() const { return baseLevel[editedCategory]; } float getBaseLevel() const { return baseLevel[editedCategory]; }
void setBaseInverted(bool value); void setBaseInverted(bool value);
bool isBaseInverted() const { return baseInverted[editedCategory]; } bool isBaseInverted() const;
void setNoiseSizeX(float value); void setNoiseSizeX(float value);
float getNoiseSizeX() const { return noiseSize[editedCategory].x; } float getNoiseSizeX() const;
void setNoiseSizeY(float value); void setNoiseSizeY(float value);
float getNoiseSizeY() const { return noiseSize[editedCategory].y; } float getNoiseSizeY() const;
void setNoiseSizeZ(float value); void setNoiseSizeZ(float value);
float getNoiseSizeZ() const { return noiseSize[editedCategory].z; } float getNoiseSizeZ() const;
void setNoiseLevel(float value); void setNoiseLevel(float value);
float getNoiseLevel() const { return noiseLevel[editedCategory]; } float getNoiseLevel() const { return noiseLevel[editedCategory]; }
void setEdgeWidth(float value); void setEdgeWidth(float value);
float getEdgeWidth() const { return edgeWidth[editedCategory]; } float getEdgeWidth() const;
void setEdgeInnerColorR(float value); void setEdgeInnerColorR(float value);
float getEdgeInnerColorR() const { return edgeInnerColor[editedCategory].r; } float getEdgeInnerColorR() const { return edgeInnerColor[editedCategory].r; }
@ -127,11 +127,11 @@ public:
int editedCategory{ ELEMENT_ENTER_LEAVE_DOMAIN }; int editedCategory{ ELEMENT_ENTER_LEAVE_DOMAIN };
glm::vec3 baseSize[EVENT_CATEGORY_COUNT]{ glm::vec3 baseSize[EVENT_CATEGORY_COUNT]{
{ 0.35f, 0.35f, 0.35f }, // ELEMENT_ENTER_LEAVE_DOMAIN { 0.4f, 0.4f, 0.4f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 0.35f, 0.35f, 0.35f }, // BUBBLE_ISECT_OWNER { 0.4f, 0.4f, 0.4f }, // BUBBLE_ISECT_OWNER
{ 0.35f, 0.35f, 0.35f }, // BUBBLE_ISECT_TRESPASSER { 0.4f, 0.4f, 0.4f }, // BUBBLE_ISECT_TRESPASSER
{ 0.35f, 0.35f, 0.35f }, // USER_ENTER_LEAVE_DOMAIN { 0.875f, 0.4f, 0.875f }, // USER_ENTER_LEAVE_DOMAIN
{ 0.35f, 0.35f, 0.35f }, // AVATAR_CHANGE { 0.4f, 0.4f, 0.4f }, // AVATAR_CHANGE
}; };
float baseLevel[EVENT_CATEGORY_COUNT]{ float baseLevel[EVENT_CATEGORY_COUNT]{
1.0f, // ELEMENT_ENTER_LEAVE_DOMAIN 1.0f, // ELEMENT_ENTER_LEAVE_DOMAIN
@ -144,15 +144,15 @@ public:
false, // ELEMENT_ENTER_LEAVE_DOMAIN false, // ELEMENT_ENTER_LEAVE_DOMAIN
false, // BUBBLE_ISECT_OWNER false, // BUBBLE_ISECT_OWNER
false, // BUBBLE_ISECT_TRESPASSER false, // BUBBLE_ISECT_TRESPASSER
false, // USER_ENTER_LEAVE_DOMAIN true, // USER_ENTER_LEAVE_DOMAIN
false, // AVATAR_CHANGE false, // AVATAR_CHANGE
}; };
glm::vec3 noiseSize[EVENT_CATEGORY_COUNT]{ glm::vec3 noiseSize[EVENT_CATEGORY_COUNT]{
{ 0.35f, 0.35f, 0.35f }, // ELEMENT_ENTER_LEAVE_DOMAIN { 0.41f, 0.41f, 0.41f }, // ELEMENT_ENTER_LEAVE_DOMAIN
{ 0.35f, 0.35f, 0.35f }, // BUBBLE_ISECT_OWNER { 0.4f, 0.4f, 0.4f }, // BUBBLE_ISECT_OWNER
{ 0.35f, 0.35f, 0.35f }, // BUBBLE_ISECT_TRESPASSER { 0.4f, 0.4f, 0.4f }, // BUBBLE_ISECT_TRESPASSER
{ 0.35f, 0.35f, 0.35f }, // USER_ENTER_LEAVE_DOMAIN { 0.4f, 0.4f, 0.4f }, // USER_ENTER_LEAVE_DOMAIN
{ 0.35f, 0.35f, 0.35f }, // AVATAR_CHANGE { 0.4f, 0.4f, 0.4f }, // AVATAR_CHANGE
}; };
float noiseLevel[EVENT_CATEGORY_COUNT]{ float noiseLevel[EVENT_CATEGORY_COUNT]{
1.0f, // ELEMENT_ENTER_LEAVE_DOMAIN 1.0f, // ELEMENT_ENTER_LEAVE_DOMAIN
@ -161,18 +161,18 @@ public:
1.0f, // USER_ENTER_LEAVE_DOMAIN 1.0f, // USER_ENTER_LEAVE_DOMAIN
1.0f, // AVATAR_CHANGE 1.0f, // AVATAR_CHANGE
}; };
float duration[EVENT_CATEGORY_COUNT]{ float _duration[EVENT_CATEGORY_COUNT]{
5.0f, // ELEMENT_ENTER_LEAVE_DOMAIN 4.0f, // ELEMENT_ENTER_LEAVE_DOMAIN
0.0f, // BUBBLE_ISECT_OWNER 0.0f, // BUBBLE_ISECT_OWNER
0.0f, // BUBBLE_ISECT_TRESPASSER 0.0f, // BUBBLE_ISECT_TRESPASSER
3.0f, // USER_ENTER_LEAVE_DOMAIN 3.0f, // USER_ENTER_LEAVE_DOMAIN
3.0f, // AVATAR_CHANGE 3.0f, // AVATAR_CHANGE
}; };
float edgeWidth[EVENT_CATEGORY_COUNT]{ float edgeWidth[EVENT_CATEGORY_COUNT]{
0.05f, // ELEMENT_ENTER_LEAVE_DOMAIN 0.10f, // ELEMENT_ENTER_LEAVE_DOMAIN
0.05f, // BUBBLE_ISECT_OWNER 0.10f, // BUBBLE_ISECT_OWNER
0.05f, // BUBBLE_ISECT_TRESPASSER 0.10f, // BUBBLE_ISECT_TRESPASSER
0.05f, // USER_ENTER_LEAVE_DOMAIN 0.10f, // USER_ENTER_LEAVE_DOMAIN
0.05f, // AVATAR_CHANGE 0.05f, // AVATAR_CHANGE
}; };
glm::vec4 edgeInnerColor[EVENT_CATEGORY_COUNT]{ glm::vec4 edgeInnerColor[EVENT_CATEGORY_COUNT]{
@ -192,6 +192,7 @@ public:
signals: signals:
void dirty(); void dirty();
void dirtyCategory();
}; };

View file

@ -38,6 +38,7 @@ Item {
} }
Label { Label {
id: labelValue
text: sliderControl.value.toFixed(root.integral ? 0 : 2) text: sliderControl.value.toFixed(root.integral ? 0 : 2)
anchors.left: root.left anchors.left: root.left
anchors.leftMargin: 200 anchors.leftMargin: 200

View file

@ -15,8 +15,7 @@ var window = new OverlayWindow({
title: 'Fade', title: 'Fade',
source: qml, source: qml,
width: 500, width: 500,
height: 900 height: 900,
}); });
window.setPosition(50, 50); window.setPosition(50, 50);
window.closed.connect(function() { Script.stop(); }); window.closed.connect(function() { Script.stop(); });
Render.getConfig("RenderMainView.DrawFadedOpaqueBounds").enabled = true

View file

@ -23,220 +23,244 @@ Column {
CheckBox { CheckBox {
text: "Edit Fade" text: "Edit Fade"
checked: root.switchConfig["editFade"] checked: root.switchConfig["editFade"]
onCheckedChanged: { root.switchConfig["editFade"] = checked } onCheckedChanged: {
root.switchConfig["editFade"] = checked;
Render.getConfig("RenderMainView.DrawFadedOpaqueBounds").enabled = checked;
}
} }
ComboBox { ComboBox {
id: categoryBox
width: 400 width: 400
model: ["Elements enter/leave domain", "Bubble isect. - Owner POV", "Bubble isect. - Trespasser POV", "Another user leaves/arrives", "Changing an avatar"] model: ["Elements enter/leave domain", "Bubble isect. - Owner POV", "Bubble isect. - Trespasser POV", "Another user leaves/arrives", "Changing an avatar"]
onCurrentIndexChanged: { root.config["editedCategory"] = currentIndex } Timer {
id: postpone
interval: 100; running: false; repeat: false
onTriggered: { paramWidgetLoader.sourceComponent = paramWidgets }
}
onCurrentIndexChanged: {
root.config["editedCategory"] = currentIndex;
// This is a hack to be sure the widgets below properly reflect the change of category: delete the Component
// by setting the loader source to Null and then recreate it 100ms later
paramWidgetLoader.sourceComponent = undefined;
postpone.start()
}
} }
} }
Column {
spacing: 8
ConfigSlider { Component {
label: "Duration" id: paramWidgets
integral: false
config: root.config
property: "duration"
max: 10.0
min: 0.1
width: 400
}
GroupBox {
title: "Base Gradient"
width: 500
Column {
spacing: 8
ConfigSlider { Column {
label: "Size X" spacing: 8
integral: false
config: root.config ConfigSlider {
property: "baseSizeX" label: "Duration"
max: 1.0 integral: false
min: 0.0 config: root.config
width: 400 property: "duration"
} max: 10.0
ConfigSlider { min: 0.1
label: "Size Y" width: 400
integral: false
config: root.config
property: "baseSizeY"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Size Z"
integral: false
config: root.config
property: "baseSizeZ"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Level"
integral: false
config: root.config
property: "baseLevel"
max: 1.0
min: 0.0
width: 400
}
CheckBox {
text: "Invert"
checked: root.config["baseInverted"]
onCheckedChanged: { root.config["baseInverted"] = checked }
}
} }
} GroupBox {
GroupBox { title: "Base Gradient"
title: "Noise Gradient" width: 500
width: 500 Column {
Column { spacing: 8
spacing: 8
ConfigSlider { ConfigSlider {
label: "Size X" label: "Size X"
integral: false integral: false
config: root.config config: root.config
property: "noiseSizeX" property: "baseSizeX"
max: 1.0 max: 1.0
min: 0.0 min: 0.0
width: 400 width: 400
} }
ConfigSlider { ConfigSlider {
label: "Size Y" label: "Size Y"
integral: false integral: false
config: root.config config: root.config
property: "noiseSizeY" property: "baseSizeY"
max: 1.0 max: 1.0
min: 0.0 min: 0.0
width: 400 width: 400
} }
ConfigSlider { ConfigSlider {
label: "Size Z" label: "Size Z"
integral: false integral: false
config: root.config config: root.config
property: "noiseSizeZ" property: "baseSizeZ"
max: 1.0 max: 1.0
min: 0.0 min: 0.0
width: 400 width: 400
} }
ConfigSlider { ConfigSlider {
label: "Level" label: "Level"
integral: false integral: false
config: root.config config: root.config
property: "noiseLevel" property: "baseLevel"
max: 1.0 max: 1.0
min: 0.0 min: 0.0
width: 400 width: 400
} }
} CheckBox {
} text: "Invert"
GroupBox { checked: root.config["baseInverted"]
title: "Edge" onCheckedChanged: { root.config["baseInverted"] = checked }
width: 500
Column {
spacing: 8
ConfigSlider {
label: "Width"
integral: false
config: root.config
property: "edgeWidth"
max: 1.0
min: 0.0
width: 400
}
GroupBox {
title: "Inner color"
Column {
spacing: 8
ConfigSlider {
label: "Color R"
integral: false
config: root.config
property: "edgeInnerColorR"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Color G"
integral: false
config: root.config
property: "edgeInnerColorG"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Color B"
integral: false
config: root.config
property: "edgeInnerColorB"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Color intensity"
integral: false
config: root.config
property: "edgeInnerIntensity"
max: 5.0
min: 0.0
width: 400
}
} }
} }
GroupBox { }
title: "Outer color" GroupBox {
Column { title: "Noise Gradient"
spacing: 8 width: 500
ConfigSlider { Column {
label: "Color R" spacing: 8
integral: false
config: root.config ConfigSlider {
property: "edgeOuterColorR" label: "Size X"
max: 1.0 integral: false
min: 0.0 config: root.config
width: 400 property: "noiseSizeX"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Size Y"
integral: false
config: root.config
property: "noiseSizeY"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Size Z"
integral: false
config: root.config
property: "noiseSizeZ"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Level"
integral: false
config: root.config
property: "noiseLevel"
max: 1.0
min: 0.0
width: 400
}
}
}
GroupBox {
title: "Edge"
width: 500
Column {
spacing: 8
ConfigSlider {
label: "Width"
integral: false
config: root.config
property: "edgeWidth"
max: 1.0
min: 0.0
width: 400
}
GroupBox {
title: "Inner color"
Column {
spacing: 8
ConfigSlider {
label: "Color R"
integral: false
config: root.config
property: "edgeInnerColorR"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Color G"
integral: false
config: root.config
property: "edgeInnerColorG"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Color B"
integral: false
config: root.config
property: "edgeInnerColorB"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Color intensity"
integral: false
config: root.config
property: "edgeInnerIntensity"
max: 5.0
min: 0.0
width: 400
}
} }
ConfigSlider { }
label: "Color G" GroupBox {
integral: false title: "Outer color"
config: root.config Column {
property: "edgeOuterColorG" spacing: 8
max: 1.0 ConfigSlider {
min: 0.0 label: "Color R"
width: 400 integral: false
} config: root.config
ConfigSlider { property: "edgeOuterColorR"
label: "Color B" max: 1.0
integral: false min: 0.0
config: root.config width: 400
property: "edgeOuterColorB" }
max: 1.0 ConfigSlider {
min: 0.0 label: "Color G"
width: 400 integral: false
} config: root.config
ConfigSlider { property: "edgeOuterColorG"
label: "Color intensity" max: 1.0
integral: false min: 0.0
config: root.config width: 400
property: "edgeOuterIntensity" }
max: 5.0 ConfigSlider {
min: 0.0 label: "Color B"
width: 400 integral: false
config: root.config
property: "edgeOuterColorB"
max: 1.0
min: 0.0
width: 400
}
ConfigSlider {
label: "Color intensity"
integral: false
config: root.config
property: "edgeOuterIntensity"
max: 5.0
min: 0.0
width: 400
}
} }
} }
} }
} }
} }
} }
Loader {
id: paramWidgetLoader
sourceComponent: paramWidgets
}
} }