pioneer/src/gui/GuiMeterBar.cpp

65 lines
1.7 KiB
C++

// Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
#include "Gui.h"
#include "graphics/Renderer.h"
static const float METERBAR_PADDING = 5.0f;
static const float METERBAR_BAR_HEIGHT = 8.0f;
static const Color OUTER_COLOUR(255, 255, 255, 32);
namespace Gui {
MeterBar::MeterBar(float width, const char *label, const ::Color &graphCol)
{
m_requestedWidth = width;
m_barValue = 0;
m_barColor = graphCol;
m_label = new Gui::Label(label);
Add(m_label, METERBAR_PADDING, METERBAR_PADDING + METERBAR_BAR_HEIGHT);
m_label->Show();
}
void MeterBar::Draw()
{
PROFILE_SCOPED()
float fsize[2];
GetSize(fsize);
vector2f size(fsize[0], fsize[1]);
Graphics::Renderer *r = Gui::Screen::GetRenderer();
if (!m_outer)
m_outer.reset(new Graphics::Drawables::RoundEdgedRect(r, size, 5.0f, OUTER_COLOUR, Screen::alphaBlendState, false));
else
m_outer->Update(size, 5.0f, OUTER_COLOUR);
m_outer->Draw(r);
// draw inner bar
{
matrix4x4f modelView = r->GetTransform();
modelView.Translate(METERBAR_PADDING, METERBAR_PADDING, 0.0f);
Graphics::Renderer::MatrixTicket ticket(r, modelView);
size.x = m_barValue * (size.x - 2.0f * METERBAR_PADDING);
size.y = METERBAR_BAR_HEIGHT;
if (!m_inner)
m_inner.reset(new Graphics::Drawables::RoundEdgedRect(r, size, 3.0f, m_barColor, Screen::alphaBlendState, false));
else
m_inner->Update(size, 3.0f, m_barColor);
m_inner->Draw(r);
}
Gui::Fixed::Draw();
}
void MeterBar::GetSizeRequested(float size[2])
{
size[0] = m_requestedWidth;
size[1] = METERBAR_PADDING * 2.0f + METERBAR_BAR_HEIGHT + Gui::Screen::GetFontHeight();
}
} // namespace Gui