1 /* $Id: TitleView2D.cpp,v 1.7 2001/12/25 15:18:05 yotsuya Exp $ */
2 
3 // Copyright (C) 2001  $B?@Fn(B $B5H9((B(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 "TitleView2D.h"
21 #include "Title.h"
22 #include "MenuItem.h"
23 #include "LoadImage.h"
24 #include "BaseView2D.h"
25 
TitleView2D()26 TitleView2D::TitleView2D() {
27   m_View = NULL;
28 }
29 
~TitleView2D()30 TitleView2D::~TitleView2D() {
31   ((BaseView2D *)BaseView::TheView())->AddUpdateRect( NULL );
32 }
33 
34 bool
AddView(View * view)35 TitleView2D::AddView( View *view ) {
36   view->m_next = m_View;
37   m_View = view;
38 
39   return true;
40 }
41 
42 bool
RemoveView(View * view)43 TitleView2D::RemoveView( View *view ) {
44   View* _view = m_View;
45 
46   if ( _view == view ){
47     m_View = _view->m_next;
48     return true;
49   }
50 
51   while ( _view ){
52     if ( _view->m_next == view ){
53       _view->m_next = view->m_next;
54       return true;
55     }
56     _view = _view->m_next;
57   }
58 
59   return false;
60 }
61 
62 bool
Init(Title * title)63 TitleView2D::Init( Title *title ) {
64   static char configTitle[][30] = {"images/LevelSelect.ppm",
65 				   "images/ModeSelect.ppm"
66   };
67 
68   m_triangleBMP = SDL_LoadBMP( "images/Triangle.bmp" );
69   SDL_SetColorKey( m_triangleBMP, SDL_SRCCOLORKEY|SDL_RLEACCEL, 0 );
70 
71   m_title = title;
72 
73   ((BaseView2D *)BaseView::TheView())->AddUpdateRect( NULL );
74 
75   return true;
76 }
77 
78 bool
Redraw()79 TitleView2D::Redraw() {
80   View *view;
81 
82   view = m_View;
83   while ( view ){
84     view->Redraw();
85     view = view->m_next;
86   }
87 
88   return true;
89 }
90 
91 bool
RedrawAlpha()92 TitleView2D::RedrawAlpha() {
93   View *view;
94   SDL_Rect rect;
95 
96   switch ( m_title->GetSelectMode() ) {
97   case MENU_MAIN:
98     rect.x = m_title->GetSelected()->GetX()-80;
99     rect.y = (short)m_title->GetSelected()->GetY();
100     rect.w = m_triangleBMP->w;
101     rect.h = m_triangleBMP->h;
102 
103     SDL_BlitSurface(m_triangleBMP, NULL, BaseView::TheView()->GetSurface(),
104 		    &rect);
105     break;
106   case MENU_CONFIG:
107     // Title
108     if ( m_title->GetSelected()->GetHeight() == 70 ) {
109       rect.x = m_title->GetSelected()->GetX()-80;
110       rect.y = (short)m_title->GetSelected()->GetY();
111       rect.w = m_triangleBMP->w;
112       rect.h = m_triangleBMP->h;
113 
114       SDL_BlitSurface(m_triangleBMP, NULL, BaseView::TheView()->GetSurface(),
115 		      &rect);
116     } else {
117       rect.x = m_title->GetSelected()->GetX()-40;
118       rect.y = (short)m_title->GetSelected()->GetY();
119       rect.w = m_triangleBMP->w;
120       rect.h = m_triangleBMP->h;
121 
122       SDL_BlitSurface(m_triangleBMP, NULL, BaseView::TheView()->GetSurface(),
123 		      &rect);
124     }
125     break;
126   }
127 
128   view = m_View;
129   while ( view ){
130     view->RedrawAlpha();
131     view = view->m_next;
132   }
133 
134   return true;
135 }
136 
137 bool
GetDamageRect()138 TitleView2D::GetDamageRect() {
139   static SDL_Rect rect = {0, 0, 0, 0};
140   switch ( m_title->GetSelectMode() ) {
141   case MENU_MAIN:
142     if ( rect.x != m_title->GetSelected()->GetX()-80 ||
143 	 rect.y != m_title->GetSelected()->GetY() ||
144 	 rect.w != m_triangleBMP->w ||
145 	 rect.h != m_triangleBMP->h ) {
146       ((BaseView2D *)BaseView::TheView())->AddUpdateRect( &rect );
147       rect.x = m_title->GetSelected()->GetX()-80;
148       rect.y = (short)m_title->GetSelected()->GetY();
149       rect.w = 480;
150       rect.h = 70;
151       ((BaseView2D *)BaseView::TheView())->AddUpdateRect( &rect );
152     }
153     break;
154   case MENU_CONFIG:
155     // Title
156     if ( m_title->GetSelected()->GetHeight() == 70 ) {
157       if ( rect.x != m_title->GetSelected()->GetX()-80 ||
158 	   rect.y != m_title->GetSelected()->GetY() ||
159 	   rect.w != m_triangleBMP->w ||
160 	   rect.h != m_triangleBMP->h ) {
161 	((BaseView2D *)BaseView::TheView())->AddUpdateRect( &rect );
162 	rect.x = m_title->GetSelected()->GetX()-80;
163 	rect.y = (short)m_title->GetSelected()->GetY();
164 	rect.w = 280;
165 	rect.h = 70;
166 	((BaseView2D *)BaseView::TheView())->AddUpdateRect( &rect );
167       }
168     } else {
169       if ( rect.x != m_title->GetSelected()->GetX()-40 ||
170 	   rect.y != m_title->GetSelected()->GetY() ||
171 	   rect.w != m_triangleBMP->w ||
172 	   rect.h != m_triangleBMP->h ) {
173 	((BaseView2D *)BaseView::TheView())->AddUpdateRect( &rect );
174 	rect.x = m_title->GetSelected()->GetX()-40;
175 	rect.y = (short)m_title->GetSelected()->GetY();
176 	rect.w = 240;
177 	rect.h = 70;
178 	((BaseView2D *)BaseView::TheView())->AddUpdateRect( &rect );
179       }
180     }
181     break;
182   }
183 
184   return true;
185 }
186