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