1
1
/* ****************************************************************************
2
2
*
3
- * PROJECT: Multi Theft Auto v1.0
3
+ * PROJECT: Multi Theft Auto
4
4
* LICENSE: See LICENSE in the top level directory
5
5
* FILE: core/CLanguageSelector.cpp
6
6
*
7
- * Multi Theft Auto is available from http ://www. multitheftauto.com/
7
+ * Multi Theft Auto is available from https ://multitheftauto.com/
8
8
*
9
9
*****************************************************************************/
10
10
11
11
#include " StdInc.h"
12
12
#include " CLanguageSelector.h"
13
13
14
- #define FLAG_SIZE_X 26
15
- #define FLAG_SIZE_Y 16
16
- #define FLAG_LABEL_GAP_X 10 // Gap between flag and label
17
- #define FLAG_ZOOM_SCALE 0 .75f
18
- #define LABEL_SIZE_X 95
19
- #define LABEL_SIZE_Y 16
20
- #define LABEL_OFFSET_Y ((FLAG_SIZE_Y - LABEL_SIZE_Y) / 2 )
14
+ #define LANGUAGE_ICON_SIZE_X 20
15
+ #define LANGUAGE_ICON_SIZE_Y 24
16
+ #define LANGUAGE_ICON_LABEL_GAP_X 10 // Gap between language icon and label
21
17
22
- // Flag 'n' label combo
23
- #define ITEM_SIZE_X 145
24
- #define ITEM_SIZE_Y 30
18
+ #define LABEL_SIZE_X 165
19
+ #define LABEL_SIZE_Y 16
20
+
21
+ #define LANGUAGE_ICON_LABEL_OFFSET_Y ((LANGUAGE_ICON_SIZE_Y - LABEL_SIZE_Y) / 2 )
22
+
23
+ // Language icon and label combo
24
+ #define ITEM_SIZE_X 165
25
+ #define ITEM_SIZE_Y 24
25
26
26
27
// Current language button
27
- #define BUTTON_MARGIN_X 20
28
- #define BUTTON_MARGIN_Y 5
28
+ #define BUTTON_MARGIN_X 20
29
+ #define BUTTON_MARGIN_Y 5
29
30
30
31
// All languages list
31
- #define LIST_MARGIN_X 22
32
- #define LIST_MARGIN_Y 13
33
- #define LIST_ITEM_SPACING_X 12
34
- #define LIST_ITEM_SPACING_Y 1
32
+ #define LIST_MARGIN_X 20
33
+ #define LIST_MARGIN_Y 18
34
+ #define LIST_ITEM_SPACING_X 10
35
+ #define LIST_ITEM_SPACING_Y 1
35
36
36
37
// /////////////////////////////////////////////////////////////
37
38
//
@@ -57,12 +58,12 @@ CLanguageSelector::~CLanguageSelector()
57
58
SAFE_DELETE (m_pButtonWindow);
58
59
SAFE_DELETE (m_pListWindow);
59
60
SAFE_DELETE (m_ButtonItem.pContainerPane );
60
- SAFE_DELETE (m_ButtonItem.pFlag );
61
+ SAFE_DELETE (m_ButtonItem.pIcon );
61
62
SAFE_DELETE (m_ButtonItem.pLabel );
62
63
for (CLangListItem& item : m_ListItems)
63
64
{
64
65
SAFE_DELETE (item.pContainerPane );
65
- SAFE_DELETE (item.pFlag );
66
+ SAFE_DELETE (item.pIcon );
66
67
SAFE_DELETE (item.pLabel );
67
68
}
68
69
}
@@ -92,7 +93,40 @@ void CLanguageSelector::CreateGUI(CGUIElement* pMainMenuCanvas)
92
93
m_pButtonWindow->SetVisible (true );
93
94
94
95
CVector2D vecItemPosition (BUTTON_MARGIN_X, BUTTON_MARGIN_Y);
95
- m_ButtonItem = CreateGUILangItem (m_pButtonWindow, vecItemPosition);
96
+
97
+ CVector2D vecPaneSize (ITEM_SIZE_X, ITEM_SIZE_Y);
98
+ CVector2D vecIconPos = vecItemPosition + CVector2D (LANGUAGE_ICON_SIZE_X / 2 , (vecPaneSize.fY - LANGUAGE_ICON_SIZE_Y) / 2 );
99
+ CVector2D vecLabelPos = vecIconPos + CVector2D (LANGUAGE_ICON_SIZE_X + LANGUAGE_ICON_LABEL_GAP_X, LANGUAGE_ICON_LABEL_OFFSET_Y);
100
+
101
+ CGUIScrollPane* pContainerPane = reinterpret_cast <CGUIScrollPane*>(g_pCore->GetGUI ()->CreateScrollPane (m_pButtonWindow));
102
+ pContainerPane->SetProperty (" ContentPaneAutoSized" , " False" );
103
+ pContainerPane->SetPosition (vecItemPosition);
104
+ pContainerPane->SetSize (vecPaneSize);
105
+ pContainerPane->SetZOrderingEnabled (false );
106
+ pContainerPane->SetAlwaysOnTop (true );
107
+ pContainerPane->SetVisible (true );
108
+
109
+ CGUIStaticImage* pIcon = reinterpret_cast <CGUIStaticImage*>(g_pCore->GetGUI ()->CreateStaticImage (m_pButtonWindow));
110
+ pIcon->SetPosition (vecIconPos);
111
+ pIcon->SetSize (CVector2D (LANGUAGE_ICON_SIZE_X, LANGUAGE_ICON_SIZE_Y));
112
+ pIcon->SetZOrderingEnabled (false );
113
+ pIcon->LoadFromFile (CalcMTASAPath (" MTA\\ cgui\\ images\\ the_language_icon.png" ));
114
+
115
+ CGUILabel* pLabel = reinterpret_cast <CGUILabel*>(g_pCore->GetGUI ()->CreateLabel (m_pButtonWindow));
116
+ pLabel->SetPosition (vecLabelPos);
117
+ pLabel->SetSize (CVector2D (LABEL_SIZE_X, LABEL_SIZE_Y));
118
+ pLabel->SetZOrderingEnabled (false );
119
+ pLabel->SetText (g_pLocalization->GetLanguageNativeName ());
120
+
121
+ CLangListItem m_ButtonItem;
122
+ m_ButtonItem.strLocale = " " ;
123
+ m_ButtonItem.pContainerPane = pContainerPane;
124
+ m_ButtonItem.pIcon = pIcon;
125
+ m_ButtonItem.vecIconInitialPos = pIcon->GetPosition ();
126
+ m_ButtonItem.vecIconInitialSize = pIcon->GetSize ();
127
+ m_ButtonItem.pLabel = pLabel;
128
+ m_ButtonItem.vecLabelInitialPos = pLabel->GetPosition ();
129
+ m_ButtonItem.vecLabelInitialSize = pLabel->GetSize ();
96
130
m_ButtonItem.pContainerPane ->SetMouseButtonDownHandler (GUI_CALLBACK (&CLanguageSelector::OnButtonClick, this ));
97
131
m_ButtonItem.pContainerPane ->SetMouseEnterHandler (GUI_CALLBACK (&CLanguageSelector::OnButtonEnter, this ));
98
132
m_ButtonItem.pContainerPane ->SetMouseLeaveHandler (GUI_CALLBACK (&CLanguageSelector::OnButtonLeave, this ));
@@ -151,15 +185,14 @@ void CLanguageSelector::CreateGUI(CGUIElement* pMainMenuCanvas)
151
185
//
152
186
// CLanguageSelector::CreateGUILangItem
153
187
//
154
- // Create GUI items for one flag with language name .
188
+ // Create GUI items for a language.
155
189
// ContainerPane is used to handle mouse interaction
156
190
//
157
191
// /////////////////////////////////////////////////////////////
158
192
CLangListItem CLanguageSelector::CreateGUILangItem (CGUIElement* pGUIParent, const CVector2D& vecPanePosition, const SString& strLocale)
159
193
{
160
194
CVector2D vecPaneSize (ITEM_SIZE_X, ITEM_SIZE_Y);
161
- CVector2D vecFlagPos = vecPanePosition + CVector2D ((FLAG_SIZE_X * FLAG_ZOOM_SCALE) / 2 , (vecPaneSize.fY - FLAG_SIZE_Y) / 2 );
162
- CVector2D vecLabelPos = vecFlagPos + CVector2D (FLAG_SIZE_X + FLAG_LABEL_GAP_X, LABEL_OFFSET_Y);
195
+ CVector2D vecLabelPos = vecPanePosition;
163
196
164
197
CGUIScrollPane* pContainerPane = reinterpret_cast <CGUIScrollPane*>(g_pCore->GetGUI ()->CreateScrollPane (pGUIParent));
165
198
pContainerPane->SetProperty (" ContentPaneAutoSized" , " False" );
@@ -169,12 +202,6 @@ CLangListItem CLanguageSelector::CreateGUILangItem(CGUIElement* pGUIParent, cons
169
202
pContainerPane->SetAlwaysOnTop (true );
170
203
pContainerPane->SetVisible (true );
171
204
172
- CGUIStaticImage* pFlag = reinterpret_cast <CGUIStaticImage*>(g_pCore->GetGUI ()->CreateStaticImage (pGUIParent));
173
- pFlag->SetPosition (vecFlagPos);
174
- pFlag->SetSize (CVector2D (FLAG_SIZE_X, FLAG_SIZE_Y));
175
- pFlag->SetZOrderingEnabled (false );
176
- pFlag->LoadFromFile (GetFlagFilename (strLocale));
177
-
178
205
CGUILabel* pLabel = reinterpret_cast <CGUILabel*>(g_pCore->GetGUI ()->CreateLabel (pGUIParent));
179
206
pLabel->SetPosition (vecLabelPos);
180
207
pLabel->SetSize (CVector2D (LABEL_SIZE_X, LABEL_SIZE_Y));
@@ -184,9 +211,6 @@ CLangListItem CLanguageSelector::CreateGUILangItem(CGUIElement* pGUIParent, cons
184
211
CLangListItem item;
185
212
item.strLocale = strLocale;
186
213
item.pContainerPane = pContainerPane;
187
- item.pFlag = pFlag;
188
- item.vecFlagInitialPos = pFlag->GetPosition ();
189
- item.vecFlagInitialSize = pFlag->GetSize ();
190
214
item.pLabel = pLabel;
191
215
item.vecLabelInitialPos = pLabel->GetPosition ();
192
216
item.vecLabelInitialSize = pLabel->GetSize ();
@@ -231,16 +255,10 @@ void CLanguageSelector::DoPulse()
231
255
// Update animation position
232
256
float fMaxAmount = fDeltaSeconds * 16 .0f ;
233
257
pItem->fFocusEffectPos += Clamp (-fMaxAmount , pItem->fFocusEffectTarget - pItem->fFocusEffectPos , fMaxAmount );
234
- float fFlagScale = 1 + pItem->fFocusEffectPos * FLAG_ZOOM_SCALE;
235
258
236
- // Scale flag
237
- CVector2D vecFlagZoomPos = pItem->vecFlagInitialPos - (pItem->vecFlagInitialSize * pItem->fFocusEffectPos * FLAG_ZOOM_SCALE * 0 .5f );
238
- pItem->pFlag ->SetPosition (vecFlagZoomPos);
239
- pItem->pFlag ->SetSize (CVector2D (FLAG_SIZE_X * fFlagScale , FLAG_SIZE_Y * fFlagScale ));
240
-
241
- // Move label to accommodate scaled flag
259
+ // Move label
242
260
CVector2D vecLabelZoomPos =
243
- pItem->vecLabelInitialPos + CVector2D (pItem->vecFlagInitialSize .fX * pItem->fFocusEffectPos * FLAG_ZOOM_SCALE * 0 . 5f , 0 );
261
+ pItem->vecLabelInitialPos + CVector2D (pItem->vecLabelInitialSize .fX * pItem->fFocusEffectPos * 0 . 05f , 0 );
244
262
pItem->pLabel ->SetPosition (vecLabelZoomPos);
245
263
}
246
264
}
@@ -264,20 +282,6 @@ void CLanguageSelector::SetLanguageListVisible(bool bVisible)
264
282
m_pListWindow->SetVisible (bVisible);
265
283
}
266
284
267
- // /////////////////////////////////////////////////////////////
268
- //
269
- // CLanguageSelector::GetFlagFilename
270
- //
271
- // Get image filename for supplied locale, or the current locale
272
- //
273
- // /////////////////////////////////////////////////////////////
274
- SString CLanguageSelector::GetFlagFilename (SString strLocale)
275
- {
276
- if (strLocale.empty ())
277
- strLocale = CVARS_GET_VALUE<SString>(" locale" );
278
- return CalcMTASAPath (SString (MTA_LOCALE_DIR " %s\\ flag.png" , *strLocale));
279
- }
280
-
281
285
// /////////////////////////////////////////////////////////////
282
286
//
283
287
// CLanguageSelector::GetListItemByIndex
0 commit comments