diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-27 19:06:17 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-27 19:06:17 (GMT) |
| commit | 5befe5c25f8f188e7588de44ab2c8bead22ae999 (patch) | |
| tree | 643b02af217770c1a3156be03e01442557795760 /src/interface | |
| parent | f8ca8af387b8611c18ca7c5357efd19c8bc28941 (diff) | |
| download | powder-5befe5c25f8f188e7588de44ab2c8bead22ae999.zip powder-5befe5c25f8f188e7588de44ab2c8bead22ae999.tar.gz | |
Local file browser + some more interesting things like Progress bar UI component
Diffstat (limited to 'src/interface')
| -rw-r--r-- | src/interface/Button.cpp | 13 | ||||
| -rw-r--r-- | src/interface/Engine.cpp | 2 | ||||
| -rw-r--r-- | src/interface/Panel.cpp | 2 | ||||
| -rw-r--r-- | src/interface/ProgressBar.cpp | 65 | ||||
| -rw-r--r-- | src/interface/ProgressBar.h | 19 | ||||
| -rw-r--r-- | src/interface/SaveButton.cpp | 13 | ||||
| -rw-r--r-- | src/interface/SaveButton.h | 1 | ||||
| -rw-r--r-- | src/interface/ScrollPanel.cpp | 12 |
8 files changed, 115 insertions, 12 deletions
diff --git a/src/interface/Button.cpp b/src/interface/Button.cpp index e2af565..996c02f 100644 --- a/src/interface/Button.cpp +++ b/src/interface/Button.cpp @@ -85,16 +85,19 @@ void Button::Draw(const Point& screenPos) } Graphics * g = ui::Engine::Ref().g; Point Position = screenPos; + ui::Colour bgColour(0, 0, 0); if(Enabled) { if(isButtonDown || (isTogglable && toggle)) { + bgColour = Appearance.BackgroundActive; g->fillrect(Position.X+1, Position.Y+1, Size.X-2, Size.Y-2, Appearance.BackgroundActive.Red, Appearance.BackgroundActive.Green, Appearance.BackgroundActive.Blue, 255); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, Appearance.BorderActive.Red, Appearance.BorderActive.Green, Appearance.BorderActive.Blue, 255); g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, buttonDisplayText, Appearance.TextActive.Red, Appearance.TextActive.Green, Appearance.TextActive.Blue, 255); } else { + bgColour = Appearance.BackgroundInactive; g->fillrect(Position.X+1, Position.Y+1, Size.X-2, Size.Y-2, Appearance.BackgroundInactive.Red, Appearance.BackgroundInactive.Green, Appearance.BackgroundInactive.Blue, 255); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, Appearance.BorderInactive.Red, Appearance.BorderInactive.Green, Appearance.BorderInactive.Blue, 255); g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, buttonDisplayText, Appearance.TextInactive.Red, Appearance.TextInactive.Green, Appearance.TextInactive.Blue, 255); @@ -102,23 +105,27 @@ void Button::Draw(const Point& screenPos) } else { + bgColour = Appearance.BackgroundInactive; g->fillrect(Position.X+1, Position.Y+1, Size.X-2, Size.Y-2, Appearance.BackgroundInactive.Red, Appearance.BackgroundInactive.Green, Appearance.BackgroundInactive.Blue, 180); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, Appearance.BackgroundDisabled.Red, Appearance.BackgroundDisabled.Green, Appearance.BackgroundDisabled.Blue, Appearance.BackgroundDisabled.Alpha); g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, buttonDisplayText, 180, 180, 180, 255); } + + bool iconInvert = (bgColour.Blue + (3*bgColour.Green) + (2*bgColour.Red))>544?true:false; + if(Appearance.icon) { if(Enabled) if(isButtonDown || (isTogglable && toggle)) { - g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon, 255, true); + g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon, 255, iconInvert); } else { - g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon, 255); + g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon, 255, iconInvert); } else - g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon, 180); + g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon, 180, iconInvert); } } diff --git a/src/interface/Engine.cpp b/src/interface/Engine.cpp index 07c4203..ddf29c6 100644 --- a/src/interface/Engine.cpp +++ b/src/interface/Engine.cpp @@ -170,6 +170,7 @@ void Engine::Draw() { if(lastBuffer && !(state_->Position.X == 0 && state_->Position.Y == 0 && state_->Size.X == width_ && state_->Size.Y == height_)) { + g->Acquire(); g->Clear(); #ifndef OGLI memcpy(g->vid, lastBuffer, (width_ * height_) * PIXELSIZE); @@ -188,6 +189,7 @@ void Engine::Draw() ui::Engine::Ref().g->drawtext(10, 10, fpsText, 255, 255, 255, 255); #endif g->Finalise(); + g->Release(); FrameIndex++; FrameIndex %= 7200; } diff --git a/src/interface/Panel.cpp b/src/interface/Panel.cpp index 3b9cfc1..d673037 100644 --- a/src/interface/Panel.cpp +++ b/src/interface/Panel.cpp @@ -161,7 +161,7 @@ void Panel::Draw(const Point& screenPos) //dst=(pixel *)sdl_scrn->pixels+y*sdl_scrn->pitch/PIXELSIZE+x; for (int row = 0; row < Size.Y; row++) { - std::copy(myVid+(row*Size.W), myVid+(row*Size.W)+Size.W, lastVid+(screenPos.Y*(XRES+BARSIZE))+screenPos.X); + std::copy(myVid+(row*(XRES+BARSIZE)), myVid+(row*(XRES+BARSIZE))+Size.X, lastVid+((screenPos.Y+row)*(XRES+BARSIZE))+screenPos.X); } #endif } diff --git a/src/interface/ProgressBar.cpp b/src/interface/ProgressBar.cpp new file mode 100644 index 0000000..8bc765b --- /dev/null +++ b/src/interface/ProgressBar.cpp @@ -0,0 +1,65 @@ +#include "ProgressBar.h" +#include "Style.h" + +using namespace ui; + +ProgressBar::ProgressBar(Point position, Point size): + Component(position, size), + intermediatePos(0.0f), + progressStatus("") +{ + progress = 0; +} + +void ProgressBar::SetProgress(int progress) +{ + this->progress = progress; +} + +void ProgressBar::SetStatus(std::string status) +{ + progressStatus = status; +} + +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) + { + 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 diff --git a/src/interface/ProgressBar.h b/src/interface/ProgressBar.h new file mode 100644 index 0000000..9d803cc --- /dev/null +++ b/src/interface/ProgressBar.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Component.h" + +namespace ui +{ + class ProgressBar: public Component + { + int progress; + float intermediatePos; + std::string progressStatus; + public: + ProgressBar(Point position, Point size); + virtual void SetProgress(int progress); + virtual void SetStatus(std::string status); + virtual void Draw(const Point & screenPos); + virtual void Tick(float dt); + }; +} diff --git a/src/interface/SaveButton.cpp b/src/interface/SaveButton.cpp index ee57e81..e3f7422 100644 --- a/src/interface/SaveButton.cpp +++ b/src/interface/SaveButton.cpp @@ -61,7 +61,8 @@ SaveButton::SaveButton(Point position, Point size, SaveFile * file): actionCallback(NULL), voteColour(255, 0, 0), selectable(false), - selected(false) + selected(false), + wantsDraw(false) { if(file) { @@ -91,7 +92,7 @@ void SaveButton::Tick(float dt) { Thumbnail * tempThumb; float scaleFactorY = 1.0f, scaleFactorX = 1.0f; - if(!thumbnail) + if(!thumbnail/* && wantsDraw*/) { if(save) { @@ -114,7 +115,11 @@ void SaveButton::Tick(float dt) } if(file) { - if(file->GetGameSave()) + if(file->GetThumbnail()) + { + thumbnail = new Thumbnail(*file->GetThumbnail()); + } + else if(file->GetGameSave()) { thumbnail = SaveRenderer::Ref().Render(file->GetGameSave()); } @@ -152,6 +157,8 @@ void SaveButton::Draw(const Point& screenPos) float scaleFactor; ui::Point thumbBoxSize(0, 0); + wantsDraw = true; + if(selected && selectable) { g->fillrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 100, 170, 255, 100); diff --git a/src/interface/SaveButton.h b/src/interface/SaveButton.h index 02795fb..faa85d7 100644 --- a/src/interface/SaveButton.h +++ b/src/interface/SaveButton.h @@ -27,6 +27,7 @@ class SaveButton : public Component SaveInfo * save; Thumbnail * thumbnail; std::string name; + bool wantsDraw; public: SaveButton(Point position, Point size, SaveInfo * save); SaveButton(Point position, Point size, SaveFile * file); diff --git a/src/interface/ScrollPanel.cpp b/src/interface/ScrollPanel.cpp index 36ce5f8..ecf527b 100644 --- a/src/interface/ScrollPanel.cpp +++ b/src/interface/ScrollPanel.cpp @@ -28,7 +28,7 @@ void ScrollPanel::XOnMouseWheelInside(int localx, int localy, int d) { if(!d) return; - yScrollVel -= d; + yScrollVel -= d*2; } void ScrollPanel::XDraw(const Point& screenPos) @@ -52,8 +52,8 @@ void ScrollPanel::XDraw(const Point& screenPos) void ScrollPanel::XTick(float dt) { - if(yScrollVel > 7.0f) yScrollVel = 7.0f; - if(yScrollVel < -7.0f) yScrollVel = -7.0f; + //if(yScrollVel > 7.0f) yScrollVel = 7.0f; + //if(yScrollVel < -7.0f) yScrollVel = -7.0f; if(yScrollVel > -0.5f && yScrollVel < 0.5) yScrollVel = 0; @@ -63,14 +63,16 @@ void ScrollPanel::XTick(float dt) xScrollVel = 0; maxOffset = InnerSize-Size; + maxOffset.Y = std::max(0, maxOffset.Y); + maxOffset.X = std::max(0, maxOffset.X); int oldOffsetY = offsetY; offsetY += yScrollVel; int oldOffsetX = offsetX; offsetX += xScrollVel; - yScrollVel*=0.99f; - xScrollVel*=0.99f; + yScrollVel*=0.98f; + xScrollVel*=0.98f; if(oldOffsetY!=int(offsetY)) { |
