summaryrefslogtreecommitdiff
path: root/src/graphics.cpp
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2005-03-03 12:42:21 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2005-03-03 12:42:21 +0000
commitdf5ee2a5c32258e0d993c7d7c917c75299ee9ae4 (patch)
tree8303eec548a78ae1f8b543aea8658d37321e772b /src/graphics.cpp
parentdbda6463fd8a9c3136daf64e79b5515812a2e40f (diff)
downloadmana-df5ee2a5c32258e0d993c7d7c917c75299ee9ae4.tar.gz
mana-df5ee2a5c32258e0d993c7d7c917c75299ee9ae4.tar.bz2
mana-df5ee2a5c32258e0d993c7d7c917c75299ee9ae4.tar.xz
mana-df5ee2a5c32258e0d993c7d7c917c75299ee9ae4.zip
Separated graphic/graphic.cpp into graphics.cpp and engine.cpp.
Diffstat (limited to 'src/graphics.cpp')
-rw-r--r--src/graphics.cpp135
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
+}