Commit: c751d40e070c6df907a526d7e3e17fc10611191e
Author: Monique Dewanchand
Date:   Mon Nov 30 07:55:30 2020 +0100
Branches: master
https://developer.blender.org/rBc751d40e070c6df907a526d7e3e17fc10611191e

Cleanup hardcoded render percentage to factor conversion

During revision of {D8952} one of the comments was to make a function that 
converts the render percentage to a factor. This to avoid code duplication. 
However the duplicated code was already all over the compositor code. So in 
order to avoid this code duplication for {D8952} I propose to first cleanup the 
duplicated code and build patch {D8952} based on this clean up.

The method that converts the render percentage to a factor is put in the 
CompositorContext. Why? The CompositorContext keeps DNA information like the 
renderdata. DNA, and thus the CompositorContext, keeps the size of the render 
resolution in percentage (user oriented). The compositor needs the size of the 
render resolution as a factor. So the CompositorContext seems like the obvious 
place to have this conversion method.

Why not in de NodeBase? The method could've been added to the nodebase, but I 
wanted to keep the nodebase as clean as possible and not put simple 
"conversion" methods into this base class. Also I didn't really like the call 
flow: you'd always have to get the renderdata size from the context and then 
convert.
Putting it in the CompositorContext avoids this extra invoke of a call.

Why not in the Converter? See nodebase. And the Converter seems more like a 
class for "structural" and complex node tree conversions. Not the simple 
conversions.

Reviewed By: Sergey Sharybin

Differential Revision: https://developer.blender.org/D9566

===================================================================

M       release/datafiles/locale
M       release/scripts/addons
M       source/blender/compositor/intern/COM_CompositorContext.h
M       source/blender/compositor/nodes/COM_BoxMaskNode.cpp
M       source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
M       source/blender/compositor/nodes/COM_MaskNode.cpp
M       source/blender/compositor/nodes/COM_ScaleNode.cpp
M       source/blender/compositor/nodes/COM_TranslateNode.cpp
M       source/tools

===================================================================

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 848613f1edf..ae7e6c215c9 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 848613f1edf09495bb764144461730662ac0b061
+Subproject commit ae7e6c215c9fc715cdedbc1c1e33e946fc90b496
diff --git a/release/scripts/addons b/release/scripts/addons
index 35c23b4db49..866dcad5aa6 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 35c23b4db494e58538a677c4fb0ec9ec1e8ffaa8
+Subproject commit 866dcad5aa6e45737f0634b835adcbc0871201e5
diff --git a/source/blender/compositor/intern/COM_CompositorContext.h 
b/source/blender/compositor/intern/COM_CompositorContext.h
index e29a8f67187..46cf65bbb79 100644
--- a/source/blender/compositor/intern/COM_CompositorContext.h
+++ b/source/blender/compositor/intern/COM_CompositorContext.h
@@ -267,4 +267,13 @@ class CompositorContext {
   {
     return (this->getbNodeTree()->flag & NTREE_COM_GROUPNODE_BUFFER) != 0;
   }
+
+  /**
+   * \brief Get the render percentage as a factor.
+   * The compositor uses a factor i.o. a percentage.
+   */
+  float getRenderPercentageAsFactor() const
+  {
+    return m_rd->size * 0.01f;
+  }
 };
diff --git a/source/blender/compositor/nodes/COM_BoxMaskNode.cpp 
b/source/blender/compositor/nodes/COM_BoxMaskNode.cpp
index ef62536595c..fe59bd32939 100644
--- a/source/blender/compositor/nodes/COM_BoxMaskNode.cpp
+++ b/source/blender/compositor/nodes/COM_BoxMaskNode.cpp
@@ -52,13 +52,14 @@ void BoxMaskNode::convertToOperations(NodeConverter 
&converter,
 
     /* Scale that image up to render resolution */
     const RenderData *rd = context.getRenderData();
+    const float render_size_factor = context.getRenderPercentageAsFactor();
     ScaleFixedSizeOperation *scaleOperation = new ScaleFixedSizeOperation();
 
     scaleOperation->setIsAspect(false);
     scaleOperation->setIsCrop(false);
     scaleOperation->setOffset(0.0f, 0.0f);
-    scaleOperation->setNewWidth(rd->xsch * rd->size / 100.0f);
-    scaleOperation->setNewHeight(rd->ysch * rd->size / 100.0f);
+    scaleOperation->setNewWidth(rd->xsch * render_size_factor);
+    scaleOperation->setNewHeight(rd->ysch * render_size_factor);
     scaleOperation->getInputSocket(0)->setResizeMode(COM_SC_NO_RESIZE);
     converter.addOperation(scaleOperation);
 
diff --git a/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp 
b/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
index 30d00252b76..1ae855c0f1d 100644
--- a/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
+++ b/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
@@ -52,12 +52,14 @@ void EllipseMaskNode::convertToOperations(NodeConverter 
&converter,
 
     /* Scale that image up to render resolution */
     const RenderData *rd = context.getRenderData();
+    const float render_size_factor = context.getRenderPercentageAsFactor();
     ScaleFixedSizeOperation *scaleOperation = new ScaleFixedSizeOperation();
+
     scaleOperation->setIsAspect(false);
     scaleOperation->setIsCrop(false);
     scaleOperation->setOffset(0.0f, 0.0f);
-    scaleOperation->setNewWidth(rd->xsch * rd->size / 100.0f);
-    scaleOperation->setNewHeight(rd->ysch * rd->size / 100.0f);
+    scaleOperation->setNewWidth(rd->xsch * render_size_factor);
+    scaleOperation->setNewHeight(rd->ysch * render_size_factor);
     scaleOperation->getInputSocket(0)->setResizeMode(COM_SC_NO_RESIZE);
     converter.addOperation(scaleOperation);
 
diff --git a/source/blender/compositor/nodes/COM_MaskNode.cpp 
b/source/blender/compositor/nodes/COM_MaskNode.cpp
index b28b849521c..a6415a3992e 100644
--- a/source/blender/compositor/nodes/COM_MaskNode.cpp
+++ b/source/blender/compositor/nodes/COM_MaskNode.cpp
@@ -31,6 +31,7 @@ void MaskNode::convertToOperations(NodeConverter &converter,
                                    const CompositorContext &context) const
 {
   const RenderData *rd = context.getRenderData();
+  const float render_size_factor = context.getRenderPercentageAsFactor();
 
   NodeOutput *outputMask = this->getOutputSocket(0);
 
@@ -46,12 +47,12 @@ void MaskNode::convertToOperations(NodeConverter &converter,
     operation->setMaskHeight(data->size_y);
   }
   else if (editorNode->custom1 & CMP_NODEFLAG_MASK_FIXED_SCENE) {
-    operation->setMaskWidth(data->size_x * (rd->size / 100.0f));
-    operation->setMaskHeight(data->size_y * (rd->size / 100.0f));
+    operation->setMaskWidth(data->size_x * render_size_factor);
+    operation->setMaskHeight(data->size_y * render_size_factor);
   }
   else {
-    operation->setMaskWidth(rd->xsch * rd->size / 100.0f);
-    operation->setMaskHeight(rd->ysch * rd->size / 100.0f);
+    operation->setMaskWidth(rd->xsch * render_size_factor);
+    operation->setMaskHeight(rd->ysch * render_size_factor);
   }
 
   operation->setMask(mask);
diff --git a/source/blender/compositor/nodes/COM_ScaleNode.cpp 
b/source/blender/compositor/nodes/COM_ScaleNode.cpp
index e57c30cff29..9ffcd5306b0 100644
--- a/source/blender/compositor/nodes/COM_ScaleNode.cpp
+++ b/source/blender/compositor/nodes/COM_ScaleNode.cpp
@@ -54,7 +54,7 @@ void ScaleNode::convertToOperations(NodeConverter &converter,
     }
     case CMP_SCALE_SCENEPERCENT: {
       SetValueOperation *scaleFactorOperation = new SetValueOperation();
-      scaleFactorOperation->setValue(context.getRenderData()->size / 100.0f);
+      scaleFactorOperation->setValue(context.getRenderPercentageAsFactor());
       converter.addOperation(scaleFactorOperation);
 
       ScaleOperation *operation = new ScaleOperation();
@@ -71,13 +71,14 @@ void ScaleNode::convertToOperations(NodeConverter 
&converter,
     }
     case CMP_SCALE_RENDERPERCENT: {
       const RenderData *rd = context.getRenderData();
+      const float render_size_factor = context.getRenderPercentageAsFactor();
       ScaleFixedSizeOperation *operation = new ScaleFixedSizeOperation();
       /* framing options */
       operation->setIsAspect((bnode->custom2 & 
CMP_SCALE_RENDERSIZE_FRAME_ASPECT) != 0);
       operation->setIsCrop((bnode->custom2 & CMP_SCALE_RENDERSIZE_FRAME_CROP) 
!= 0);
       operation->setOffset(bnode->custom3, bnode->custom4);
-      operation->setNewWidth(rd->xsch * rd->size / 100.0f);
-      operation->setNewHeight(rd->ysch * rd->size / 100.0f);
+      operation->setNewWidth(rd->xsch * render_size_factor);
+      operation->setNewHeight(rd->ysch * render_size_factor);
       operation->getInputSocket(0)->setResizeMode(COM_SC_NO_RESIZE);
       converter.addOperation(operation);
 
diff --git a/source/blender/compositor/nodes/COM_TranslateNode.cpp 
b/source/blender/compositor/nodes/COM_TranslateNode.cpp
index 33f48747853..0e9bf825787 100644
--- a/source/blender/compositor/nodes/COM_TranslateNode.cpp
+++ b/source/blender/compositor/nodes/COM_TranslateNode.cpp
@@ -42,8 +42,9 @@ void TranslateNode::convertToOperations(NodeConverter 
&converter,
   TranslateOperation *operation = new TranslateOperation();
   if (data->relative) {
     const RenderData *rd = context.getRenderData();
-    float fx = rd->xsch * rd->size / 100.0f;
-    float fy = rd->ysch * rd->size / 100.0f;
+    const float render_size_factor = context.getRenderPercentageAsFactor();
+    float fx = rd->xsch * render_size_factor;
+    float fy = rd->ysch * render_size_factor;
 
     operation->setFactorXY(fx, fy);
   }
diff --git a/source/tools b/source/tools
index 660be0ca10a..d7d7e9d41f7 160000
--- a/source/tools
+++ b/source/tools
@@ -1 +1 @@
-Subproject commit 660be0ca10abc8261178159afcd1032be662e386
+Subproject commit d7d7e9d41f7499aa4639f96c843156ff834385ba

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to