1 /* $Id: TitleView.cpp,v 1.18 2003/07/28 17:00:52 nan Exp $ */
2
3 // Copyright (C) 2000, 2002, 2003 ���� �ȹ�(Kanna Yoshihiro)
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 2 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19 #include "ttinc.h"
20 #include "TitleView.h"
21 #include "Title.h"
22 #include "MenuItem.h"
23 #include "LoadImage.h"
24 #include "BaseView.h"
25 #include "RCFile.h"
26
27 extern RCFile *theRC;
28
TitleView()29 TitleView::TitleView() {
30 m_View = NULL;
31 }
32
~TitleView()33 TitleView::~TitleView() {
34 }
35
36 bool
Init(Title * title)37 TitleView::Init( Title *title ) {
38 int i, j, k;
39
40 static char configTitle[][30] = {"images/LevelSelect",
41 "images/ModeSelect"
42 };
43
44 m_title = title;
45
46 char fname[256];
47 for ( i = 0 ; i < 2 ; i++ ) {
48 sprintf( fname, _("%s.pbm"), &(configTitle[i][0]) );
49 m_configTitle[i].LoadFile(fname);
50 }
51
52 return true;
53 }
54
55 bool
AddView(View * view)56 TitleView::AddView( View *view ) {
57 view->m_next = m_View;
58 m_View = view;
59
60 return true;
61 }
62
63 bool
RemoveView(View * view)64 TitleView::RemoveView( View *view ) {
65 View* _view = m_View;
66
67 if ( _view == view ){
68 m_View = _view->m_next;
69 return true;
70 }
71
72 while ( _view ){
73 if ( _view->m_next == view ){
74 _view->m_next = view->m_next;
75 return true;
76 }
77 _view = _view->m_next;
78 }
79
80 return false;
81 }
82
83 bool
Redraw()84 TitleView::Redraw() {
85 View *view;
86
87 view = m_View;
88 while ( view ){
89 view->Redraw();
90 view = view->m_next;
91 }
92
93 return true;
94 }
95
96 bool
RedrawAlpha()97 TitleView::RedrawAlpha() {
98 View *view;
99
100 glColor4f( 1.0F, 1.0F, 1.0F, 1.0F );
101
102 glPushMatrix();
103 glMatrixMode(GL_PROJECTION);
104 glPushMatrix();
105 glLoadIdentity();
106 gluOrtho2D( 0.0, (GLfloat)BaseView::GetWinWidth(),
107 0.0, (GLfloat)BaseView::GetWinHeight() );
108 glMatrixMode(GL_MODELVIEW);
109 glLoadIdentity();
110
111 GLboolean depthtestenabled = glIsEnabled(GL_DEPTH_TEST);
112 glDisable(GL_DEPTH_TEST);
113 glDepthMask(0);
114
115 switch ( m_title->GetSelectMode() ) {
116 case MENU_MAIN:
117 glColor4f( 1.0F, 1.0F, 0.0F, 1.0F );
118 glBegin(GL_TRIANGLES);
119 glVertex2i( m_title->GetSelected()->GetX()-80,
120 m_title->GetSelected()->GetY() );
121 glVertex2i( m_title->GetSelected()->GetX()-20,
122 m_title->GetSelected()->GetY()+35 );
123 glVertex2i( m_title->GetSelected()->GetX()-80,
124 m_title->GetSelected()->GetY()+70 );
125 glEnd();
126 break;
127 case MENU_CONFIG:
128 // Title
129 glColor4f( 0.0F, 0.2F, 0.0F, 0.5F );
130 glBegin(GL_QUADS);
131 glVertex2i( 30, 250 );
132 glVertex2i( 330, 250 );
133 glVertex2i( 330, 570 );
134 glVertex2i( 30, 570 );
135
136 glVertex2i( 430, 320 );
137 glVertex2i( 730, 320 );
138 glVertex2i( 730, 570 );
139 glVertex2i( 430, 570 );
140
141 glVertex2i( 430, 50 );
142 glVertex2i( 730, 50 );
143 glVertex2i( 730, 300 );
144 glVertex2i( 430, 300 );
145 glEnd();
146
147 glColor4f( 1.0F, 1.0F, 1.0F, 1.0F );
148 glRasterPos2i( 80, 520 );
149 glBitmap( 200, 35, 0.0F, 0.0F, 0.0F, 0, m_configTitle[0].GetImage() );
150 glRasterPos2i( 480, 520 );
151 glBitmap( 200, 35, 0.0F, 0.0F, 0.0F, 0, m_configTitle[1].GetImage() );
152 // glRasterPos2i( 480, 250 );
153 // glBitmap( 200, 35, 0.0F, 0.0F, 0.0F, 0, &m_configTitle[2][0] );
154
155 glColor4f( 1.0F, 1.0F, 0.0F, 1.0F );
156 glBegin(GL_TRIANGLES);
157 if ( m_title->GetSelected()->GetHeight() == 70 ) {
158 glVertex2i( m_title->GetSelected()->GetX()-80,
159 m_title->GetSelected()->GetY() );
160 glVertex2i( m_title->GetSelected()->GetX()-20,
161 m_title->GetSelected()->GetY()+35 );
162 glVertex2i( m_title->GetSelected()->GetX()-80,
163 m_title->GetSelected()->GetY()+70 );
164 } else {
165 glVertex2i( m_title->GetSelected()->GetX()-40,
166 m_title->GetSelected()->GetY() );
167 glVertex2i( m_title->GetSelected()->GetX()-10,
168 m_title->GetSelected()->GetY()+18 );
169 glVertex2i( m_title->GetSelected()->GetX()-40,
170 m_title->GetSelected()->GetY()+36 );
171 }
172 glEnd();
173 break;
174 }
175
176 glDepthMask(1);
177 if (depthtestenabled) glEnable(GL_DEPTH_TEST);
178
179 glMatrixMode(GL_PROJECTION);
180 glPopMatrix();
181 glMatrixMode(GL_MODELVIEW);
182 glPopMatrix();
183
184 view = m_View;
185 while ( view ){
186 view->RedrawAlpha();
187 view = view->m_next;
188 }
189
190 return true;
191 }
192