diff options
| author | Simon 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) |
| commit | 80aa7219a2d47632efa5d72b79bbb4fc65721631 (patch) | |
| tree | 257086419a3380872195415ffffb47ec52fff972 /src/interface/SaveButton.cpp | |
| parent | 680a36549adaed0c3ce7e8906fadbdf190b0b3b0 (diff) | |
| download | powder-80aa7219a2d47632efa5d72b79bbb4fc65721631.zip powder-80aa7219a2d47632efa5d72b79bbb4fc65721631.tar.gz | |
Vote view in save preview, better handling of controller destruction
Diffstat (limited to 'src/interface/SaveButton.cpp')
| -rw-r--r-- | src/interface/SaveButton.cpp | 61 |
1 files changed, 35 insertions, 26 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) |
