64da954a2e10159b0b92f1af721952a2cb9adffc
[blender.git] / source / blender / compositor / operations / COM_TranslateOperation.cpp
1 /*
2  * Copyright 2011, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor:
19  *              Jeroen Bakker
20  *              Monique Dewanchand
21  *              Thomas Beck (plasmasolutions.de)
22  */
23
24 #include "COM_TranslateOperation.h"
25
26 TranslateOperation::TranslateOperation() : NodeOperation()
27 {
28         this->addInputSocket(COM_DT_COLOR);
29         this->addInputSocket(COM_DT_VALUE);
30         this->addInputSocket(COM_DT_VALUE);
31         this->addOutputSocket(COM_DT_COLOR);
32         this->setResolutionInputSocketIndex(0);
33         this->m_inputOperation = NULL;
34         this->m_inputXOperation = NULL;
35         this->m_inputYOperation = NULL;
36         this->m_isDeltaSet = false;
37         this->m_factorX = 1.0f;
38         this->m_factorY = 1.0f;
39 }
40 void TranslateOperation::initExecution()
41 {
42         this->m_inputOperation = this->getInputSocketReader(0);
43         this->m_inputXOperation = this->getInputSocketReader(1);
44         this->m_inputYOperation = this->getInputSocketReader(2);
45 }
46
47 void TranslateOperation::deinitExecution()
48 {
49         this->m_inputOperation = NULL;
50         this->m_inputXOperation = NULL;
51         this->m_inputYOperation = NULL;
52 }
53
54
55 void TranslateOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler)
56 {
57         ensureDelta();
58
59         float originalXPos = x - this->getDeltaX();
60         float originalYPos = y - this->getDeltaY();
61
62         this->m_inputOperation->readSampled(output, originalXPos, originalYPos, sampler);
63 }
64
65 bool TranslateOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
66 {
67         rcti newInput;
68
69         ensureDelta();
70
71         newInput.xmin = input->xmin - this->getDeltaX();
72         newInput.xmax = input->xmax - this->getDeltaX();
73         newInput.ymin = input->ymin - this->getDeltaY();
74         newInput.ymax = input->ymax - this->getDeltaY();
75
76         return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
77 }
78
79 void TranslateOperation::setFactorXY(float factorX, float factorY)
80 {
81         m_factorX = factorX;
82         m_factorY = factorY;
83 }
84