@@ -78650,7 +78650,7 @@ EdgeTable::EdgeTable (const Rectangle& bounds_, | |||||
do | do | ||||
{ | { | ||||
const int step = jmin (stepSize, y2 - y1, 256 - (y1 & 255)); | const int step = jmin (stepSize, y2 - y1, 256 - (y1 & 255)); | ||||
int x = roundDoubleToInt (startX + multiplier * (y1 - startY)); | |||||
int x = roundDoubleToInt (startX + multiplier * ((y1 + (step >> 1)) - startY)); | |||||
if (x < leftLimit) | if (x < leftLimit) | ||||
x = leftLimit; | x = leftLimit; | ||||
@@ -81509,6 +81509,8 @@ public: | |||||
ColourGradient g2 (*(fillType.gradient)); | ColourGradient g2 (*(fillType.gradient)); | ||||
g2.multiplyOpacity (fillType.getOpacity()); | g2.multiplyOpacity (fillType.getOpacity()); | ||||
g2.x1 -= 0.5f; g2.y1 -= 0.5f; | |||||
g2.x2 -= 0.5f; g2.y2 -= 0.5f; | |||||
AffineTransform transform (fillType.transform.translated ((float) xOffset, (float) yOffset)); | AffineTransform transform (fillType.transform.translated ((float) xOffset, (float) yOffset)); | ||||
const bool isIdentity = transform.isOnlyTranslation(); | const bool isIdentity = transform.isOnlyTranslation(); | ||||
@@ -101,7 +101,7 @@ EdgeTable::EdgeTable (const Rectangle& bounds_, | |||||
do | do | ||||
{ | { | ||||
const int step = jmin (stepSize, y2 - y1, 256 - (y1 & 255)); | const int step = jmin (stepSize, y2 - y1, 256 - (y1 & 255)); | ||||
int x = roundDoubleToInt (startX + multiplier * (y1 - startY)); | |||||
int x = roundDoubleToInt (startX + multiplier * ((y1 + (step >> 1)) - startY)); | |||||
if (x < leftLimit) | if (x < leftLimit) | ||||
x = leftLimit; | x = leftLimit; | ||||
@@ -563,7 +563,7 @@ public: | |||||
will be treated as relative to the origin of this sub-region. So, for example if | will be treated as relative to the origin of this sub-region. So, for example if | ||||
your subregion is (50, 50, 100, 100), and your transform is a translation of (20, 20), | your subregion is (50, 50, 100, 100), and your transform is a translation of (20, 20), | ||||
the resulting pixel drawn at (20, 20) in the destination context is from (50, 50) in | the resulting pixel drawn at (20, 20) in the destination context is from (50, 50) in | ||||
your image. If you want to use the whole image, then Image::getBounds() returns a | |||||
your image. If you want to use the whole image, then Image::getBounds() returns a | |||||
suitable rectangle to use as the imageSubRegion parameter. | suitable rectangle to use as the imageSubRegion parameter. | ||||
Images are composited using the context's current opacity, so if you | Images are composited using the context's current opacity, so if you | ||||
@@ -950,6 +950,8 @@ public: | |||||
ColourGradient g2 (*(fillType.gradient)); | ColourGradient g2 (*(fillType.gradient)); | ||||
g2.multiplyOpacity (fillType.getOpacity()); | g2.multiplyOpacity (fillType.getOpacity()); | ||||
g2.x1 -= 0.5f; g2.y1 -= 0.5f; | |||||
g2.x2 -= 0.5f; g2.y2 -= 0.5f; | |||||
AffineTransform transform (fillType.transform.translated ((float) xOffset, (float) yOffset)); | AffineTransform transform (fillType.transform.translated ((float) xOffset, (float) yOffset)); | ||||
const bool isIdentity = transform.isOnlyTranslation(); | const bool isIdentity = transform.isOnlyTranslation(); | ||||
@@ -268,7 +268,7 @@ bool ThreadPool::removeAllJobs (const bool interruptRunningJobs, | |||||
for (int i = jobs.size(); --i >= 0;) | for (int i = jobs.size(); --i >= 0;) | ||||
{ | { | ||||
ThreadPoolJob* const job = (ThreadPoolJob*) jobs.getUnchecked(i); | ThreadPoolJob* const job = (ThreadPoolJob*) jobs.getUnchecked(i); | ||||
if (selectedJobsToRemove == 0 || selectedJobsToRemove->isJobSuitable (job)) | if (selectedJobsToRemove == 0 || selectedJobsToRemove->isJobSuitable (job)) | ||||
{ | { | ||||
if (job->isActive) | if (job->isActive) | ||||
@@ -190,7 +190,7 @@ public: | |||||
/** Should return true if the specified thread matches your criteria for whatever | /** Should return true if the specified thread matches your criteria for whatever | ||||
operation that this object is being used for. | operation that this object is being used for. | ||||
Any implementation of this method must be extremely fast and thread-safe! | Any implementation of this method must be extremely fast and thread-safe! | ||||
*/ | */ | ||||
virtual bool isJobSuitable (ThreadPoolJob* job) = 0; | virtual bool isJobSuitable (ThreadPoolJob* job) = 0; | ||||