summaryrefslogtreecommitdiff
path: root/src/gui/widgets
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2009-05-08 18:27:27 +0200
committerBjørn Lindeijer <bjorn@lindeijer.nl>2009-05-08 18:29:54 +0200
commit8ee8ea70b5a32e1b8a5ad3e670cfe9ebee47bb4c (patch)
tree694cbbfbf0e191c8a3f245441a93cc027319a8f6 /src/gui/widgets
parentb4150856b56584b3922f2a9e2489ba472d2e864b (diff)
downloadmana-8ee8ea70b5a32e1b8a5ad3e670cfe9ebee47bb4c.tar.gz
mana-8ee8ea70b5a32e1b8a5ad3e670cfe9ebee47bb4c.tar.bz2
mana-8ee8ea70b5a32e1b8a5ad3e670cfe9ebee47bb4c.tar.xz
mana-8ee8ea70b5a32e1b8a5ad3e670cfe9ebee47bb4c.zip
Fixed one pixel missing from progress bars
Also fixed the progress bar during connecting to reset again when full, by disabling the smooth updating there. The ProgressBar now uses gcn::Color instead of three separate color attributes.
Diffstat (limited to 'src/gui/widgets')
-rw-r--r--src/gui/widgets/progressbar.cpp71
-rw-r--r--src/gui/widgets/progressbar.h41
2 files changed, 53 insertions, 59 deletions
diff --git a/src/gui/widgets/progressbar.cpp b/src/gui/widgets/progressbar.cpp
index caeea5c6..58f24651 100644
--- a/src/gui/widgets/progressbar.cpp
+++ b/src/gui/widgets/progressbar.cpp
@@ -38,18 +38,18 @@ int ProgressBar::mInstances = 0;
float ProgressBar::mAlpha = 1.0;
ProgressBar::ProgressBar(float progress,
- unsigned int width, unsigned int height,
- Uint8 red, Uint8 green, Uint8 blue):
+ int width, int height,
+ const gcn::Color &color):
gcn::Widget(),
- mRed(red), mGreen(green), mBlue(blue),
- mRedToGo(red), mGreenToGo(green), mBlueToGo(blue)
+ mProgress(0.0f),
+ mProgressToGo(0.0f),
+ mSmoothProgress(true),
+ mColor(color),
+ mColorToGo(color),
+ mSmoothColorChange(true)
{
- mProgressToGo = mProgress = 0.0f;
- mSmoothProgress = mSmoothColorChange = true;
-
setProgress(progress);
- setWidth(width);
- setHeight(height);
+ setSize(width, height);
if (mInstances == 0)
{
@@ -99,28 +99,28 @@ void ProgressBar::logic()
if (mSmoothColorChange)
{
// Smoothly changing the color for a nicer effect.
- if (mRedToGo > mRed) mRed++;
- if (mRedToGo < mRed) mRed--;
- if (mGreenToGo > mGreen) mGreen++;
- if (mGreenToGo < mGreen) mGreen--;
- if (mBlueToGo > mBlue) mBlue++;
- if (mBlueToGo < mBlue) mBlue--;
- }
- else
- {
- mRed = mRedToGo;
- mGreen = mGreenToGo;
- mBlue = mBlueToGo;
+ if (mColorToGo.r > mColor.r)
+ mColor.r++;
+ if (mColorToGo.g > mColor.g)
+ mColor.g++;
+ if (mColorToGo.b > mColor.b)
+ mColor.b++;
+ if (mColorToGo.r < mColor.r)
+ mColor.r--;
+ if (mColorToGo.g < mColor.g)
+ mColor.g--;
+ if (mColorToGo.b < mColor.b)
+ mColor.b--;
}
if (mSmoothProgress)
{
// Smoothly showing the progressbar changes.
- if (mProgressToGo > mProgress) mProgress = mProgress + 0.005f;
- if (mProgressToGo < mProgress) mProgress = mProgress - 0.005f;
+ if (mProgressToGo > mProgress)
+ mProgress = std::min(1.0f, mProgress + 0.005f);
+ if (mProgressToGo < mProgress)
+ mProgress = std::max(0.0f, mProgress - 0.005f);
}
- else
- mProgress = mProgressToGo;
}
void ProgressBar::draw(gcn::Graphics *graphics)
@@ -137,12 +137,12 @@ void ProgressBar::draw(gcn::Graphics *graphics)
static_cast<Graphics*>(graphics)->
drawImageRect(0, 0, getWidth(), getHeight(), mBorder);
- const int alpha = (int)(mAlpha * 255.0f);
+ mColor.a = (int) (mAlpha * 255);
// The bar
if (mProgress > 0)
{
- graphics->setColor(gcn::Color(mRed, mGreen, mBlue, alpha));
+ graphics->setColor(mColor);
graphics->fillRectangle(gcn::Rectangle(4, 4,
(int) (mProgress * (getWidth() - 8)),
getHeight() - 8));
@@ -163,14 +163,17 @@ void ProgressBar::draw(gcn::Graphics *graphics)
void ProgressBar::setProgress(float progress)
{
- if (progress < 0.0f) mProgressToGo = 0.0;
- else if (progress > 1.0f) mProgressToGo = 1.0;
- else mProgressToGo = progress;
+ const float p = std::min(1.0f, std::max(0.0f, progress));
+ mProgressToGo = p;
+
+ if (!mSmoothProgress)
+ mProgress = p;
}
-void ProgressBar::setColor(Uint8 red, Uint8 green, Uint8 blue)
+void ProgressBar::setColor(const gcn::Color &color)
{
- mRedToGo = red;
- mGreenToGo = green;
- mBlueToGo = blue;
+ mColorToGo = color;
+
+ if (!mSmoothColorChange)
+ mColor = color;
}
diff --git a/src/gui/widgets/progressbar.h b/src/gui/widgets/progressbar.h
index e75b1d44..77670f57 100644
--- a/src/gui/widgets/progressbar.h
+++ b/src/gui/widgets/progressbar.h
@@ -26,8 +26,6 @@
#include <guichan/widget.hpp>
-#include <SDL_types.h>
-
class ImageRect;
/**
@@ -42,12 +40,9 @@ class ProgressBar : public gcn::Widget
* Constructor, initializes the progress with the given value.
*/
ProgressBar(float progress = 0.0f,
- unsigned int width = 40, unsigned int height = 7,
- Uint8 red = 150, Uint8 green = 150, Uint8 blue = 150);
+ int width = 40, int height = 7,
+ const gcn::Color &color = gcn::Color(150, 150, 150));
- /**
- * Destructor.
- */
~ProgressBar();
/**
@@ -71,24 +66,22 @@ class ProgressBar : public gcn::Widget
float getProgress() const { return mProgress; }
/**
- * Change the filling of the progress bar.
- */
- void setColor(Uint8, Uint8 green, Uint8 blue);
-
- /**
- * Returns the red value of color.
+ * Change the color of the progress bar.
*/
- Uint8 getRed() const { return mRed; }
+ void setColor(const gcn::Color &color);
/**
- * Returns the green value of color.
+ * Change the color of the progress bar.
+ *
+ * This is an overload provided for convenience.
*/
- Uint8 getGreen() const { return mGreen; }
+ inline void setColor(int r, int g, int b)
+ { setColor(gcn::Color(r, g, b)); }
/**
- * Returns the blue value of color.
+ * Returns the color of the progress bar.
*/
- Uint8 getBlue() const { return mBlue; }
+ const gcn::Color &getColor() const { return mColor; }
/**
* Sets the text shown on the progress bar.
@@ -103,33 +96,31 @@ class ProgressBar : public gcn::Widget
{ return mText; }
/**
- * Set wether the progress is moved smoothly.
+ * Set whether the progress is moved smoothly.
*/
void setSmoothProgress(bool smoothProgress)
{ mSmoothProgress = smoothProgress; }
/**
- * Set wether the color changing is made smoothly.
+ * Set whether the color changing is made smoothly.
*/
void setSmoothColorChange(bool smoothColorChange)
{ mSmoothColorChange = smoothColorChange; }
-
private:
float mProgress, mProgressToGo;
bool mSmoothProgress;
- Uint8 mRed, mGreen, mBlue;
- Uint8 mRedToGo, mGreenToGo, mBlueToGo;
+ gcn::Color mColor;
+ gcn::Color mColorToGo;
bool mSmoothColorChange;
std::string mText;
- bool mUpdated;
static ImageRect mBorder;
static int mInstances;
static float mAlpha;
-
+
static const gcn::Color TEXT_COLOR;
};