#include "scale.h" #include <iostream> void updateTransform4x4(const LinearScale<float> &sx, const LinearScale<float> &sy, float transform[4][4]) { float fsx = 2.0f * sx.slope(); float ftx = 2.0f * sx.offset() - 1.0f; float fsy = 2.0f * sy.slope(); float fty = 2.0f * sy.offset() - 1.0f; // The transform matrix should be this, but we have it transposed // in memory: // // [ sx 0.0f 0.0f tx ] // [ 0.0f sy 0.0f ty ] // [ 0.0f 0.0f 0.0f 0.0f ] // [ 0.0f 0.0f 0.0f 1.0f ] // // It is already initialized with 0s and bottom-right 1 transform[0][0] = fsx; transform[1][1] = fsy; transform[3][0] = ftx; transform[3][1] = fty; } void updateTransform4x4(LinearScale<float> &sx, LinearScale<float> &sy, float offsetX, float offsetY, float transform[4][4]) { sx.setRange(offsetX, 1.0f - offsetX); sy.setRange(1.0f - offsetY, offsetY); updateTransform4x4(sx, sy, transform); }