diff --git a/Source/Fractorium/FractoriumXformsAffine.cpp b/Source/Fractorium/FractoriumXformsAffine.cpp index dcb253d..3f1bfaf 100644 --- a/Source/Fractorium/FractoriumXformsAffine.cpp +++ b/Source/Fractorium/FractoriumXformsAffine.cpp @@ -246,7 +246,7 @@ void FractoriumEmberController::AffineSetHelper(double d, int index, bool pre { UpdateXform([&] (Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; + auto& affine = pre ? xform->m_Affine : xform->m_Post; DoubleSpinBox** spinners = pre ? m_Fractorium->m_PreSpins : m_Fractorium->m_PostSpins; if (m_Fractorium->ui.PolarAffineCheckBox->isChecked()) @@ -255,21 +255,21 @@ void FractoriumEmberController::AffineSetHelper(double d, int index, bool pre { case 0: case 3: - affine->A(cos(spinners[0]->value() * DEG_2_RAD) * spinners[3]->value()); - affine->D(sin(spinners[0]->value() * DEG_2_RAD) * spinners[3]->value()); + affine.A(cos(spinners[0]->value() * DEG_2_RAD) * spinners[3]->value()); + affine.D(sin(spinners[0]->value() * DEG_2_RAD) * spinners[3]->value()); break; case 1: case 4: - affine->B(cos(spinners[1]->value() * DEG_2_RAD) * spinners[4]->value()); - affine->E(sin(spinners[1]->value() * DEG_2_RAD) * spinners[4]->value()); + affine.B(cos(spinners[1]->value() * DEG_2_RAD) * spinners[4]->value()); + affine.E(sin(spinners[1]->value() * DEG_2_RAD) * spinners[4]->value()); break; case 2: case 5: default: - affine->C(cos(spinners[2]->value() * DEG_2_RAD) * spinners[5]->value()); - affine->F(sin(spinners[2]->value() * DEG_2_RAD) * spinners[5]->value()); + affine.C(cos(spinners[2]->value() * DEG_2_RAD) * spinners[5]->value()); + affine.F(sin(spinners[2]->value() * DEG_2_RAD) * spinners[5]->value()); break; } } @@ -278,27 +278,27 @@ void FractoriumEmberController::AffineSetHelper(double d, int index, bool pre switch (index) { case 0: - affine->A(d); + affine.A(d); break; case 1: - affine->B(d); + affine.B(d); break; case 2: - affine->C(d); + affine.C(d); break; case 3: - affine->D(d); + affine.D(d); break; case 4: - affine->E(d); + affine.E(d); break; case 5: - affine->F(d); + affine.F(d); break; } } @@ -328,24 +328,24 @@ void FractoriumEmberController::FlipXforms(bool horizontal, bool vertical, bo { UpdateXform([&] (Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; + auto& affine = pre ? xform->m_Affine : xform->m_Post; if (horizontal) { - affine->A(-affine->A()); - affine->B(-affine->B()); + affine.A(-affine.A()); + affine.B(-affine.B()); if (!m_Fractorium->LocalPivot()) - affine->C(-affine->C()); + affine.C(-affine.C()); } if (vertical) { - affine->D(-affine->D()); - affine->E(-affine->E()); + affine.D(-affine.D()); + affine.E(-affine.E()); if (!m_Fractorium->LocalPivot()) - affine->F(-affine->F()); + affine.F(-affine.F()); } }, eXformUpdate::UPDATE_SELECTED); FillAffineWithXform(CurrentXform(), pre); @@ -365,8 +365,8 @@ void FractoriumEmberController::RotateXformsByAngle(double angle, bool pre) { UpdateXform([&] (Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; - affine->Rotate(angle * DEG_2_RAD_T); + auto& affine = pre ? xform->m_Affine : xform->m_Post; + affine.Rotate(angle * DEG_2_RAD_T); }, eXformUpdate::UPDATE_SELECTED); FillAffineWithXform(CurrentXform(), pre); } @@ -426,9 +426,9 @@ void FractoriumEmberController::MoveXforms(double x, double y, bool pre) { UpdateXform([&] (Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; - affine->C(affine->C() + x); - affine->F(affine->F() + y); + auto& affine = pre ? xform->m_Affine : xform->m_Post; + affine.C(affine.C() + x); + affine.F(affine.F() + y); }, eXformUpdate::UPDATE_SELECTED); FillAffineWithXform(CurrentXform(), pre); } @@ -512,11 +512,11 @@ void FractoriumEmberController::ScaleXforms(double scale, bool pre) { UpdateXform([&] (Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; - affine->A(affine->A() * scale); - affine->B(affine->B() * scale); - affine->D(affine->D() * scale); - affine->E(affine->E() * scale); + auto& affine = pre ? xform->m_Affine : xform->m_Post; + affine.A(affine.A() * scale); + affine.B(affine.B() * scale); + affine.D(affine.D() * scale); + affine.E(affine.E() * scale); }, eXformUpdate::UPDATE_SELECTED); FillAffineWithXform(CurrentXform(), pre); } @@ -565,8 +565,8 @@ void FractoriumEmberController::ResetXformsAffine(bool pre) { UpdateXform([&] (Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; - affine->MakeID(); + auto& affine = pre ? xform->m_Affine : xform->m_Post; + affine.MakeID(); }, eXformUpdate::UPDATE_SELECTED); FillAffineWithXform(CurrentXform(), pre); } @@ -583,13 +583,13 @@ void FractoriumEmberController::RandomXformsAffine(bool pre) { UpdateXform([&](Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; - xform->m_Affine.A(m_Rand.Frand11()); - xform->m_Affine.B(m_Rand.Frand11()); - xform->m_Affine.C(m_Rand.Frand11()); - xform->m_Affine.D(m_Rand.Frand11()); - xform->m_Affine.E(m_Rand.Frand11()); - xform->m_Affine.F(m_Rand.Frand11()); + auto& affine = pre ? xform->m_Affine : xform->m_Post; + affine.A(m_Rand.Frand11()); + affine.B(m_Rand.Frand11()); + affine.C(m_Rand.Frand11()); + affine.D(m_Rand.Frand11()); + affine.E(m_Rand.Frand11()); + affine.F(m_Rand.Frand11()); }, eXformUpdate::UPDATE_SELECTED); FillAffineWithXform(CurrentXform(), pre); } diff --git a/Source/Fractorium/GLWidget.cpp b/Source/Fractorium/GLWidget.cpp index 9edac48..2bde937 100644 --- a/Source/Fractorium/GLWidget.cpp +++ b/Source/Fractorium/GLWidget.cpp @@ -871,11 +871,11 @@ void GLEmberController::DrawAffine(Xform* xform, bool pre, bool selected) auto index = ember->GetXformIndex(xform); auto size = ember->m_Palette.m_Entries.size(); auto color = ember->m_Palette.m_Entries[Clamp(xform->m_ColorX * size, 0, size - 1)]; - auto affine = pre ? &xform->m_Affine : &xform->m_Post; + auto& affine = pre ? xform->m_Affine : xform->m_Post; //For some incredibly strange reason, even though glm and OpenGL use matrices with a column-major //data layout, nothing will work here unless they are flipped to row major order. This is how it was //done in Fractron. - m4T mat = (*affine * m_FractoriumEmberController->AffineScaleCurrentToLocked()).ToMat4RowMajor(); + m4T mat = (affine * m_FractoriumEmberController->AffineScaleCurrentToLocked()).ToMat4RowMajor(); m_GL->glPushMatrix(); m_GL->glLoadIdentity(); MultMatrix(mat); @@ -1184,7 +1184,7 @@ void GLEmberController::CalcDragXAxis() T angle = startAngle - endAngle; m_FractoriumEmberController->UpdateXform([&](Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; + auto& affine = pre ? xform->m_Affine : xform->m_Post; auto srcRotated = m_DragSrcTransforms[index++]; if (worldPivotShiftAlt) @@ -1192,21 +1192,21 @@ void GLEmberController::CalcDragXAxis() srcRotated.X(srcRotated.O() + srcRotated.X()); srcRotated.O(v2T(0)); srcRotated.Rotate(angle); - affine->X(srcRotated.X() - affine->O()); + affine.X(srcRotated.X() - affine.O()); } else if (GetAlt()) { srcRotated.Rotate(angle); - affine->X(srcRotated.X()); + affine.X(srcRotated.X()); } else { srcRotated.Rotate(angle); - *affine = srcRotated; + affine = srcRotated; } if (xform == m_FractoriumEmberController->CurrentXform()) - m_DragHandlePos = v3T((affine->O() + affine->X()) * scaleBack, 0); + m_DragHandlePos = v3T((affine.O() + affine.X()) * scaleBack, 0); }, eXformUpdate::UPDATE_CURRENT_AND_SELECTED, false);//Calling code will update renderer. } else @@ -1222,16 +1222,16 @@ void GLEmberController::CalcDragXAxis() auto origXPlusOff = v3T(m_DragSrcTransform.X(), 0) + (diff * scale); m_FractoriumEmberController->UpdateXform([&](Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; + auto& affine = pre ? xform->m_Affine : xform->m_Post; auto axis = v3T(m_DragSrcTransforms[index++].X(), 0) + (diff * scale); if (GetAlt()) - affine->X(v2T(origXPlusOff));//Absolute, not ratio. + affine.X(v2T(origXPlusOff));//Absolute, not ratio. else - affine->RotateScaleXTo(v2T(axis)); + affine.RotateScaleXTo(v2T(axis)); if (xform == m_FractoriumEmberController->CurrentXform()) - m_DragHandlePos = v3T((affine->O() + affine->X()) * scaleBack, 0); + m_DragHandlePos = v3T((affine.O() + affine.X()) * scaleBack, 0); }, eXformUpdate::UPDATE_CURRENT_AND_SELECTED, false); } } @@ -1274,7 +1274,7 @@ void GLEmberController::CalcDragYAxis() T angle = startAngle - endAngle; m_FractoriumEmberController->UpdateXform([&](Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; + auto& affine = pre ? xform->m_Affine : xform->m_Post; auto srcRotated = m_DragSrcTransforms[index++]; if (worldPivotShiftAlt) @@ -1282,21 +1282,21 @@ void GLEmberController::CalcDragYAxis() srcRotated.Y(srcRotated.O() + srcRotated.Y()); srcRotated.O(v2T(0)); srcRotated.Rotate(angle); - affine->Y(srcRotated.Y() - affine->O()); + affine.Y(srcRotated.Y() - affine.O()); } else if (GetAlt()) { srcRotated.Rotate(angle); - affine->Y(srcRotated.Y()); + affine.Y(srcRotated.Y()); } else { srcRotated.Rotate(angle); - *affine = srcRotated; + affine = srcRotated; } if (xform == m_FractoriumEmberController->CurrentXform()) - m_DragHandlePos = v3T((affine->O() + affine->Y()) * scaleBack, 0); + m_DragHandlePos = v3T((affine.O() + affine.Y()) * scaleBack, 0); }, eXformUpdate::UPDATE_CURRENT_AND_SELECTED, false);//Calling code will update renderer. } else @@ -1312,16 +1312,16 @@ void GLEmberController::CalcDragYAxis() auto origXPlusOff = v3T(m_DragSrcTransform.Y(), 0) + (diff * scale); m_FractoriumEmberController->UpdateXform([&](Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; + auto& affine = pre ? xform->m_Affine : xform->m_Post; auto axis = v3T(m_DragSrcTransforms[index++].Y(), 0) + (diff * scale); if (GetAlt()) - affine->Y(v2T(origXPlusOff));//Absolute, not ratio. + affine.Y(v2T(origXPlusOff));//Absolute, not ratio. else - affine->RotateScaleYTo(v2T(axis)); + affine.RotateScaleYTo(v2T(axis)); if (xform == m_FractoriumEmberController->CurrentXform()) - m_DragHandlePos = v3T((affine->O() + affine->Y()) * scaleBack, 0); + m_DragHandlePos = v3T((affine.O() + affine.Y()) * scaleBack, 0); }, eXformUpdate::UPDATE_CURRENT_AND_SELECTED, false); } } @@ -1356,18 +1356,18 @@ void GLEmberController::CalcDragTranslation() T angle = startAngle - endAngle; m_FractoriumEmberController->UpdateXform([&](Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; + auto& affine = pre ? xform->m_Affine : xform->m_Post; auto srcRotated = m_DragSrcTransforms[index++]; srcRotated.RotateTrans(angle); if (worldPivotShift) { srcRotated.Rotate(angle); - affine->X(srcRotated.X()); - affine->Y(srcRotated.Y()); + affine.X(srcRotated.X()); + affine.Y(srcRotated.Y()); } - affine->O(srcRotated.O()); + affine.O(srcRotated.O()); if (xform == m_FractoriumEmberController->CurrentXform()) m_DragHandlePos = v3T(srcRotated.O(), 0) * scaleBack; @@ -1381,10 +1381,10 @@ void GLEmberController::CalcDragTranslation() { m_FractoriumEmberController->UpdateXform([&](Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; + auto& affine = pre ? xform->m_Affine : xform->m_Post; auto offset = m_DragSrcTransforms[index++].O() + (scale * v2T(diff)); auto snapped = SnapToGrid(offset); - affine->O(v2T(snapped.x, snapped.y)); + affine.O(v2T(snapped.x, snapped.y)); }, eXformUpdate::UPDATE_CURRENT_AND_SELECTED, false); m_DragHandlePos = SnapToGrid(m_MouseWorldPos); } @@ -1392,8 +1392,8 @@ void GLEmberController::CalcDragTranslation() { m_FractoriumEmberController->UpdateXform([&](Xform* xform) { - auto affine = pre ? &xform->m_Affine : &xform->m_Post; - affine->O(m_DragSrcTransforms[index++].O() + (scale * v2T(diff))); + auto& affine = pre ? xform->m_Affine : xform->m_Post; + affine.O(m_DragSrcTransforms[index++].O() + (scale * v2T(diff))); }, eXformUpdate::UPDATE_CURRENT_AND_SELECTED, false); m_DragHandlePos = m_MouseWorldPos; }