summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2009-04-19 19:17:31 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2009-04-19 19:17:31 +0000
commit69dba83ab0a392a350bf35d782770bdb217c92ae (patch)
tree37442c65c32062e2ef24cc6fed156ed7f5ccaa81
parent6c343fd8e3a09865c8ee23ffeb5da6dc07379cfe (diff)
downloadcrawl-ref-69dba83ab0a392a350bf35d782770bdb217c92ae.tar.gz
crawl-ref-69dba83ab0a392a350bf35d782770bdb217c92ae.zip
[2774528] Tiles splash screen.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9658 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/newgame.cc2
-rw-r--r--crawl-ref/source/tile2.cc48
-rw-r--r--crawl-ref/source/tilereg.cc51
-rw-r--r--crawl-ref/source/tilereg.h16
-rw-r--r--crawl-ref/source/tilesdl.cc14
-rw-r--r--crawl-ref/source/tilesdl.h5
-rw-r--r--crawl-ref/source/tiletex.cc26
-rw-r--r--crawl-ref/source/tiletex.h3
8 files changed, 108 insertions, 57 deletions
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index 8e9ecdfd76..b44d441a78 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -3021,7 +3021,7 @@ static void _opening_screen(void)
#ifdef USE_TILE
// More grand... Like this? ;)
if (Options.tile_title_screen)
- TileDrawTitle();
+ tiles.draw_title();
#endif
std::string msg =
diff --git a/crawl-ref/source/tile2.cc b/crawl-ref/source/tile2.cc
index 680daee858..d79151d6ae 100644
--- a/crawl-ref/source/tile2.cc
+++ b/crawl-ref/source/tile2.cc
@@ -199,52 +199,4 @@ int get_clean_map_idx(int tile_idx)
return tile_idx;
}
-void TileDrawTitle()
-{
-#if 0
- img_type TitleImg = ImgLoadFileSimple("title");
- if (!TitleImg)
- return;
-
- int winx = win_main->wx;
- int winy = win_main->wy;
-
- TileRegionClass title(winx, winy, 1, 1);
- win_main->placeRegion(&title, 0, 0, 0, 0, 0, 0, 0);
- title.init_backbuf();
- img_type pBuf = title.backbuf;
-
- int tx = ImgWidth(TitleImg);
- int ty = ImgHeight(TitleImg);
-
- int x, y;
-
- if (tx > winx)
- {
- x = 0;
- tx = winx;
- }
- else
- x = (winx - tx)/2;
-
- if (ty > winy)
- {
- y = 0;
- ty = winy;
- }
- else
- y = (winy - ty)/2;
-
- ImgCopy(TitleImg, 0, 0, tx, ty, pBuf, x, y, 1);
- title.make_active();
- title.redraw();
- ImgDestroy(TitleImg);
-
- getch();
- clrscr();
-
- win_main->removeRegion(&title);
-#endif
-}
-
#endif
diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc
index 73992978f1..d01265a669 100644
--- a/crawl-ref/source/tilereg.cc
+++ b/crawl-ref/source/tilereg.cc
@@ -2830,6 +2830,57 @@ void MenuRegion::set_more(const formatted_string &more)
m_dirty = true;
}
+TitleRegion::TitleRegion(int width, int height) :
+ m_buf(&m_img, GL_QUADS)
+{
+ sx = sy = 0;
+ dx = dy = 1;
+
+ if (!m_img.load_texture("title.png", GenericTexture::MIPMAP_NONE, NULL, false))
+ return;
+
+ // Center
+ wx = width;
+ wy = height;
+ ox = (wx - m_img.width()) / 2;
+ oy = (wy - m_img.height()) / 2;
+
+ {
+ PTVert &v = m_buf.get_next();
+ v.pos_x = 0;
+ v.pos_y = 0;
+ v.tex_x = 0;
+ v.tex_y = 0;
+ }
+ {
+ PTVert &v = m_buf.get_next();
+ v.pos_x = 0;
+ v.pos_y = m_img.height();
+ v.tex_x = 0;
+ v.tex_y = 1;
+ }
+ {
+ PTVert &v = m_buf.get_next();
+ v.pos_x = m_img.width();
+ v.pos_y = m_img.height();
+ v.tex_x = 1;
+ v.tex_y = 1;
+ }
+ {
+ PTVert &v = m_buf.get_next();
+ v.pos_x = m_img.width();
+ v.pos_y = 0;
+ v.tex_x = 1;
+ v.tex_y = 0;
+ }
+}
+
+void TitleRegion::render()
+{
+ set_transform();
+ m_buf.draw();
+}
+
ImageManager::ImageManager()
{
}
diff --git a/crawl-ref/source/tilereg.h b/crawl-ref/source/tilereg.h
index b6f75de610..17bd2d56b3 100644
--- a/crawl-ref/source/tilereg.h
+++ b/crawl-ref/source/tilereg.h
@@ -423,6 +423,22 @@ protected:
bool m_far_view;
};
+class TitleRegion : public Region
+{
+public:
+ TitleRegion(int width, int height);
+
+ virtual void render();
+ virtual void clear() {};
+
+ virtual int handle_mouse(MouseEvent &event) { return 0; }
+
+protected:
+ virtual void on_resize() {}
+
+ GenericTexture m_img;
+ VertBuffer<PTVert> m_buf;
+};
#endif
#endif
diff --git a/crawl-ref/source/tilesdl.cc b/crawl-ref/source/tilesdl.cc
index b31ee1b9c0..4e6d781837 100644
--- a/crawl-ref/source/tilesdl.cc
+++ b/crawl-ref/source/tilesdl.cc
@@ -148,6 +148,7 @@ void TilesFramework::shutdown()
delete m_region_inv;
delete m_region_crt;
delete m_region_menu;
+ delete m_region_title;
m_region_tile = NULL;
m_region_stat = NULL;
@@ -156,6 +157,7 @@ void TilesFramework::shutdown()
m_region_inv = NULL;
m_region_crt = NULL;
m_region_menu = NULL;
+ m_region_title = NULL;
for (unsigned int i = 0; i < LAYER_MAX; i++)
m_layers[i].m_regions.clear();
@@ -171,6 +173,14 @@ void TilesFramework::shutdown()
_shutdown_console();
}
+void TilesFramework::draw_title()
+{
+ m_active_layer = LAYER_TITLE;
+ set_need_redraw();
+
+ getch();
+}
+
void TilesFramework::calculate_default_options()
{
// Find which set of _screen_sizes to use.
@@ -315,6 +325,8 @@ bool TilesFramework::initialise()
m_region_crt = new CRTRegion(m_fonts[crt_font].font);
m_region_menu = new MenuRegion(&m_image, m_fonts[crt_font].font);
+ m_region_title = new TitleRegion(m_windowsz.x, m_windowsz.y);
+
m_layers[LAYER_NORMAL].m_regions.push_back(m_region_map);
m_layers[LAYER_NORMAL].m_regions.push_back(m_region_tile);
m_layers[LAYER_NORMAL].m_regions.push_back(m_region_inv);
@@ -324,6 +336,8 @@ bool TilesFramework::initialise()
m_layers[LAYER_CRT].m_regions.push_back(m_region_crt);
m_layers[LAYER_CRT].m_regions.push_back(m_region_menu);
+ m_layers[LAYER_TITLE].m_regions.push_back(m_region_title);
+
cgotoxy(1, 1, GOTO_CRT);
GLStateManager::init();
diff --git a/crawl-ref/source/tilesdl.h b/crawl-ref/source/tilesdl.h
index c8a211ed21..b1ab6866e2 100644
--- a/crawl-ref/source/tilesdl.h
+++ b/crawl-ref/source/tilesdl.h
@@ -125,6 +125,8 @@ public:
void add_overlay(const coord_def &gc, int idx);
void clear_overlays();
+ void draw_title();
+
MenuRegion *get_menu() { return m_region_menu; }
protected:
@@ -169,6 +171,9 @@ protected:
CRTRegion *m_region_crt;
MenuRegion *m_region_menu;
+ // Title layer
+ TitleRegion *m_region_title;
+
struct font_info
{
std::string name;
diff --git a/crawl-ref/source/tiletex.cc b/crawl-ref/source/tiletex.cc
index 8a0c89dee7..29d3c4caa2 100644
--- a/crawl-ref/source/tiletex.cc
+++ b/crawl-ref/source/tiletex.cc
@@ -31,7 +31,8 @@ void GenericTexture::unload_texture()
bool GenericTexture::load_texture(const char *filename,
GenericTexture::MipMapOptions mip_opt,
- tex_proc_func proc)
+ tex_proc_func proc,
+ bool force_power_of_two)
{
char acBuffer[512];
@@ -56,13 +57,24 @@ bool GenericTexture::load_texture(const char *filename,
// Determine texture format
unsigned char *pixels = (unsigned char*)img->pixels;
- int new_width = 1;
- while (new_width < img->w)
- new_width *= 2;
- int new_height = 1;
- while (new_height < img->h)
- new_height *= 2;
+ int new_width;
+ int new_height;
+ if (force_power_of_two)
+ {
+ new_width = 1;
+ while (new_width < img->w)
+ new_width *= 2;
+
+ new_height = 1;
+ while (new_height < img->h)
+ new_height *= 2;
+ }
+ else
+ {
+ new_width = img->w;
+ new_height = img->h;
+ }
GLenum texture_format;
if (bpp == 4)
diff --git a/crawl-ref/source/tiletex.h b/crawl-ref/source/tiletex.h
index c9488019f3..9c689dcbcd 100644
--- a/crawl-ref/source/tiletex.h
+++ b/crawl-ref/source/tiletex.h
@@ -44,7 +44,8 @@ public:
unsigned int h);
bool load_texture(const char *filename, MipMapOptions mip_opt,
- tex_proc_func proc = NULL);
+ tex_proc_func proc = NULL,
+ bool force_power_of_two = true);
bool load_texture(unsigned char *pixels, unsigned int w, unsigned int h,
MipMapOptions mip_opt);
void unload_texture();