diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index 1b270c3a8b..369386aa13 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -78650,7 +78650,7 @@ EdgeTable::EdgeTable (const Rectangle& bounds_, do { 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) x = leftLimit; @@ -81509,6 +81509,8 @@ public: ColourGradient g2 (*(fillType.gradient)); 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)); const bool isIdentity = transform.isOnlyTranslation(); diff --git a/src/gui/graphics/contexts/juce_EdgeTable.cpp b/src/gui/graphics/contexts/juce_EdgeTable.cpp index d6f282225e..a9df29f3fb 100644 --- a/src/gui/graphics/contexts/juce_EdgeTable.cpp +++ b/src/gui/graphics/contexts/juce_EdgeTable.cpp @@ -101,7 +101,7 @@ EdgeTable::EdgeTable (const Rectangle& bounds_, do { 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) x = leftLimit; diff --git a/src/gui/graphics/contexts/juce_Graphics.h b/src/gui/graphics/contexts/juce_Graphics.h index d59e7f40de..c2736f965a 100644 --- a/src/gui/graphics/contexts/juce_Graphics.h +++ b/src/gui/graphics/contexts/juce_Graphics.h @@ -563,7 +563,7 @@ public: 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), 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. Images are composited using the context's current opacity, so if you diff --git a/src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp b/src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp index 418cb26339..a61f76e359 100644 --- a/src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp +++ b/src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp @@ -950,6 +950,8 @@ public: ColourGradient g2 (*(fillType.gradient)); 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)); const bool isIdentity = transform.isOnlyTranslation(); diff --git a/src/threads/juce_ThreadPool.cpp b/src/threads/juce_ThreadPool.cpp index 1adea9f5a6..70cff01f3f 100644 --- a/src/threads/juce_ThreadPool.cpp +++ b/src/threads/juce_ThreadPool.cpp @@ -268,7 +268,7 @@ bool ThreadPool::removeAllJobs (const bool interruptRunningJobs, for (int i = jobs.size(); --i >= 0;) { ThreadPoolJob* const job = (ThreadPoolJob*) jobs.getUnchecked(i); - + if (selectedJobsToRemove == 0 || selectedJobsToRemove->isJobSuitable (job)) { if (job->isActive) diff --git a/src/threads/juce_ThreadPool.h b/src/threads/juce_ThreadPool.h index a42c76ee01..bc81cfbd6e 100644 --- a/src/threads/juce_ThreadPool.h +++ b/src/threads/juce_ThreadPool.h @@ -190,7 +190,7 @@ public: /** Should return true if the specified thread matches your criteria for whatever operation that this object is being used for. - + Any implementation of this method must be extremely fast and thread-safe! */ virtual bool isJobSuitable (ThreadPoolJob* job) = 0;