From 8b1e0619298c94d8eb3d0dab50cdd10d5c408435 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 17 Oct 2012 13:21:56 -0500 Subject: [PATCH] Reworked opacity to be stored in that wasted color byte. --- src/Font.cpp | 4 ++-- src/Font.h | 2 +- src/Renderer.h | 10 ++++---- src/Renderer_draw_gl.cpp | 30 +++++++++++------------ src/components/GuiFastSelect.cpp | 4 ++-- src/components/GuiGameList.cpp | 8 ++++--- src/components/GuiImage.cpp | 4 ++-- src/components/GuiInputConfig.cpp | 18 +++++++------- src/components/GuiList.cpp | 20 +++++++++------- src/components/GuiList.h | 10 ++++---- src/components/GuiMenu.cpp | 4 ++-- src/components/GuiTheme.cpp | 40 +++++++++++++++++++------------ src/components/GuiTheme.h | 16 ++++++------- 13 files changed, 92 insertions(+), 78 deletions(-) diff --git a/src/Font.cpp b/src/Font.cpp index 9b0f2d3a5..8ca30b1e9 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -165,7 +165,7 @@ struct tex { GLfloat tex2y; }; -void Font::drawText(std::string text, int startx, int starty, int color, char opacity) +void Font::drawText(std::string text, int startx, int starty, int color) { starty += mMaxGlyphHeight; @@ -224,7 +224,7 @@ void Font::drawText(std::string text, int startx, int starty, int color, char op x += charData[letter].advX; } - Renderer::buildGLColorArray(colors, color, opacity, pointCount * 3); + Renderer::buildGLColorArray(colors, color, pointCount * 3); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); diff --git a/src/Font.h b/src/Font.h index a818f65b0..4311006c6 100644 --- a/src/Font.h +++ b/src/Font.h @@ -35,7 +35,7 @@ public: GLuint textureID; - void drawText(std::string text, int startx, int starty, int color, char opacity); //Render some text using this font. + void drawText(std::string text, int startx, int starty, int color); //Render some text using this font. void sizeText(std::string text, int* w, int* h); //Sets the width and height of a given string to given pointers. Skipped if pointer is NULL. private: diff --git a/src/Renderer.h b/src/Renderer.h index 747c3fe37..1b748d2bc 100644 --- a/src/Renderer.h +++ b/src/Renderer.h @@ -27,14 +27,14 @@ namespace Renderer enum FontSize { SMALL, MEDIUM, LARGE }; int getFontHeight(FontSize size); //sometimes font size is needed before fonts have been loaded; this takes care of that - void buildGLColorArray(GLubyte* ptr, int color, unsigned char opacity, unsigned int vertCount); + void buildGLColorArray(GLubyte* ptr, unsigned int color, unsigned int vertCount); //drawing commands void swapBuffers(); - void drawRect(int x, int y, int w, int h, int color, unsigned char opacity = 255); - void drawText(std::string text, int x, int y, int color, unsigned char opacity = 255, FontSize fontsize = MEDIUM); - void drawCenteredText(std::string text, int xOffset, int y, int color, unsigned char opacity = 255, FontSize fontsize = MEDIUM); - void drawWrappedText(std::string text, int xStart, int yStart, int xLen, int color, unsigned char opacity = 255, FontSize fontsize = MEDIUM); + void drawRect(int x, int y, int w, int h, unsigned int color); + void drawText(std::string text, int x, int y, unsigned int color, FontSize fontsize = MEDIUM); + void drawCenteredText(std::string text, int xOffset, int y, unsigned int color, FontSize fontsize = MEDIUM); + void drawWrappedText(std::string text, int xStart, int yStart, int xLen, unsigned int color, FontSize fontsize = MEDIUM); } #endif diff --git a/src/Renderer_draw_gl.cpp b/src/Renderer_draw_gl.cpp index 09284092a..5915bd385 100644 --- a/src/Renderer_draw_gl.cpp +++ b/src/Renderer_draw_gl.cpp @@ -8,24 +8,24 @@ namespace Renderer { bool loadedFonts = false; - void setColor4bArray(GLubyte* array, int color, unsigned char opacity) + void setColor4bArray(GLubyte* array, unsigned int color) { - array[0] = (color & 0x00ff0000) / 0x10000; - array[1] = (color & 0x0000ff00) / 0x100; - array[2] = (color & 0x000000ff); - array[3] = opacity; + array[0] = (color & 0xff000000) / 0x1000000; + array[1] = (color & 0x00ff0000) / 0x10000; + array[2] = (color & 0x0000ff00) / 0x100; + array[3] = (color & 0x000000ff); } - void buildGLColorArray(GLubyte* ptr, int color, unsigned char opacity, unsigned int vertCount) + void buildGLColorArray(GLubyte* ptr, unsigned int color, unsigned int vertCount) { for(unsigned int i = 0; i < vertCount; i++) { - setColor4bArray(ptr, color, opacity); + setColor4bArray(ptr, color); ptr += 4; } } - void drawRect(int x, int y, int w, int h, int color, unsigned char opacity) + void drawRect(int x, int y, int w, int h, unsigned int color) { GLfloat points[12]; @@ -38,7 +38,7 @@ namespace Renderer { points[10] = x + w; points[11] = y + h; GLubyte colors[6*4]; - buildGLColorArray(colors, color, opacity, 6); + buildGLColorArray(colors, color, 6); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); @@ -119,7 +119,7 @@ namespace Renderer { return h; } - void drawText(std::string text, int x, int y, int color, unsigned char opacity, FontSize font) + void drawText(std::string text, int x, int y, unsigned int color, FontSize font) { if(!loadedFonts) loadFonts(); @@ -127,10 +127,10 @@ namespace Renderer { //if(x < 0) // std::cout << "drawing at " << x << std::endl; - getFont(font)->drawText(text, x, y, color, opacity); + getFont(font)->drawText(text, x, y, color); } - void drawCenteredText(std::string text, int xOffset, int y, int color, unsigned char opacity, FontSize fontsize) + void drawCenteredText(std::string text, int xOffset, int y, unsigned int color, FontSize fontsize) { if(!loadedFonts) loadFonts(); @@ -145,12 +145,12 @@ namespace Renderer { x += xOffset * 0.5; - drawText(text, x, y, color, opacity, fontsize); + drawText(text, x, y, color, fontsize); } //this could probably be optimized //draws text and ensures it's never longer than xLen - void drawWrappedText(std::string text, int xStart, int yStart, int xLen, int color, unsigned char opacity, FontSize fontsize) + void drawWrappedText(std::string text, int xStart, int yStart, int xLen, unsigned int color, FontSize fontsize) { if(!loadedFonts) loadFonts(); @@ -199,7 +199,7 @@ namespace Renderer { { //render line now if(w > 0) //make sure it's not blank - drawText(line, xStart, y, color, opacity, fontsize); + drawText(line, xStart, y, color, fontsize); //increment y by height and some extra padding for the next line y += h + 4; diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp index b77289ce5..96a594599 100644 --- a/src/components/GuiFastSelect.cpp +++ b/src/components/GuiFastSelect.cpp @@ -47,11 +47,11 @@ void GuiFastSelect::onRender() unsigned int sw = Renderer::getScreenWidth(), sh = Renderer::getScreenHeight(); if(!mBox->hasBackground()) - Renderer::drawRect(sw * 0.2, sh * 0.2, sw * 0.6, sh * 0.6, 0x000FF0, 255); + Renderer::drawRect(sw * 0.2, sh * 0.2, sw * 0.6, sh * 0.6, 0x000FF0FF); mBox->render(); - Renderer::drawCenteredText(LETTERS.substr(mLetterID, 1), 0, sh * 0.5 - (Renderer::getFontHeight(Renderer::LARGE) * 0.5), mTextColor, 255, Renderer::LARGE); + Renderer::drawCenteredText(LETTERS.substr(mLetterID, 1), 0, sh * 0.5 - (Renderer::getFontHeight(Renderer::LARGE) * 0.5), mTextColor, Renderer::LARGE); } void GuiFastSelect::onInput(InputManager::InputButton button, bool keyDown) diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index a9c8ff135..62eb8ebae 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -93,13 +93,13 @@ void GuiGameList::onRender() //header if(!mTheme->getHeaderHidden()) - Renderer::drawCenteredText(mSystem->getName(), 0, 1, 0xFF0000, 255, Renderer::LARGE); + Renderer::drawCenteredText(mSystem->getName(), 0, 1, 0xFF0000FF, Renderer::LARGE); if(mDetailed) { //divider if(!mTheme->getDividersHidden()) - Renderer::drawRect(Renderer::getScreenWidth() * mTheme->getListOffsetX() - 4, Renderer::getFontHeight(Renderer::LARGE) + 2, 8, Renderer::getScreenHeight(), 0x0000FF, 255); + Renderer::drawRect(Renderer::getScreenWidth() * mTheme->getListOffsetX() - 4, Renderer::getFontHeight(Renderer::LARGE) + 2, 8, Renderer::getScreenHeight(), 0x0000FFFF); //if we're not scrolling and we have selected a non-folder if(!mList->isScrolling() && mList->getSelectedObject() && !mList->getSelectedObject()->isFolder()) @@ -108,7 +108,7 @@ void GuiGameList::onRender() std::string desc = game->getDescription(); if(!desc.empty()) - Renderer::drawWrappedText(desc, Renderer::getScreenWidth() * 0.03, mScreenshot->getOffsetY() + mScreenshot->getHeight() + 12, Renderer::getScreenWidth() * (mTheme->getListOffsetX() - 0.03), mTheme->getDescColor(), 255, Renderer::SMALL); + Renderer::drawWrappedText(desc, Renderer::getScreenWidth() * 0.03, mScreenshot->getOffsetY() + mScreenshot->getHeight() + 12, Renderer::getScreenWidth() * (mTheme->getListOffsetX() - 0.03), mTheme->getDescColor(), Renderer::SMALL); } } } @@ -223,6 +223,8 @@ void GuiGameList::updateTheme() mTheme->readXML(""); //clears any current theme mList->setSelectorColor(mTheme->getSelectorColor()); + std::cout << "selector alpha: " << (mTheme->getSelectorColor() & 0x000000ff) << "\n"; + mList->setSelectedTextColor(mTheme->getSelectedTextColor()); mList->setScrollSound(mTheme->getMenuScrollSound()); diff --git a/src/components/GuiImage.cpp b/src/components/GuiImage.cpp index d9ef95baf..bf539a738 100644 --- a/src/components/GuiImage.cpp +++ b/src/components/GuiImage.cpp @@ -271,10 +271,10 @@ void GuiImage::onRender() float xCount = ((float)mResizeWidth/mWidth); float yCount = ((float)mResizeHeight/mHeight); - Renderer::buildGLColorArray(colors, 0xFFFFFF, getOpacity(), 6); + Renderer::buildGLColorArray(colors, 0xFFFFFF00 | (getOpacity()), 6); buildImageArray(getOffsetX(), getOffsetY(), points, texs, xCount, yCount); }else{ - Renderer::buildGLColorArray(colors, 0xFFFFFF, getOpacity(), 6); + Renderer::buildGLColorArray(colors, 0xFFFFFF00 | (getOpacity()), 6); buildImageArray(getOffsetX(), getOffsetY(), points, texs); } diff --git a/src/components/GuiInputConfig.cpp b/src/components/GuiInputConfig.cpp index 0e37b1635..eb2294e26 100644 --- a/src/components/GuiInputConfig.cpp +++ b/src/components/GuiInputConfig.cpp @@ -36,21 +36,21 @@ GuiInputConfig::~GuiInputConfig() void GuiInputConfig::onRender() { - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0xFFFFFF); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0xFFFFFFFF); int height = Renderer::getFontHeight(Renderer::MEDIUM) + 6; - Renderer::drawCenteredText("It looks like you have a joystick plugged in!", 0, 2, 0x000000); - Renderer::drawCenteredText("POV hats (some D-Pads) are automatically mapped to directions.", 0, height, 0x000000); - Renderer::drawCenteredText("You can press a keyboard key to skip any input.", 0, height * 2, 0x000000); - Renderer::drawCenteredText("If you want to remap later, just delete ~/.es_input.cfg.", 0, height * 3, 0x000000); - Renderer::drawCenteredText("This interface only configures the first joystick plugged in.", 0, height * 4, 0x000000); - Renderer::drawCenteredText("Remember - you'll need to set up your emulator separately!", 0, Renderer::getScreenHeight() - height, 0x000000); + Renderer::drawCenteredText("It looks like you have a joystick plugged in!", 0, 2, 0x000000FF); + Renderer::drawCenteredText("POV hats (some D-Pads) are automatically mapped to directions.", 0, height, 0x000000FF); + Renderer::drawCenteredText("You can press a keyboard key to skip any input.", 0, height * 2, 0x000000FF); + Renderer::drawCenteredText("If you want to remap later, just delete ~/.es_input.cfg.", 0, height * 3, 0x000000FF); + Renderer::drawCenteredText("This interface only configures the first joystick plugged in.", 0, height * 4, 0x000000FF); + Renderer::drawCenteredText("Remember - you'll need to set up your emulator separately!", 0, Renderer::getScreenHeight() - height, 0x000000FF); if(mDone) - Renderer::drawCenteredText("All done! Press a keyboard key to save.", 0, height * 5, 0x00BB00); + Renderer::drawCenteredText("All done! Press a keyboard key to save.", 0, height * 5, 0x00BB00FF); else - Renderer::drawCenteredText("Please press the axis/button for " + sInputs[mInputNum], 0, height * 5, 0x00C000); + Renderer::drawCenteredText("Please press the axis/button for " + sInputs[mInputNum], 0, height * 5, 0x00C000FF); } void GuiInputConfig::onInput(InputManager::InputButton button, bool keyDown) diff --git a/src/components/GuiList.cpp b/src/components/GuiList.cpp index 33320e120..5489706af 100644 --- a/src/components/GuiList.cpp +++ b/src/components/GuiList.cpp @@ -17,8 +17,8 @@ GuiList::GuiList(int offsetX, int offsetY, Renderer::FontSize fontsize mTextOffsetX = 0; mFont = fontsize; - mSelectorColor = 0x000000; - mSelectedTextColorOverride = -1; + mSelectorColor = 0x000000FF; + mSelectedTextColorOverride = 0x0000FF; mScrollSound = NULL; mDrawCentered = true; @@ -56,7 +56,7 @@ void GuiList::onRender() if(mRowVector.size() == 0) { - Renderer::drawCenteredText("The list is empty.", 0, y, 0x0000FF, 255, mFont); + Renderer::drawCenteredText("The list is empty.", 0, y, 0xFF0000FF, mFont); return; } @@ -66,17 +66,18 @@ void GuiList::onRender() for(int i = startEntry; i < listCutoff; i++) { + //draw selector bar if(mSelection == i) { - Renderer::drawRect(getOffsetX(), y, Renderer::getScreenWidth(), Renderer::getFontHeight(mFont), mSelectorColor, 255); + Renderer::drawRect(getOffsetX(), y, Renderer::getScreenWidth(), Renderer::getFontHeight(mFont), mSelectorColor); } ListRow row = mRowVector.at((unsigned int)i); if(mDrawCentered) - Renderer::drawCenteredText(row.name, getOffsetX(), y, row.color, mFont); + Renderer::drawCenteredText(row.name, getOffsetX(), y, (mSelection == i) ? mSelectedTextColorOverride : row.color, mFont); else - Renderer::drawText(row.name, getOffsetX() + mTextOffsetX, y, (mSelectedTextColorOverride != -1 && mSelection == i ? mSelectedTextColorOverride : row.color), 255, mFont); + Renderer::drawText(row.name, getOffsetX() + mTextOffsetX, y, (mSelection == i) ? mSelectedTextColorOverride : row.color, mFont); y += entrySize; } @@ -163,7 +164,7 @@ void GuiList::scroll() //list management stuff template -void GuiList::addObject(std::string name, listType obj, int color) +void GuiList::addObject(std::string name, listType obj, unsigned int color) { ListRow row = {name, obj, color}; mRowVector.push_back(row); @@ -219,13 +220,14 @@ void GuiList::onResume() } template -void GuiList::setSelectorColor(int selectorColor) +void GuiList::setSelectorColor(unsigned int selectorColor) { mSelectorColor = selectorColor; + std::cout << "mSelectorColor alpha: " << (mSelectorColor & 0x000000ff) << "\n"; } template -void GuiList::setSelectedTextColor(int selectedColor) +void GuiList::setSelectedTextColor(unsigned int selectedColor) { mSelectedTextColorOverride = selectedColor; } diff --git a/src/components/GuiList.h b/src/components/GuiList.h index 9a38702d3..22ae972a4 100644 --- a/src/components/GuiList.h +++ b/src/components/GuiList.h @@ -21,7 +21,7 @@ public: void onTick(int deltaTime); void onInput(InputManager::InputButton button, bool keyDown); - void addObject(std::string name, listType obj, int color = 0xFF0000); + void addObject(std::string name, listType obj, unsigned int color = 0xFF0000); void clear(); void onPause(); @@ -33,8 +33,8 @@ public: void stopScrolling(); bool isScrolling(); - void setSelectorColor(int selectorColor); - void setSelectedTextColor(int selectedColor); + void setSelectorColor(unsigned int selectorColor); + void setSelectedTextColor(unsigned int selectedColor); void setCentered(bool centered); void setScrollSound(Sound* sound); void setTextOffsetX(int textoffsetx); @@ -53,7 +53,7 @@ private: bool mScrolling; Renderer::FontSize mFont; - int mSelectorColor, mSelectedTextColorOverride; + unsigned int mSelectorColor, mSelectedTextColorOverride; bool mDrawCentered; int mTextOffsetX; @@ -62,7 +62,7 @@ private: { std::string name; listType object; - int color; + unsigned int color; }; std::vector mRowVector; diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp index c3f59539a..72a28ac53 100644 --- a/src/components/GuiMenu.cpp +++ b/src/components/GuiMenu.cpp @@ -49,8 +49,8 @@ void GuiMenu::populateList() { mList->clear(); - mList->addObject("Restart", "sudo shutdown -r now", 0x0000FF); - mList->addObject("Shutdown", "sudo shutdown -h now", 0x0000FF); + mList->addObject("Restart", "sudo shutdown -r now", 0x0000FFFF); + mList->addObject("Shutdown", "sudo shutdown -h now", 0x0000FFFF); } void GuiMenu::onRender() diff --git a/src/components/GuiTheme.cpp b/src/components/GuiTheme.cpp index 680053e77..3c1b5fc40 100644 --- a/src/components/GuiTheme.cpp +++ b/src/components/GuiTheme.cpp @@ -7,18 +7,18 @@ #include #include "../Renderer.h" -int GuiTheme::getPrimaryColor() { return mListPrimaryColor; } -int GuiTheme::getSecondaryColor() { return mListSecondaryColor; } -int GuiTheme::getSelectorColor() { return mListSelectorColor; } -int GuiTheme::getDescColor() { return mDescColor; } -int GuiTheme::getFastSelectColor() { return mFastSelectColor; } +unsigned int GuiTheme::getPrimaryColor() { return mListPrimaryColor; } +unsigned int GuiTheme::getSecondaryColor() { return mListSecondaryColor; } +unsigned int GuiTheme::getSelectorColor() { return mListSelectorColor; } +unsigned int GuiTheme::getDescColor() { return mDescColor; } +unsigned int GuiTheme::getFastSelectColor() { return mFastSelectColor; } bool GuiTheme::getHeaderHidden() { return mHideHeader; } bool GuiTheme::getDividersHidden() { return mHideDividers; } bool GuiTheme::getListCentered() { return mListCentered; } float GuiTheme::getListOffsetX() { return mListOffsetX; } float GuiTheme::getListTextOffsetX() { return mListTextOffsetX; } -int GuiTheme::getSelectedTextColor() { return mListSelectedColor; } +unsigned int GuiTheme::getSelectedTextColor() { return mListSelectedColor; } GuiBoxData GuiTheme::getBoxData() { return mBoxData; } @@ -49,12 +49,12 @@ GuiTheme::~GuiTheme() void GuiTheme::setDefaults() { - mListPrimaryColor = 0x0000FF; - mListSecondaryColor = 0x00FF00; - mListSelectorColor = 0x000000; - mListSelectedColor = -1; //-1 = use original list color when selected - mDescColor = 0x0000FF; - mFastSelectColor = 0xFF0000; + mListPrimaryColor = 0x0000FFFF; + mListSecondaryColor = 0x00FF00FF; + mListSelectorColor = 0x000000FF; + mListSelectedColor = 0xFF0000FF; + mDescColor = 0x0000FFFF; + mFastSelectColor = 0xFF0000FF; mHideHeader = false; mHideDividers = false; mListCentered = true; @@ -128,7 +128,7 @@ void GuiTheme::readXML(std::string path) mListPrimaryColor = resolveColor(root.child("listPrimaryColor").text().get(), mListPrimaryColor); mListSecondaryColor = resolveColor(root.child("listSecondaryColor").text().get(), mListSecondaryColor); mListSelectorColor = resolveColor(root.child("listSelectorColor").text().get(), mListSelectorColor); - mListSelectedColor = resolveColor(root.child("listSelectedColor").text().get(), mListSelectedColor); + mListSelectedColor = resolveColor(root.child("listSelectedColor").text().get(), mListPrimaryColor); mDescColor = resolveColor(root.child("descColor").text().get(), mDescColor); mFastSelectColor = resolveColor(root.child("fastSelectColor").text().get(), mFastSelectColor); mHideHeader = root.child("hideHeader"); @@ -271,12 +271,22 @@ float GuiTheme::resolveExp(std::string str, float defaultVal) } //takes a string of hex and resolves it to an integer -int GuiTheme::resolveColor(std::string str, int defaultColor) +unsigned int GuiTheme::resolveColor(std::string str, unsigned int defaultColor) { if(str.empty()) return defaultColor; - int ret; + if(str.length() != 6 && str.length() != 8) + { + std::cerr << "Error - color \"" << str << "\" is not a valid hex color! Must be 6 or 8 characters.\n"; + return defaultColor; + } + + //if there's no alpha specified, assume FF + if(str.length() == 6) + str += "FF"; + + unsigned int ret; std::stringstream ss; ss << std::hex << str; ss >> ret; diff --git a/src/components/GuiTheme.h b/src/components/GuiTheme.h index e3715ade6..9d2036bf2 100644 --- a/src/components/GuiTheme.h +++ b/src/components/GuiTheme.h @@ -15,12 +15,12 @@ public: void readXML(std::string path); - int getPrimaryColor(); - int getSecondaryColor(); - int getSelectorColor(); - int getSelectedTextColor(); - int getDescColor(); - int getFastSelectColor(); + unsigned int getPrimaryColor(); + unsigned int getSecondaryColor(); + unsigned int getSelectorColor(); + unsigned int getSelectedTextColor(); + unsigned int getDescColor(); + unsigned int getFastSelectColor(); bool getHeaderHidden(); bool getDividersHidden(); bool getListCentered(); @@ -50,13 +50,13 @@ private: //utility functions std::string expandPath(std::string path); float resolveExp(std::string str, float defaultVal = 0.0); - int resolveColor(std::string str, int defaultColor = 0x000000); + unsigned int resolveColor(std::string str, unsigned int defaultColor = 0x000000FF); void splitString(std::string str, char delim, std::string* before, std::string* after); float strToFloat(std::string str, float defaultVal = 0.0f); std::vector mComponentVector; std::string mPath; - int mListPrimaryColor, mListSecondaryColor, mListSelectorColor, mListSelectedColor, mDescColor, mFastSelectColor; + unsigned int mListPrimaryColor, mListSecondaryColor, mListSelectorColor, mListSelectedColor, mDescColor, mFastSelectColor; bool mHideHeader, mHideDividers, mListCentered; float mListOffsetX, mListTextOffsetX, mGameImageOffsetX, mGameImageOffsetY, mGameImageWidth, mGameImageHeight, mGameImageOriginX, mGameImageOriginY;