diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2013-03-24 12:24:17 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2013-03-24 12:24:17 (GMT) |
| commit | 9b5b85f9b01cbda7ef9a7ec2a15b2a35630a5b9d (patch) | |
| tree | ac7d040253b459ce102e476cb19ab59e3cfa90d7 /src/gui/interface/ProgressBar.cpp | |
| parent | 6bf98ccdca39936a3c51367862eed7c49f8786ec (diff) | |
| parent | bdc69f31c0be94191015838886bdcc2bc67f1acb (diff) | |
| download | powder-9b5b85f9b01cbda7ef9a7ec2a15b2a35630a5b9d.zip powder-9b5b85f9b01cbda7ef9a7ec2a15b2a35630a5b9d.tar.gz | |
Merge branch 'reorganisation' of github.com:FacialTurd/The-Powder-Toy
Diffstat (limited to 'src/gui/interface/ProgressBar.cpp')
| -rw-r--r-- | src/gui/interface/ProgressBar.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/gui/interface/ProgressBar.cpp b/src/gui/interface/ProgressBar.cpp new file mode 100644 index 0000000..95da72c --- /dev/null +++ b/src/gui/interface/ProgressBar.cpp @@ -0,0 +1,81 @@ +#include "ProgressBar.h" +#include "gui/Style.h" + +using namespace ui; + +ProgressBar::ProgressBar(Point position, Point size, int startProgress, std::string startStatus): + Component(position, size), + intermediatePos(0.0f), + progressStatus(""), + progress(0) +{ + SetStatus(startStatus); + SetProgress(startProgress); +} + +void ProgressBar::SetProgress(int progress) +{ + this->progress = progress; + if(this->progress > 100) + this->progress = 100; +} + +int ProgressBar::GetProgress() +{ + return progress; +} + +void ProgressBar::SetStatus(std::string status) +{ + progressStatus = status; +} + +std::string ProgressBar::GetStatus() +{ + return progressStatus; +} + +void ProgressBar::Draw(const Point & screenPos) +{ + Graphics * g = ui::Engine::Ref().g; + + ui::Colour progressBarColour = style::Colour::WarningTitle; + + g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 255, 255, 255, 255); + + if(progress!=-1) + { + if(progress > 0) + { + if(progress > 100) + progress = 100; + float size = float(Size.X-4)*(float(progress)/100.0f); // TIL... + size = std::min(std::max(size, 0.0f), float(Size.X-4)); + g->fillrect(screenPos.X + 2, screenPos.Y + 2, size, Size.Y-4, progressBarColour.Red, progressBarColour.Green, progressBarColour.Blue, 255); + } + } else { + int size = 40, rsize = 0; + float position = float(Size.X-4)*(intermediatePos/100.0f); + if(position + size - 1 > Size.X-4) + { + size = (Size.X-4)-position+1; + rsize = 40-size; + } + g->fillrect(screenPos.X + 2 + position, screenPos.Y + 2, size, Size.Y-4, progressBarColour.Red, progressBarColour.Green, progressBarColour.Blue, 255); + if(rsize) + { + g->fillrect(screenPos.X + 2, screenPos.Y + 2, rsize, Size.Y-4, progressBarColour.Red, progressBarColour.Green, progressBarColour.Blue, 255); + } + } + if(progress<50) + g->drawtext(screenPos.X + ((Size.X-Graphics::textwidth(progressStatus.c_str()))/2), screenPos.Y + (Size.Y-8)/2, progressStatus, 255, 255, 255, 255); + else + g->drawtext(screenPos.X + ((Size.X-Graphics::textwidth(progressStatus.c_str()))/2), screenPos.Y + (Size.Y-8)/2, progressStatus, 0, 0, 0, 255); +} + +void ProgressBar::Tick(float dt) +{ + intermediatePos += 1.0f*dt; + if(intermediatePos>100.0f) + intermediatePos = 0.0f; +}
\ No newline at end of file |
