summaryrefslogtreecommitdiff
path: root/src/interface
diff options
context:
space:
mode:
authorSimon 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)
commit5befe5c25f8f188e7588de44ab2c8bead22ae999 (patch)
tree643b02af217770c1a3156be03e01442557795760 /src/interface
parentf8ca8af387b8611c18ca7c5357efd19c8bc28941 (diff)
downloadpowder-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.cpp13
-rw-r--r--src/interface/Engine.cpp2
-rw-r--r--src/interface/Panel.cpp2
-rw-r--r--src/interface/ProgressBar.cpp65
-rw-r--r--src/interface/ProgressBar.h19
-rw-r--r--src/interface/SaveButton.cpp13
-rw-r--r--src/interface/SaveButton.h1
-rw-r--r--src/interface/ScrollPanel.cpp12
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))
{