summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tilereg.cc
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-08-05 04:29:26 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-08-05 04:29:26 +0000
commit7d1c30fb193015fef6f15b76c4360ac733581b58 (patch)
tree1b931fdef657b50903c53956c9e5769b397d8d51 /crawl-ref/source/tilereg.cc
parent5c7064085c546eeeaecb43267806c0058345f865 (diff)
downloadcrawl-ref-7d1c30fb193015fef6f15b76c4360ac733581b58.tar.gz
crawl-ref-7d1c30fb193015fef6f15b76c4360ac733581b58.zip
Improved Tile screen layout. Small screens get the message window overlaid on the dungeon. Even smaller screens get the graphics shrunk (and thus slightly blurry.) Added full screen options and several predefined layouts for older and newer Eee PC resolutions.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6774 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/tilereg.cc')
-rw-r--r--crawl-ref/source/tilereg.cc115
1 files changed, 106 insertions, 9 deletions
diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc
index fd8066aebb..70c9640f47 100644
--- a/crawl-ref/source/tilereg.cc
+++ b/crawl-ref/source/tilereg.cc
@@ -143,6 +143,9 @@ void Region::resize_to_fit(int _wx, int _wy)
my = dy ? inner_y / dy : 0;
recalculate();
+
+ ex = sx + _wx;
+ ey = sy + _wy;
}
void Region::recalculate()
@@ -161,7 +164,6 @@ Region::~Region()
bool Region::inside(unsigned int x, unsigned int y)
{
- // TODO enne - need to handle invalid/unintialised regions?
return (x >= sx && y >= sy && x <= ex && y <= ey);
}
@@ -754,10 +756,10 @@ void DungeonRegion::draw_foreground(unsigned int bg, unsigned int fg, unsigned i
add_quad(TEX_DEFAULT, TILE_ANIMATED_WEAPON, x, y);
}
- if (bg & TILE_FLAG_UNSEEN)
+ if (bg & TILE_FLAG_UNSEEN && (bg != TILE_FLAG_UNSEEN || fg))
add_quad(TEX_DEFAULT, TILE_MESH, x, y);
- if (bg & TILE_FLAG_MM_UNSEEN)
+ if (bg & TILE_FLAG_MM_UNSEEN && (bg != TILE_FLAG_MM_UNSEEN || fg))
add_quad(TEX_DEFAULT, TILE_MAGIC_MAP_MESH, x, y);
// Don't let the "new stair" icon cover up any existing icons, but
@@ -2117,9 +2119,6 @@ TextRegion::TextRegion(FTFont *font) :
dx = m_font->char_width();
dy = m_font->char_height();
-
- // TODO enne - gah!
- dx = 8;
}
void TextRegion::on_resize()
@@ -2343,7 +2342,7 @@ bool StatRegion::update_tip_text(std::string& tip)
return true;
}
-MessageRegion::MessageRegion(FTFont *font) : TextRegion(font)
+MessageRegion::MessageRegion(FTFont *font) : TextRegion(font), m_overlay(false)
{
}
@@ -2374,6 +2373,80 @@ bool MessageRegion::update_tip_text(std::string& tip)
return true;
}
+void MessageRegion::set_overlay(bool is_overlay)
+{
+ m_overlay = is_overlay;
+}
+
+struct box_vert
+{
+ float x;
+ float y;
+ unsigned char r;
+ unsigned char g;
+ unsigned char b;
+ unsigned char a;
+};
+
+void MessageRegion::render()
+{
+ if (m_overlay)
+ {
+ unsigned int height;
+ bool found = false;
+ for (height = my; height > 0; height--)
+ {
+ unsigned char *buf = &cbuf[mx * (height - 1)];
+ for (unsigned int x = 0; x < mx; x++)
+ {
+ if (buf[x] != ' ')
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if (found)
+ break;
+ }
+
+ if (height > 0)
+ {
+ height *= m_font->char_height();
+ box_vert verts[4];
+ for (unsigned int i = 0; i < 4; i++)
+ {
+ verts[i].r = 100;
+ verts[i].g = 100;
+ verts[i].b = 100;
+ verts[i].a = 100;
+ }
+ verts[0].x = sx;
+ verts[0].y = sy;
+ verts[1].x = sx;
+ verts[1].y = sy + height;
+ verts[2].x = ex;
+ verts[2].y = sy + height;
+ verts[3].x = ex;
+ verts[3].y = sy;
+
+ glLoadIdentity();
+
+ GLState state;
+ state.array_vertex = true;
+ state.array_colour = true;
+ state.blend = true;
+ GLStateManager::set(state);
+
+ glVertexPointer(2, GL_FLOAT, sizeof(box_vert), &verts[0].x);
+ glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(box_vert), &verts[0].r);
+ glDrawArrays(GL_QUADS, 0, sizeof(verts) / sizeof(box_vert));
+ }
+ }
+
+ m_font->render_textblock(sx + ox, sy + oy, cbuf, abuf, mx, my, m_overlay);
+}
+
CRTRegion::CRTRegion(FTFont *font) : TextRegion(font)
{
}
@@ -2486,7 +2559,7 @@ static void _copy_under(unsigned char *pixels, unsigned int width,
{
size_t image_size = 32 * 32 * 4;
- // Make a copy of the original images on the stack.
+ // Make a copy of the original images.
unsigned char *under = new unsigned char[image_size];
_copy_into(under, pixels, width, height, idx_under);
unsigned char *over = new unsigned char[image_size];
@@ -2534,7 +2607,31 @@ static bool _process_item_image(unsigned char *pixels,
int tile1 = TILE_ROD_SMITING + i - STAFF_SMITING;
_copy_under(pixels, width, height, tile0, tile1);
}
-
+
+ // TODO enne - fix rtiles so that it can accept PNGs.
+ {
+ size_t image_size = 32 * 32 * 4;
+ unsigned char *mesh = new unsigned char[image_size];
+
+ for (unsigned int i = 0; i < image_size; i += 4)
+ {
+ mesh[i] = mesh[i+1] = mesh[i+2] = 0;
+ mesh[i+3] = 110;
+ }
+ _copy_onto(pixels, width, height, mesh, TILE_MESH, false);
+
+ for (unsigned int i = 0; i < image_size; i += 4)
+ {
+ mesh[i] = 70;
+ mesh[i+1] = 70;
+ mesh[i+2] = 180;
+ mesh[i+3] = 120;
+ }
+ _copy_onto(pixels, width, height, mesh, TILE_MAGIC_MAP_MESH, false);
+
+ delete[] mesh;
+ }
+
return true;
}