1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-31 03:00:05 +00:00

Refactored the Line class to be templated (to update old code, just replace "Line" with "Line<float>"). Corrected a mac ppc build problem.

This commit is contained in:
Julian Storer 2010-04-26 15:47:21 +01:00
parent 0d611ec065
commit 082dff25dd
11 changed files with 601 additions and 984 deletions

View file

@ -177,48 +177,40 @@ public:
: lookupTable (lookupTable_), numEntries (numEntries_)
{
jassert (numEntries_ >= 0);
float x1 = gradient.x1;
float y1 = gradient.y1;
float x2 = gradient.x2;
float y2 = gradient.y2;
Point<float> p1 (gradient.x1, gradient.y1);
Point<float> p2 (gradient.x2, gradient.y2);
if (! transform.isIdentity())
{
const Line l (x2, y2, x1, y1);
const Point<float> p3 = l.getPointAlongLine (0.0f, 100.0f);
float x3 = p3.getX();
float y3 = p3.getY();
const Line<float> l (p2, p1);
Point<float> p3 = l.getPointAlongLine (0.0f, 100.0f);
transform.transformPoint (x1, y1);
transform.transformPoint (x2, y2);
transform.transformPoint (x3, y3);
p1.applyTransform (transform);
p2.applyTransform (transform);
p3.applyTransform (transform);
const Line l2 (x2, y2, x3, y3);
const float prop = l2.findNearestPointTo (x1, y1);
const Point<float> newP2 (l2.getPointAlongLineProportionally (prop));
x2 = newP2.getX();
y2 = newP2.getY();
const Line<float> l2 (p2, p3);
p2 = l2.getPointAlongLineProportionally (l2.findNearestPointTo (p1));
}
vertical = fabs (x1 - x2) < 0.001f;
horizontal = fabs (y1 - y2) < 0.001f;
vertical = fabs (p1.getX() - p2.getX()) < 0.001f;
horizontal = fabs (p1.getY() - p2.getY()) < 0.001f;
if (vertical)
{
scale = roundToInt ((numEntries << (int) numScaleBits) / (double) (y2 - y1));
start = roundToInt (y1 * scale);
scale = roundToInt ((numEntries << (int) numScaleBits) / (double) (p2.getY() - p1.getY()));
start = roundToInt (p1.getY() * scale);
}
else if (horizontal)
{
scale = roundToInt ((numEntries << (int) numScaleBits) / (double) (x2 - x1));
start = roundToInt (x1 * scale);
scale = roundToInt ((numEntries << (int) numScaleBits) / (double) (p2.getX() - p1.getX()));
start = roundToInt (p1.getX() * scale);
}
else
{
grad = (y2 - y1) / (double) (x1 - x2);
yTerm = y1 - x1 / grad;
scale = roundToInt ((numEntries << (int) numScaleBits) / (yTerm * grad - (y2 * grad - x2)));
grad = (p2.getY() - p1.getY()) / (double) (p1.getX() - p2.getX());
yTerm = p1.getY() - p1.getX() / grad;
scale = roundToInt ((numEntries << (int) numScaleBits) / (yTerm * grad - (p2.getY() * grad - p2.getX())));
grad *= scale;
}
}