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