diff options
author | Manuel Castilla <manzanillawork@gmail.com> | 2021-08-23 16:30:01 +0300 |
---|---|---|
committer | Manuel Castilla <manzanillawork@gmail.com> | 2021-08-23 17:36:09 +0300 |
commit | 064167fce70e3d7c382c374334a1bd0b520fe9fe (patch) | |
tree | 6e6f9a26d8e446a9e6966fa185e9527d720b19ee /source/blender/compositor/operations/COM_ScaleOperation.cc | |
parent | a95e56b741709f7157a44196091ccad3ec369e5e (diff) |
Compositor: Full frame transform nodes
Adds full frame implementation to "Rotate", "Transform" and
"Stabilize2D" nodes.
To avoid sampling twice when concatenating scale and rotate
operations, a `TransformOperation` is implemented with all
the functionality.
The nodes have no functional changes.
Part of T88150.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D12165
Diffstat (limited to 'source/blender/compositor/operations/COM_ScaleOperation.cc')
-rw-r--r-- | source/blender/compositor/operations/COM_ScaleOperation.cc | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/source/blender/compositor/operations/COM_ScaleOperation.cc b/source/blender/compositor/operations/COM_ScaleOperation.cc index 5410b2c832a..ef34bc7bee6 100644 --- a/source/blender/compositor/operations/COM_ScaleOperation.cc +++ b/source/blender/compositor/operations/COM_ScaleOperation.cc @@ -74,17 +74,18 @@ float ScaleOperation::get_constant_scale_y() return get_constant_scale(2, get_relative_scale_y_factor()); } -BLI_INLINE float scale_coord(const int coord, const float center, const float relative_scale) +void ScaleOperation::scale_area( + rcti &rect, float center_x, float center_y, float scale_x, float scale_y) { - return center + (coord - center) / relative_scale; + rect.xmin = scale_coord(rect.xmin, center_x, scale_x); + rect.xmax = scale_coord(rect.xmax, center_x, scale_x); + rect.ymin = scale_coord(rect.ymin, center_y, scale_y); + rect.ymax = scale_coord(rect.ymax, center_y, scale_y); } void ScaleOperation::scale_area(rcti &rect, float scale_x, float scale_y) { - rect.xmin = scale_coord(rect.xmin, m_centerX, scale_x); - rect.xmax = scale_coord(rect.xmax, m_centerX, scale_x); - rect.ymin = scale_coord(rect.ymin, m_centerY, scale_y); - rect.ymax = scale_coord(rect.ymax, m_centerY, scale_y); + scale_area(rect, m_centerX, m_centerY, scale_x, scale_y); } void ScaleOperation::init_data() |