From 8ee8ea70b5a32e1b8a5ad3e670cfe9ebee47bb4c Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Fri, 8 May 2009 18:27:27 +0200 Subject: 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. --- src/gui/inventorywindow.cpp | 4 +-- src/gui/ministatus.cpp | 6 ++-- src/gui/status.cpp | 8 ++--- src/gui/storagewindow.cpp | 2 +- src/gui/updatewindow.cpp | 2 +- src/gui/widgets/progressbar.cpp | 71 +++++++++++++++++++++-------------------- src/gui/widgets/progressbar.h | 41 ++++++++++-------------- 7 files changed, 64 insertions(+), 70 deletions(-) (limited to 'src/gui') diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp index 08abaf92..a7be69b8 100644 --- a/src/gui/inventorywindow.cpp +++ b/src/gui/inventorywindow.cpp @@ -92,8 +92,8 @@ InventoryWindow::InventoryWindow(int invSize): mSlotsLabel = new Label(_("Slots:")); mWeightLabel = new Label(_("Weight:")); - mSlotsBar = new ProgressBar(1.0f, 100, 20, 225, 200, 25); - mWeightBar = new ProgressBar(1.0f, 100, 20, 0, 0, 255); + mSlotsBar = new ProgressBar(1.0f, 100, 20, gcn::Color(225, 200, 25)); + mWeightBar = new ProgressBar(1.0f, 100, 20, gcn::Color(0, 0, 255)); place(0, 0, mWeightLabel).setPadding(3); place(1, 0, mWeightBar, 3); diff --git a/src/gui/ministatus.cpp b/src/gui/ministatus.cpp index b49ca051..b4bc29e9 100644 --- a/src/gui/ministatus.cpp +++ b/src/gui/ministatus.cpp @@ -36,10 +36,10 @@ MiniStatusWindow::MiniStatusWindow(): Popup("MiniStatus") { - mHpBar = new ProgressBar(1.0f, 100, 20, 0, 171, 34); + mHpBar = new ProgressBar(1.0f, 100, 20, gcn::Color(0, 171, 34)); #ifdef EATHENA_SUPPORT - mMpBar = new ProgressBar(1.0f, 100, 20, 26, 102, 230); - mXpBar = new ProgressBar(1.0f, 100, 20, 143, 192, 211); + mMpBar = new ProgressBar(1.0f, 100, 20, gcn::Color(26, 102, 230)); + mXpBar = new ProgressBar(1.0f, 100, 20, gcn::Color(143, 192, 211)); #endif mHpBar->setPosition(0, 3); diff --git a/src/gui/status.cpp b/src/gui/status.cpp index 48917ba0..c9681fa9 100644 --- a/src/gui/status.cpp +++ b/src/gui/status.cpp @@ -58,16 +58,16 @@ StatusWindow::StatusWindow(LocalPlayer *player): Units::formatCurrency(mCurrency).c_str())); mHpLabel = new Label(_("HP:")); - mHpBar = new ProgressBar(1.0f, 80, 15, 0, 171, 34); + mHpBar = new ProgressBar(1.0f, 80, 15, gcn::Color(0, 171, 34)); mXpLabel = new Label(_("Exp:")); - mXpBar = new ProgressBar(1.0f, 80, 15, 143, 192, 211); + mXpBar = new ProgressBar(1.0f, 80, 15, gcn::Color(143, 192, 211)); mMpLabel = new Label(_("MP:")); - mMpBar = new ProgressBar(1.0f, 80, 15, 26, 102, 230); + mMpBar = new ProgressBar(1.0f, 80, 15, gcn::Color(26, 102, 230)); mJobLabel = new Label(_("Job:")); - mJobBar = new ProgressBar(1.0f, 80, 15, 220, 135, 203); + mJobBar = new ProgressBar(1.0f, 80, 15, gcn::Color(220, 135, 203)); // ---------------------- // Stats Part diff --git a/src/gui/storagewindow.cpp b/src/gui/storagewindow.cpp index 309fcafc..4804bdcb 100644 --- a/src/gui/storagewindow.cpp +++ b/src/gui/storagewindow.cpp @@ -75,7 +75,7 @@ StorageWindow::StorageWindow(int invSize): mSlotsLabel = new Label(_("Slots: ")); - mSlotsBar = new ProgressBar(1.0f, 100, 20, 225, 200, 25); + mSlotsBar = new ProgressBar(1.0f, 100, 20, gcn::Color(225, 200, 25)); mSlotsBar->setText(strprintf("%d/%d", mUsedSlots, mMaxSlots)); mSlotsBar->setProgress((float) mUsedSlots / mMaxSlots); diff --git a/src/gui/updatewindow.cpp b/src/gui/updatewindow.cpp index f22c768a..21362630 100644 --- a/src/gui/updatewindow.cpp +++ b/src/gui/updatewindow.cpp @@ -108,7 +108,7 @@ UpdaterWindow::UpdaterWindow(const std::string &updateHost, mBrowserBox = new BrowserBox; mScrollArea = new ScrollArea(mBrowserBox); mLabel = new Label(_("Connecting...")); - mProgressBar = new ProgressBar(0.0, 310, 20, 168, 116, 31); + mProgressBar = new ProgressBar(0.0, 310, 20, gcn::Color(168, 116, 31)); mCancelButton = new Button(_("Cancel"), "cancel", this); mPlayButton = new Button(_("Play"), "play", this); 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)-> 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 -#include - 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; }; -- cgit v1.2.3-70-g09d2