#include "pch.h"
GaugePane::GaugePane(Surface* psurface,
const Color& colorFlash,
float minValue,
float maxValue,
const Color& colorEmpty)
:
m_psurface(psurface),
m_colorFlash(colorFlash),
m_colorEmpty(colorEmpty),
m_minValue(minValue),
m_maxValue(maxValue),
m_value(0),
m_valueOld(0),
m_valueFlash(0),
m_timeLastChange(Time::Now())
{
assert(m_psurface);
assert(m_minValue < m_maxValue);
InternalSetSize(m_psurface->GetRect().Size());
}
void GaugePane::Paint(Surface* psurface)
{
if (m_value != 0) {
psurface->BitBlt(
WinPoint(0, 0),
m_psurface,
WinRect(0, 0, m_value, YSize())
);
}
if (m_value < m_valueFlash) {
psurface->FillRect(
WinRect(
m_value,
0,
m_valueFlash,
YSize()
),
m_colorFlash
);
}
}
void GaugePane::SetValue(float v, bool fFlash)
{
m_value =
(int)bound(
(v - m_minValue) * ((float)XSize()) / (m_maxValue - m_minValue),
0.0f,
(float)XSize()
);
}
void GaugePane::Update(Time time)
{
if (m_value != m_valueOld) {
if (m_value < m_valueOld) {
m_valueFlash = m_valueOld;
} else {
m_valueFlash = m_value;
}
m_timeLastChange = time;
m_valueOld = m_value;
NeedPaint();
}
if (m_value != m_valueFlash && time - m_timeLastChange > 0.25f) {
m_valueFlash = m_value;
NeedPaint();
}
}