summaryrefslogtreecommitdiff
path: root/src/render/openglgraphics_calcImageRect.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/openglgraphics_calcImageRect.hpp')
-rw-r--r--src/render/openglgraphics_calcImageRect.hpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/render/openglgraphics_calcImageRect.hpp b/src/render/openglgraphics_calcImageRect.hpp
new file mode 100644
index 000000000..403c85ba7
--- /dev/null
+++ b/src/render/openglgraphics_calcImageRect.hpp
@@ -0,0 +1,90 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2013 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+//bool Graphics::calcImageRect(ImageVertexes *const vert,
+// const int x, const int y,
+// const int w, const int h,
+// const ImageRect &imgRect)
+
+if (!vert)
+ return;
+
+BLOCK_START("Graphics::calcImageRect")
+
+const Image *const *const grid = imgRect.grid;
+const Image *const topLeft = grid[0];
+const Image *const topRight = grid[2];
+const Image *const bottomLeft = grid[6];
+const Image *const bottomRight = grid[8];
+const Image *const top = grid[1];
+const Image *const right = grid[5];
+const Image *const bottom = grid[7];
+const Image *const left = grid[3];
+const Image *const center = grid[4];
+
+const bool drawMain = center && topLeft && topRight
+ && bottomLeft && bottomRight;
+
+// Draw the center area
+if (center && drawMain)
+{
+ const int tlw = topLeft->getWidth();
+ const int tlh = topLeft->getHeight();
+ calcPattern(vert, center, tlw + x, tlh + y,
+ w - tlw - topRight->getWidth(),
+ h - tlh - bottomLeft->getHeight());
+}
+// Draw the sides
+if (top && left && bottom && right)
+{
+ const int lw = left->getWidth();
+ const int rw = right->getWidth();
+ const int th = top->getHeight();
+ const int bh = bottom->getHeight();
+ calcPattern(vert, top, x + lw, y, w - lw - rw, th);
+ calcPattern(vert, bottom, x + lw, y + h - bh, w - lw - rw, bh);
+ calcPattern(vert, left, x, y + th, lw, h - th - bh);
+ if (w > rw)
+ calcPattern(vert, right, x + w - rw, y + th, rw, h - th - bh);
+}
+
+calcTileVertexes(vert, topLeft, x, y);
+if (topRight)
+{
+ const int trw = topRight->getWidth();
+ if (w > trw)
+ calcTileVertexes(vert, topRight, x + w - trw, y);
+}
+if (bottomLeft)
+ calcTileVertexes(vert, bottomLeft, x, y + h - bottomLeft->getHeight());
+if (bottomRight)
+{
+ const int brw = bottomRight->getWidth();
+ if (w > brw)
+ {
+ calcTileVertexes(vert, bottomRight, x + w - brw,
+ y + h - bottomRight->getHeight());
+ }
+}
+
+BLOCK_END("Graphics::calcImageRect")