diff --git a/Library/MeterHistogram.cpp b/Library/MeterHistogram.cpp index c8c790a39..de6d278b7 100644 --- a/Library/MeterHistogram.cpp +++ b/Library/MeterHistogram.cpp @@ -433,8 +433,8 @@ bool MeterHistogram::Draw(Gfx::Canvas& canvas) const FLOAT startStep = (FLOAT)(startValue + (step * i)); double range = m_MaxPrimaryValue - m_MinPrimaryValue; - double value = (range <= 0.0) ? 0.0 : - (m_PrimaryValues[(i + (m_MeterPos % displayH)) % displayH] - m_MinPrimaryValue) / range; + double value = (range < 0.0) ? 0.0 : (range == 0.0) ? 1.0 : + (m_PrimaryValues[(i + m_MeterPos) % displayH] - m_MinPrimaryValue) / range; int primaryBarHeight = (int)(displayW * value); primaryBarHeight = min(displayW, primaryBarHeight); @@ -445,7 +445,7 @@ bool MeterHistogram::Draw(Gfx::Canvas& canvas) if (secondaryMeasure) { range = m_MaxSecondaryValue - m_MinSecondaryValue; - value = (range <= 0.0) ? 0.0 : + value = (range < 0.0) ? 0.0 : (range == 0.0) ? 1.0 : (m_SecondaryValues[(i + m_MeterPos) % displayH] - m_MinSecondaryValue) / range; int secondaryBarHeight = (int)(displayW * value); @@ -496,7 +496,7 @@ bool MeterHistogram::Draw(Gfx::Canvas& canvas) const FLOAT startStep = (FLOAT)(startValue + (step * i)); double range = m_MaxPrimaryValue - m_MinPrimaryValue; - double value = (range <= 0.0) ? 0.0 : + double value = (range < 0.0) ? 0.0 : (range == 0.0) ? 1.0 : (m_PrimaryValues[((i + m_MeterPos) % displayW)] - m_MinPrimaryValue) / range; int primaryBarHeight = (int)(displayH * value); @@ -508,7 +508,7 @@ bool MeterHistogram::Draw(Gfx::Canvas& canvas) if (secondaryMeasure) { range = m_MaxSecondaryValue - m_MinSecondaryValue; - value = (range <= 0.0) ? 0.0 : + value = (range < 0.0) ? 0.0 : (range == 0.0) ? 1.0 : (m_SecondaryValues[(i + m_MeterPos) % displayW] - m_MinSecondaryValue) / range; int secondaryBarHeight = (int)(displayH * value); diff --git a/Library/MeterLine.cpp b/Library/MeterLine.cpp index 1acd9d942..624d753b9 100644 --- a/Library/MeterLine.cpp +++ b/Library/MeterLine.cpp @@ -271,8 +271,8 @@ bool MeterLine::Draw(Gfx::Canvas& canvas) if (maxValue == minValue) { - minValue = 0.0; - maxValue = 1.0; + //minValue = 0.0; + //maxValue = 1.0; } D2D1_RECT_F meterRect = GetMeterRectPadding(); @@ -334,9 +334,20 @@ bool MeterLine::Draw(Gfx::Canvas& canvas) auto calcX = [&](FLOAT& _x) { - _x = ((FLOAT)(((*i)[pos] - minValue) * scale) + offset); - _x = min(_x, W + offset); - _x = max(_x, offset); + if (range == 0.0) + { + _x = W; + } + else if (range < 0.0) + { + _x = 1.0f; + } + else + { + _x = ((FLOAT)(((*i)[pos] - minValue) * scale) + offset); + _x = min(_x, W + offset); + _x = max(_x, offset); + } _x = meterRect.left + (m_GraphStartLeft ? _x : W - _x + 1.0f); }; @@ -396,9 +407,20 @@ bool MeterLine::Draw(Gfx::Canvas& canvas) auto calcY = [&](FLOAT& _y) { - _y = ((FLOAT)(((*i)[pos] - minValue) * scale) + offset); - _y = min(_y, H + offset); - _y = max(_y, offset); + if (range == 0.0) + { + _y = H; + } + else if (range < 0.0) + { + _y = 0.0f; + } + else + { + _y = ((FLOAT)(((*i)[pos] - minValue) * scale) + offset); + _y = min(_y, H + offset); + _y = max(_y, offset); + } _y = meterRect.top + (m_Flip ? _y : H - _y + 1.0f); };