diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-03-03 12:42:21 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-03-03 12:42:21 +0000 |
commit | df5ee2a5c32258e0d993c7d7c917c75299ee9ae4 (patch) | |
tree | 8303eec548a78ae1f8b543aea8658d37321e772b /src/graphics.cpp | |
parent | dbda6463fd8a9c3136daf64e79b5515812a2e40f (diff) | |
download | mana-client-df5ee2a5c32258e0d993c7d7c917c75299ee9ae4.tar.gz mana-client-df5ee2a5c32258e0d993c7d7c917c75299ee9ae4.tar.bz2 mana-client-df5ee2a5c32258e0d993c7d7c917c75299ee9ae4.tar.xz mana-client-df5ee2a5c32258e0d993c7d7c917c75299ee9ae4.zip |
Separated graphic/graphic.cpp into graphics.cpp and engine.cpp.
Diffstat (limited to 'src/graphics.cpp')
-rw-r--r-- | src/graphics.cpp | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/src/graphics.cpp b/src/graphics.cpp new file mode 100644 index 00000000..cd46482b --- /dev/null +++ b/src/graphics.cpp @@ -0,0 +1,135 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#include "graphics.h" +#include "log.h" +#include "resources/resourcemanager.h" + +SDL_Surface *screen; + + +Graphics::Graphics(): + mouseCursor(NULL) +{ +#ifdef USE_OPENGL + setTargetPlane(800, 600); +#else + setTarget(SDL_GetVideoSurface()); +#endif + + // Hide the system mouse cursor + SDL_ShowCursor(SDL_DISABLE); + + // Load the mouse cursor + ResourceManager *resman = ResourceManager::getInstance(); + mouseCursor = resman->getImage("core/graphics/gui/mouse.png", IMG_ALPHA); + if (!mouseCursor) { + error("Unable to load mouse cursor."); + } + + // Initialize for drawing + _beginDraw(); +} + +Graphics::~Graphics() +{ + // Deinitialize for drawing + _endDraw(); +} + +int Graphics::getWidth() +{ + return screen->w; +} + +int Graphics::getHeight() +{ + return screen->h; +} + +void Graphics::drawImageRect( + int x, int y, int w, int h, + Image *topLeft, Image *topRight, + Image *bottomLeft, Image *bottomRight, + Image *top, Image *right, + Image *bottom, Image *left, + Image *center) +{ + // Draw the center area + center->drawPattern(screen, + x + topLeft->getWidth(), y + topLeft->getHeight(), + w - topLeft->getWidth() - topRight->getWidth(), + h - topLeft->getHeight() - bottomLeft->getHeight()); + + // Draw the sides + top->drawPattern(screen, + x + topLeft->getWidth(), y, + w - topLeft->getWidth() - topRight->getWidth(), top->getHeight()); + bottom->drawPattern(screen, + x + bottomLeft->getWidth(), y + h - bottom->getHeight(), + w - bottomLeft->getWidth() - bottomRight->getWidth(), + bottom->getHeight()); + left->drawPattern(screen, + x, y + topLeft->getHeight(), + left->getWidth(), + h - topLeft->getHeight() - bottomLeft->getHeight()); + right->drawPattern(screen, + x + w - right->getWidth(), y + topRight->getHeight(), + right->getWidth(), + h - topRight->getHeight() - bottomRight->getHeight()); + + // Draw the corners + topLeft->draw(screen, x, y); + topRight->draw(screen, x + w - topRight->getWidth(), y); + bottomLeft->draw(screen, x, y + h - bottomLeft->getHeight()); + bottomRight->draw(screen, + x + w - bottomRight->getWidth(), + y + h - bottomRight->getHeight()); +} + +void Graphics::drawImageRect( + int x, int y, int w, int h, + const ImageRect &imgRect) +{ + drawImageRect(x, y, w, h, + imgRect.grid[0], imgRect.grid[2], imgRect.grid[6], imgRect.grid[8], + imgRect.grid[1], imgRect.grid[5], imgRect.grid[7], imgRect.grid[3], + imgRect.grid[4]); +} + +void Graphics::updateScreen() +{ + // Draw mouse before flipping + int mouseX, mouseY; + SDL_GetMouseState(&mouseX, &mouseY); + mouseCursor->draw(screen, mouseX - 5, mouseY - 2); + +#ifdef USE_OPENGL + glFlush(); + glFinish(); + SDL_GL_SwapBuffers(); + glClear(GL_COLOR_BUFFER_BIT); +#else + SDL_Flip(screen); +#endif +} |