Fix some problematic ellipse plotter cases (like 4x36)

This commit is contained in:
elasota
2020-01-20 05:00:44 -05:00
parent 610c72b9bb
commit 1d7a75c8a9
2 changed files with 15 additions and 9 deletions

View File

@@ -73,9 +73,9 @@ namespace PortabilityLayer
const int32_t xStepCost = -m_xChangeCostDynamicFactor + m_xChangeCostStaticFactor;
const int32_t yStepCost = m_yChangeCostDynamicFactor + m_yChangeCostStaticFactor;
const int32_t diagonalCostDelta = xStepCost + yStepCost;
const int32_t tangentCalc = (-m_xChangeCostDynamicFactor) + m_yChangeCostDynamicFactor;
if (diagonalCostDelta < 0)
if (tangentCalc < 0)
{
// Diagonal movement will move closer to the edge (first octant)
IncrementY();
@@ -115,9 +115,9 @@ namespace PortabilityLayer
const int32_t xStepCost = -m_xChangeCostDynamicFactor + m_xChangeCostStaticFactor;
const int32_t yStepCost = -m_yChangeCostDynamicFactor + m_yChangeCostStaticFactor;
const int32_t diagonalCostDelta = xStepCost + yStepCost;
const int32_t tangentCalc = (-m_xChangeCostDynamicFactor) + (-m_yChangeCostDynamicFactor);
if (diagonalCostDelta < 0)
if (tangentCalc < 0)
{
// Diagonal movement will move closer to the edge (first octant)
DecrementX();
@@ -157,9 +157,9 @@ namespace PortabilityLayer
const int32_t xStepCost = m_xChangeCostDynamicFactor + m_xChangeCostStaticFactor;
const int32_t yStepCost = -m_yChangeCostDynamicFactor + m_yChangeCostStaticFactor;
const int32_t diagonalCostDelta = xStepCost + yStepCost;
const int32_t tangentCalc = (m_xChangeCostDynamicFactor) + (-m_yChangeCostDynamicFactor);
if (diagonalCostDelta < 0)
if (tangentCalc < 0)
{
// Diagonal movement will move closer to the edge (first octant)
DecrementY();
@@ -199,9 +199,9 @@ namespace PortabilityLayer
const int32_t xStepCost = m_xChangeCostDynamicFactor + m_xChangeCostStaticFactor;
const int32_t yStepCost = m_yChangeCostDynamicFactor + m_yChangeCostStaticFactor;
const int32_t diagonalCostDelta = xStepCost + yStepCost;
const int32_t tangentCalc = m_xChangeCostDynamicFactor + m_yChangeCostDynamicFactor;
if (diagonalCostDelta < 0)
if (tangentCalc < 0)
{
// Diagonal movement will move closer to the edge (first octant)
IncrementX();

View File

@@ -1014,9 +1014,15 @@ void DrawSurface::SetSystemFont(int size, int variationFlags)
void DrawSurface::FillEllipse(const Rect &rect)
{
if (!rect.IsValid())
if (!rect.IsValid() || rect.Width() < 1 || rect.Height() < 1)
return;
if (rect.Width() <= 2 || rect.Height() <= 2)
{
FillRect(rect);
return;
}
PortabilityLayer::ScanlineMask *mask = PortabilityLayer::ScanlineMaskConverter::CompileEllipse(PortabilityLayer::Rect2i(rect.top, rect.left, rect.bottom, rect.right));
if (mask)
{