summaryrefslogtreecommitdiff
path: root/src/interface
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-01-29 17:12:35 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-29 17:12:35 (GMT)
commit80aa7219a2d47632efa5d72b79bbb4fc65721631 (patch)
tree257086419a3380872195415ffffb47ec52fff972 /src/interface
parent680a36549adaed0c3ce7e8906fadbdf190b0b3b0 (diff)
downloadpowder-80aa7219a2d47632efa5d72b79bbb4fc65721631.zip
powder-80aa7219a2d47632efa5d72b79bbb4fc65721631.tar.gz
Vote view in save preview, better handling of controller destruction
Diffstat (limited to 'src/interface')
-rw-r--r--src/interface/SaveButton.cpp61
-rw-r--r--src/interface/SaveButton.h7
2 files changed, 38 insertions, 30 deletions
diff --git a/src/interface/SaveButton.cpp b/src/interface/SaveButton.cpp
index 877dfda..fa848bf 100644
--- a/src/interface/SaveButton.cpp
+++ b/src/interface/SaveButton.cpp
@@ -9,36 +9,29 @@
namespace ui {
-SaveButton::SaveButton(Window* parent_state, Save * save):
- Component(parent_state),
- save(save),
- thumbnail(NULL),
- isMouseInside(false),
- isButtonDown(false),
- actionCallback(NULL)
-{
-
-}
-
SaveButton::SaveButton(Point position, Point size, Save * save):
Component(position, size),
save(save),
thumbnail(NULL),
isMouseInside(false),
isButtonDown(false),
- actionCallback(NULL)
+ actionCallback(NULL),
+ voteColour(255, 0, 0)
{
+ if(save->votesUp==0)
+ voteRatio = 0.0f;
+ else if(save->votesDown==0)
+ voteRatio = 1.0f;
+ else
+ voteRatio = 1.0f-(float)(((float)(save->votesDown))/((float)(save->votesUp)));
+ if(voteRatio < 0.0f)
+ voteRatio = 0.0f;
+ if(voteRatio > 1.0f) //Not possible, but just in case the server were to give a negative value or something
+ voteRatio = 1.0f;
-}
-SaveButton::SaveButton(Save * save):
- Component(),
- save(save),
- thumbnail(NULL),
- isMouseInside(false),
- isButtonDown(false),
- actionCallback(NULL)
-{
+ voteColour.Red = (1.0f-voteRatio)*255;
+ voteColour.Green = voteRatio*255;
}
@@ -68,9 +61,9 @@ void SaveButton::Tick(float dt)
{
scaleFactorY = ((float)(Size.Y-25))/((float)thumbnail->Size.Y);
}
- if(thumbnail->Size.X > Size.X)
+ if(thumbnail->Size.X > Size.X-3)
{
- scaleFactorX = ((float)Size.X)/((float)thumbnail->Size.X);
+ scaleFactorX = ((float)Size.X-3)/((float)thumbnail->Size.X);
}
if(scaleFactorY < 1.0f || scaleFactorX < 1.0f)
{
@@ -90,16 +83,32 @@ void SaveButton::Draw(const Point& screenPos)
{
Graphics * g = ui::Engine::Ref().g;
float scaleFactor;
+ ui::Point thumbBoxSize(0, 0);
if(thumbnail)
{
- g->draw_image(thumbnail->Data, screenPos.X+(Size.X-thumbnail->Size.X)/2, screenPos.Y+((Size.Y-25)-thumbnail->Size.Y)/2, thumbnail->Size.X, thumbnail->Size.Y, 255);
- g->drawrect(screenPos.X+(Size.X-thumbnail->Size.X)/2, screenPos.Y+((Size.Y-25)-thumbnail->Size.Y)/2, thumbnail->Size.X, thumbnail->Size.Y, 180, 180, 180, 255);
+ thumbBoxSize = ui::Point(thumbnail->Size.X, thumbnail->Size.Y);
+ if(save->id)
+ g->draw_image(thumbnail->Data, screenPos.X-3+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-25-thumbBoxSize.Y)/2, thumbnail->Size.X, thumbnail->Size.Y, 255);
+ else
+ g->draw_image(thumbnail->Data, screenPos.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-25-thumbBoxSize.Y)/2, thumbnail->Size.X, thumbnail->Size.Y, 255);
}
else
{
scaleFactor = (Size.Y-25)/((float)YRES);
- g->drawrect(screenPos.X+(Size.X-((float)XRES)*scaleFactor)/2, screenPos.Y+((Size.Y-21)-((float)YRES)*scaleFactor)/2, ((float)XRES)*scaleFactor, ((float)YRES)*scaleFactor, 180, 180, 180, 255);
+ thumbBoxSize = ui::Point(((float)XRES)*scaleFactor, ((float)YRES)*scaleFactor);
+ }
+ if(save->id)
+ {
+ g->drawrect(screenPos.X-3+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-thumbBoxSize.Y)/2, thumbBoxSize.X, thumbBoxSize.Y, 180, 180, 180, 255);
+ g->drawrect(screenPos.X-3+thumbBoxSize.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-thumbBoxSize.Y)/2, 6, thumbBoxSize.Y, 180, 180, 180, 255);
+
+ int voteBar = max(10.0f, ((float)(thumbBoxSize.Y))*voteRatio);
+ g->fillrect(screenPos.X-3+thumbBoxSize.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(thumbBoxSize.Y-voteBar)+(Size.Y-21-thumbBoxSize.Y)/2, 6, voteBar, voteColour.Red, voteColour.Green, voteColour.Blue, 255);
+ }
+ else
+ {
+ g->drawrect(screenPos.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-thumbBoxSize.Y)/2, thumbBoxSize.X, thumbBoxSize.Y, 180, 180, 180, 255);
}
if(isMouseInside)
diff --git a/src/interface/SaveButton.h b/src/interface/SaveButton.h
index 65cff52..d4b2570 100644
--- a/src/interface/SaveButton.h
+++ b/src/interface/SaveButton.h
@@ -7,6 +7,7 @@
#include "search/Save.h"
#include "Graphics.h"
#include "search/Thumbnail.h"
+#include "interface/Colour.h"
namespace ui
{
@@ -23,11 +24,7 @@ class SaveButton : public Component
Save * save;
Thumbnail * thumbnail;
public:
- SaveButton(Window* parent_state, Save * save);
-
SaveButton(Point position, Point size, Save * save);
-
- SaveButton(Save * save);
virtual ~SaveButton();
virtual void OnMouseClick(int x, int y, unsigned int button);
@@ -45,6 +42,8 @@ public:
void SetActionCallback(SaveButtonAction * action);
protected:
bool isButtonDown, state, isMouseInside;
+ float voteRatio;
+ Colour voteColour;
SaveButtonAction * actionCallback;
};
}