diff --git a/src/OpenGLGraphics.cpp b/src/OpenGLGraphics.cpp index ed2b2ab69..61c422cd7 100644 --- a/src/OpenGLGraphics.cpp +++ b/src/OpenGLGraphics.cpp @@ -323,22 +323,24 @@ void Graphics::draw_line(int x, int y, int x2, int y2, int r, int g, int b, int void Graphics::drawrect(int x, int y, int width, int height, int r, int g, int b, int a) { x++; + height--; + width--; glColor4ub(r, g, b, a); glBegin(GL_LINE_STRIP); - glVertex2i(x, y); - glVertex2i(x+width, y); - glVertex2i(x+width, y+height); - glVertex2i(x, y+height+1); //+1 is a hack to prevent squares from missing their corners, will make smoothed lines look like SHIT - glVertex2i(x, y); + glVertex2f(x, y); + glVertex2f(x+width, y); + glVertex2f(x+width, y+height); + glVertex2f(x, y+height+1); //+1 is a hack to prevent squares from missing their corners, will make smoothed lines look like SHIT + glVertex2f(x, y); glEnd(); } void Graphics::fillrect(int x, int y, int width, int height, int r, int g, int b, int a) { - x++; + /*x++; y++; width-=1; - height-=1; + height-=1;*/ glColor4ub(r, g, b, a); glBegin(GL_QUADS); diff --git a/src/PowderToy.cpp b/src/PowderToy.cpp index cd647e8d9..0e4323192 100644 --- a/src/PowderToy.cpp +++ b/src/PowderToy.cpp @@ -35,6 +35,7 @@ extern "C" IMAGE_DOS_HEADER __ImageBase; SDL_Surface * SDLOpen() { + SDL_Surface * surface; #if defined(WIN32) && defined(WINCONSOLE) FILE * console = fopen("CON", "w" ); #endif @@ -75,10 +76,21 @@ SDL_Surface * SDLOpen() //SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); atexit(SDL_Quit); #ifndef OGLR - return SDL_SetVideoMode(XRES + BARSIZE, YRES + MENUSIZE, 32, SDL_SWSURFACE); + surface = SDL_SetVideoMode(XRES + BARSIZE, YRES + MENUSIZE, 32, SDL_SWSURFACE); #else - return SDL_SetVideoMode(XRES + BARSIZE, YRES + MENUSIZE, 32, SDL_OPENGL); + surface = SDL_SetVideoMode(XRES + BARSIZE, YRES + MENUSIZE, 32, SDL_OPENGL); #endif + +#if defined(WIN32) && defined(OGLR) + int status = glewInit(); + if(status != GLEW_OK) + { + fprintf(stderr, "Initializing Glew: %d\n", status); + exit(-1); + } +#endif + +return surface; } /*int SDLPoll(SDL_Event * event) diff --git a/src/RasterGraphics.cpp b/src/RasterGraphics.cpp index 472ae3ccc..563aef206 100644 --- a/src/RasterGraphics.cpp +++ b/src/RasterGraphics.cpp @@ -321,6 +321,8 @@ void Graphics::draw_line(int x1, int y1, int x2, int y2, int r, int g, int b, in void Graphics::drawrect(int x, int y, int w, int h, int r, int g, int b, int a) { int i; + w--; + h--; for (i=0; i<=w; i++) { blendpixel(x+i, y, r, g, b, a); @@ -336,8 +338,8 @@ void Graphics::drawrect(int x, int y, int w, int h, int r, int g, int b, int a) void Graphics::fillrect(int x, int y, int w, int h, int r, int g, int b, int a) { int i,j; - for (j=1; jc->OpenSearch(); } }; - searchButton = new ui::Button(ui::Point(currentX, Size.Y-18), ui::Point(16, 16)); //Open + searchButton = new ui::Button(ui::Point(currentX, Size.Y-16), ui::Point(17, 15)); //Open searchButton->SetIcon(IconOpen); currentX+=18; searchButton->SetTogglable(false); @@ -62,7 +62,7 @@ GameView::GameView(): v->c->ReloadSim(); } }; - reloadButton = new ui::Button(ui::Point(currentX, Size.Y-18), ui::Point(16, 16)); + reloadButton = new ui::Button(ui::Point(currentX, Size.Y-16), ui::Point(17, 15)); reloadButton->SetIcon(IconReload); currentX+=18; reloadButton->SetActionCallback(new ReloadAction(this)); @@ -78,9 +78,9 @@ GameView::GameView(): v->c->OpenSaveWindow(); } }; - saveSimulationButton = new ui::Button(ui::Point(currentX, Size.Y-18), ui::Point(Size.X/5, 16)); + saveSimulationButton = new ui::Button(ui::Point(currentX, Size.Y-16), ui::Point(150, 15)); saveSimulationButton->SetIcon(IconSave); - currentX+=(Size.X/5)+2; + currentX+=151; saveSimulationButton->SetActionCallback(new SaveSimulationAction(this)); AddComponent(saveSimulationButton); @@ -94,9 +94,9 @@ GameView::GameView(): v->c->Vote(1); } }; - upVoteButton = new ui::Button(ui::Point(currentX, Size.Y-18), ui::Point(16, 16)); + upVoteButton = new ui::Button(ui::Point(currentX, Size.Y-16), ui::Point(15, 15)); upVoteButton->SetIcon(IconVoteUp); - currentX+=16; + currentX+=15; upVoteButton->SetActionCallback(new UpVoteAction(this)); AddComponent(upVoteButton); @@ -110,9 +110,9 @@ GameView::GameView(): v->c->Vote(-1); } }; - downVoteButton = new ui::Button(ui::Point(currentX, Size.Y-18), ui::Point(16, 16)); + downVoteButton = new ui::Button(ui::Point(currentX, Size.Y-16), ui::Point(15, 15)); downVoteButton->SetIcon(IconVoteDown); - currentX+=18; + currentX+=16; downVoteButton->SetActionCallback(new DownVoteAction(this)); AddComponent(downVoteButton); @@ -126,9 +126,9 @@ GameView::GameView(): v->c->OpenTags(); } }; - tagSimulationButton = new ui::Button(ui::Point(currentX, Size.Y-18), ui::Point(Size.X-(currentX+176), 16)); + tagSimulationButton = new ui::Button(ui::Point(currentX, Size.Y-16), ui::Point(250, 15)); tagSimulationButton->SetIcon(IconTag); - currentX+=Size.X-(currentX+176); + currentX+=251; tagSimulationButton->SetActionCallback(new TagSimulationAction(this)); AddComponent(tagSimulationButton); @@ -142,7 +142,7 @@ GameView::GameView(): v->c->ClearSim(); } }; - clearSimButton = new ui::Button(ui::Point(Size.X-174, Size.Y-18), ui::Point(16, 16)); + clearSimButton = new ui::Button(ui::Point(Size.X-159, Size.Y-16), ui::Point(17, 15)); clearSimButton->SetIcon(IconNew); clearSimButton->SetActionCallback(new ClearSimAction(this)); AddComponent(clearSimButton); @@ -157,7 +157,7 @@ GameView::GameView(): v->c->OpenLogin(); } }; - loginButton = new ui::Button(ui::Point(Size.X-156, Size.Y-18), ui::Point(100, 16), "Login"); + loginButton = new ui::Button(ui::Point(Size.X-141, Size.Y-16), ui::Point(92, 15), "Login"); loginButton->SetIcon(IconLogin); loginButton->SetActionCallback(new LoginAction(this)); AddComponent(loginButton); @@ -172,7 +172,7 @@ GameView::GameView(): v->c->OpenOptions(); } }; - simulationOptionButton = new ui::Button(ui::Point(Size.X-54, Size.Y-18), ui::Point(16, 16)); + simulationOptionButton = new ui::Button(ui::Point(Size.X-48, Size.Y-16), ui::Point(15, 15)); simulationOptionButton->SetIcon(IconSimulationSettings); simulationOptionButton->SetActionCallback(new SimulationOptionAction(this)); AddComponent(simulationOptionButton); @@ -187,7 +187,7 @@ GameView::GameView(): v->c->OpenRenderOptions(); } }; - displayModeButton = new ui::Button(ui::Point(Size.X-36, Size.Y-18), ui::Point(16, 16)); + displayModeButton = new ui::Button(ui::Point(Size.X-32, Size.Y-16), ui::Point(15, 15)); displayModeButton->SetIcon(IconRenderSettings); displayModeButton->SetActionCallback(new DisplayModeAction(this)); AddComponent(displayModeButton); @@ -202,7 +202,7 @@ GameView::GameView(): v->c->SetPaused(sender->GetToggleState()); } }; - pauseButton = new ui::Button(ui::Point(Size.X-18, Size.Y-18), ui::Point(16, 16)); //Pause + pauseButton = new ui::Button(ui::Point(Size.X-16, Size.Y-16), ui::Point(15, 15)); //Pause pauseButton->SetIcon(IconPause); pauseButton->SetTogglable(true); pauseButton->SetActionCallback(new PauseAction(this)); @@ -257,7 +257,7 @@ public: void GameView::NotifyMenuListChanged(GameModel * sender) { - int currentY = YRES+MENUSIZE-18-(sender->GetMenuList().size()*18); + int currentY = YRES+MENUSIZE-16-(sender->GetMenuList().size()*16); for(int i = 0; i < menuButtons.size(); i++) { RemoveComponent(menuButtons[i]); @@ -275,10 +275,10 @@ void GameView::NotifyMenuListChanged(GameModel * sender) { std::string tempString = ""; tempString += menuList[i]->GetIcon(); - ui::Button * tempButton = new ui::Button(ui::Point(XRES+BARSIZE-18, currentY), ui::Point(16, 16), tempString); + ui::Button * tempButton = new ui::Button(ui::Point(XRES+BARSIZE-16, currentY), ui::Point(15, 15), tempString); tempButton->SetTogglable(true); tempButton->SetActionCallback(new MenuAction(this, menuList[i])); - currentY+=18; + currentY+=16; AddComponent(tempButton); menuButtons.push_back(tempButton); } @@ -344,9 +344,9 @@ void GameView::NotifyToolListChanged(GameModel * sender) for(int i = 0; i < toolList.size(); i++) { //ToolButton * tempButton = new ToolButton(ui::Point(XRES+1, currentY), ui::Point(28, 15), toolList[i]->GetName()); - ToolButton * tempButton = new ToolButton(ui::Point(currentX, YRES+1), ui::Point(28, 15), toolList[i]->GetName()); + ToolButton * tempButton = new ToolButton(ui::Point(currentX, YRES+1), ui::Point(30, 18), toolList[i]->GetName()); //currentY -= 17; - currentX -= 32; + currentX -= 31; tempButton->SetActionCallback(new ToolAction(this, toolList[i])); tempButton->SetBackgroundColour(ui::Colour(toolList[i]->colRed, toolList[i]->colGreen, toolList[i]->colBlue)); @@ -364,7 +364,7 @@ void GameView::NotifyToolListChanged(GameModel * sender) tempButton->SetSelectionState(2); //Tertiary } - tempButton->SetAlignment(AlignCentre, AlignBottom); + tempButton->SetAlignment(AlignCentre, AlignMiddle); AddComponent(tempButton); toolButtons.push_back(tempButton); } diff --git a/src/game/ToolButton.cpp b/src/game/ToolButton.cpp index 27bbab6fa..72beed7a7 100644 --- a/src/game/ToolButton.cpp +++ b/src/game/ToolButton.cpp @@ -12,6 +12,7 @@ ToolButton::ToolButton(ui::Point position, ui::Point size, std::string text_): ui::Button(position, size, text_) { SetSelectionState(-1); + activeBorder = ui::Colour(255, 0, 0); } void ToolButton::OnMouseClick(int x, int y, unsigned int button) @@ -37,9 +38,18 @@ void ToolButton::OnMouseUp(int x, int y, unsigned int button) void ToolButton::Draw(const ui::Point& screenPos) { Graphics * g = ui::Engine::Ref().g; - int totalColour = background.Red + 3*background.Green + 2*background.Blue; + int totalColour = background.Red + (3*background.Green) + (2*background.Blue); - g->fillrect(screenPos.X, screenPos.Y, Size.X, Size.Y, background.Red, background.Green, background.Blue, 255); + g->fillrect(screenPos.X+2, screenPos.Y+2, Size.X-4, Size.Y-4, background.Red, background.Green, background.Blue, background.Alpha); + + if(isMouseInside && currentSelection == -1) + { + g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, activeBorder.Red, activeBorder.Green, activeBorder.Blue, activeBorder.Alpha); + } + else + { + g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, border.Red, border.Green, border.Blue, border.Alpha); + } if (totalColour<544) { @@ -49,12 +59,6 @@ void ToolButton::Draw(const ui::Point& screenPos) { g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, buttonDisplayText.c_str(), 0, 0, 0, 255); } - if(currentSelection!=-1) - { - //g->fillrect(screenPos.X+1, screenPos.Y+1, Size.X-2, Size.Y-2, 255, 255, 255, 170); - g->fillrect(screenPos.X+2, screenPos.Y+2, Size.Y-4, Size.Y-4, 0, 0, 0, 170); - g->drawtext(screenPos.X+5, screenPos.Y+4, selectionText, 255, 255, 255, 255); - } } void ToolButton::SetSelectionState(int state) @@ -63,16 +67,16 @@ void ToolButton::SetSelectionState(int state) switch(state) { case 0: - selectionText = "L"; + border = ui::Colour(255, 0, 0); break; case 1: - selectionText = "R"; + border = ui::Colour(0, 0, 255); break; case 2: - selectionText = "M"; + border = ui::Colour(0, 255, 0); break; default: - selectionText = ""; + border = ui::Colour(0, 0, 0); break; } } diff --git a/src/game/ToolButton.h b/src/game/ToolButton.h index 60a1c7c5a..94042a902 100644 --- a/src/game/ToolButton.h +++ b/src/game/ToolButton.h @@ -12,7 +12,6 @@ class ToolButton: public ui::Button { int currentSelection; - std::string selectionText; public: ToolButton(ui::Point position, ui::Point size, std::string text_); virtual void OnMouseUp(int x, int y, unsigned int button); diff --git a/src/interface/Button.cpp b/src/interface/Button.cpp index 5444cdc8f..3bf302b84 100644 --- a/src/interface/Button.cpp +++ b/src/interface/Button.cpp @@ -45,6 +45,8 @@ void Button::TextPosition() buttonDisplayText += "..."; } } + + // Values 3 and 10 are for vertical padding of 3 pixels, middle uses 7 as that's the height of a capital switch(textVAlign) { case AlignTop: @@ -54,7 +56,7 @@ void Button::TextPosition() textPosition.Y = (Size.Y-10)/2; break; case AlignBottom: - textPosition.Y = Size.Y-12; + textPosition.Y = Size.Y-10; break; } @@ -131,20 +133,20 @@ void Button::Draw(const Point& screenPos) { if(isButtonDown || (isTogglable && toggle)) { - g->fillrect(Position.X-1, Position.Y-1, Size.X+2, Size.Y+2, activeBackground.Red, activeBackground.Green, activeBackground.Blue, 255); + g->fillrect(Position.X+1, Position.Y+1, Size.X-2, Size.Y-2, activeBackground.Red, activeBackground.Green, activeBackground.Blue, 255); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, activeBorder.Red, activeBorder.Green, activeBorder.Blue, 255); g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y+1, buttonDisplayText, activeText.Red, activeText.Green, activeText.Blue, 255); } else { - g->fillrect(Position.X, Position.Y, Size.X, Size.Y, background.Red, background.Green, background.Blue, 255); + g->fillrect(Position.X+1, Position.Y+1, Size.X-2, Size.Y-2, background.Red, background.Green, background.Blue, 255); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, border.Red, border.Green, border.Blue, 255); g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y+1, buttonDisplayText, text.Red, text.Green, text.Blue, 255); } } else { - g->fillrect(Position.X, Position.Y, Size.X, Size.Y, background.Red, background.Green, background.Blue, 180); + g->fillrect(Position.X+1, Position.Y+1, Size.X-2, Size.Y-2, background.Red, background.Green, background.Blue, 180); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 180, 180, 180, 255); g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y+1, buttonDisplayText, 180, 180, 180, 255); } diff --git a/src/interface/Checkbox.cpp b/src/interface/Checkbox.cpp index 324455255..2481b23e0 100644 --- a/src/interface/Checkbox.cpp +++ b/src/interface/Checkbox.cpp @@ -60,12 +60,12 @@ void Checkbox::Draw(const Point& screenPos) Graphics * g = Engine::Ref().g; if(checked) { - g->fillrect(screenPos.X+4, screenPos.Y+4, 8, 8, 255, 255, 255, 255); + g->fillrect(screenPos.X+5, screenPos.Y+5, 6, 6, 255, 255, 255, 255); } if(isMouseOver) { g->drawrect(screenPos.X+2, screenPos.Y+2, 12, 12, 255, 255, 255, 255); - g->fillrect(screenPos.X+4, screenPos.Y+4, 8, 8, 255, 255, 255, 170); + g->fillrect(screenPos.X+5, screenPos.Y+5, 6, 6, 255, 255, 255, 170); g->drawtext(screenPos.X+18, screenPos.Y+4, text, 255, 255, 255, 255); } else diff --git a/src/interface/SaveButton.cpp b/src/interface/SaveButton.cpp index 6e08e95ac..0848ff5cc 100644 --- a/src/interface/SaveButton.cpp +++ b/src/interface/SaveButton.cpp @@ -37,6 +37,17 @@ SaveButton::SaveButton(Point position, Point size, Save * save): voteColour.Red = (1.0f-voteRatio)*255; voteColour.Green = voteRatio*255; } + + if(save) + { + name = save->name; + if(Graphics::textwidth((char *)name.c_str()) > Size.X) + { + int position = Graphics::textwidthx((char *)name.c_str(), Size.X - 22); + name = name.erase(position, name.length()-position); + name += "..."; + } + } } SaveButton::~SaveButton() @@ -122,10 +133,10 @@ void SaveButton::Draw(const Point& screenPos) g->drawrect(screenPos.X-3+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-thumbBoxSize.Y)/2, thumbBoxSize.X, thumbBoxSize.Y, 210, 230, 255, 255); else 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); + g->drawrect(screenPos.X-4+thumbBoxSize.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-thumbBoxSize.Y)/2, 7, thumbBoxSize.Y, 180, 180, 180, 255); - int voteBar = max(10.0f, ((float)(thumbBoxSize.Y-2))*voteRatio); - g->fillrect(1+screenPos.X-3+thumbBoxSize.X+(Size.X-thumbBoxSize.X)/2, 1+(screenPos.Y-2)+(thumbBoxSize.Y-voteBar)+(Size.Y-21-thumbBoxSize.Y)/2, 4, voteBar, voteColour.Red, voteColour.Green, voteColour.Blue, 255); + int voteBar = max(10.0f, ((float)(thumbBoxSize.Y-4))*voteRatio); + g->fillrect(1+screenPos.X-3+thumbBoxSize.X+(Size.X-thumbBoxSize.X)/2, (screenPos.Y-2)+(thumbBoxSize.Y-voteBar)+(Size.Y-21-thumbBoxSize.Y)/2, 3, voteBar, voteColour.Red, voteColour.Green, voteColour.Blue, 255); } else { @@ -138,12 +149,12 @@ void SaveButton::Draw(const Point& screenPos) if(isMouseInside) { //g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 255, 255, 255, 255); - g->drawtext(screenPos.X+(Size.X-Graphics::textwidth((char *)save->name.c_str()))/2, screenPos.Y+Size.Y - 21, save->name, 255, 255, 255, 255); + g->drawtext(screenPos.X+(Size.X-Graphics::textwidth((char *)name.c_str()))/2, screenPos.Y+Size.Y - 21, name, 255, 255, 255, 255); g->drawtext(screenPos.X+(Size.X-Graphics::textwidth((char *)save->userName.c_str()))/2, screenPos.Y+Size.Y - 10, save->userName, 200, 230, 255, 255); } else { - g->drawtext(screenPos.X+(Size.X-Graphics::textwidth((char *)save->name.c_str()))/2, screenPos.Y+Size.Y - 21, save->name, 180, 180, 180, 255); + g->drawtext(screenPos.X+(Size.X-Graphics::textwidth((char *)name.c_str()))/2, screenPos.Y+Size.Y - 21, name, 180, 180, 180, 255); g->drawtext(screenPos.X+(Size.X-Graphics::textwidth((char *)save->userName.c_str()))/2, screenPos.Y+Size.Y - 10, save->userName, 100, 130, 160, 255); } } diff --git a/src/interface/SaveButton.h b/src/interface/SaveButton.h index de1b6ed1f..f45663962 100644 --- a/src/interface/SaveButton.h +++ b/src/interface/SaveButton.h @@ -24,6 +24,7 @@ class SaveButton : public Component { Save * save; Thumbnail * thumbnail; + std::string name; public: SaveButton(Point position, Point size, Save * save); virtual ~SaveButton(); diff --git a/src/preview/PreviewView.cpp b/src/preview/PreviewView.cpp index 7df1f6b18..661423cfa 100644 --- a/src/preview/PreviewView.cpp +++ b/src/preview/PreviewView.cpp @@ -27,7 +27,7 @@ PreviewView::PreviewView(): v->c->Exit(); } }; - openButton = new ui::Button(ui::Point(0, Size.Y-16), ui::Point(50, 16), "Open"); + openButton = new ui::Button(ui::Point(0, Size.Y-19), ui::Point(51, 19), "Open"); openButton->SetAlignment(AlignLeft, AlignMiddle); openButton->SetIcon(IconOpen); openButton->SetActionCallback(new OpenAction(this)); @@ -44,7 +44,7 @@ PreviewView::PreviewView(): } }; - favButton = new ui::Button(ui::Point(50, Size.Y-16), ui::Point(50, 16), "Fav."); + favButton = new ui::Button(ui::Point(51, Size.Y-19), ui::Point(51, 19), "Fav."); favButton->SetAlignment(AlignLeft, AlignMiddle); favButton->SetIcon(IconFavourite); favButton->SetActionCallback(new FavAction(this)); @@ -71,7 +71,7 @@ PreviewView::PreviewView(): new TextPrompt("Report Save", "Reason for reporting", true, new ReportPromptCallback(v)); } }; - reportButton = new ui::Button(ui::Point(100, Size.Y-16), ui::Point(50, 16), "Report"); + reportButton = new ui::Button(ui::Point(102, Size.Y-19), ui::Point(51, 19), "Report"); reportButton->SetAlignment(AlignLeft, AlignMiddle); reportButton->SetIcon(IconReport); reportButton->SetActionCallback(new ReportAction(this)); @@ -88,7 +88,7 @@ PreviewView::PreviewView(): } }; - browserOpenButton = new ui::Button(ui::Point((XRES/2)-110, Size.Y-16), ui::Point(110, 16), "Open in browser"); + browserOpenButton = new ui::Button(ui::Point((XRES/2)-108, Size.Y-19), ui::Point(108, 19), "Open in browser"); browserOpenButton->SetAlignment(AlignLeft, AlignMiddle); browserOpenButton->SetIcon(IconOpen); browserOpenButton->SetActionCallback(new BrowserOpenAction(this));