blob: 9973d5080dc836b8cd93c7b9eb0e589b6dfe31e7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/*
* The ManaVerse Client
* Copyright (C) 2004-2009 The Mana World Development Team
* Copyright (C) 2009-2010 The Mana Developers
* Copyright (C) 2011-2019 The ManaPlus Developers
*
* This file is part of The ManaVerse Client.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "render/graphics.h"
#include "utils/sdlhelper.h"
#include "utils/stringutils.h"
#include "gui/models/modelistmodel.h"
#include <algorithm>
#include "debug.h"
#ifndef ANDROID
static bool modeSorter(const std::string &mode1, const std::string &mode2)
{
const int width1 = atoi(mode1.substr(0, mode1.find('x')).c_str());
const int height1 = atoi(mode1.substr(mode1.find('x') + 1).c_str());
if ((width1 == 0) || (height1 == 0))
return false;
const int width2 = atoi(mode2.substr(0, mode2.find('x')).c_str());
const int height2 = atoi(mode2.substr(mode2.find('x') + 1).c_str());
if ((width2 == 0) || (height2 == 0))
return false;
if (width1 != width2)
return width1 < width2;
if (height1 != height2)
return height1 < height2;
return false;
}
#endif // ANDROID
ModeListModel::ModeListModel() :
ListModel(),
mVideoModes()
{
SDL::getAllVideoModes(mVideoModes);
#ifndef ANDROID
addCustomMode("640x480");
addCustomMode("800x600");
addCustomMode("1024x768");
addCustomMode("1280x1024");
addCustomMode("1400x900");
addCustomMode("1500x990");
addCustomMode(toString(mainGraphics->mActualWidth).append("x")
.append(toString(mainGraphics->mActualHeight)));
std::sort(mVideoModes.begin(), mVideoModes.end(), &modeSorter);
mVideoModes.push_back("custom");
#endif // ANDROID
}
#ifndef ANDROID
void ModeListModel::addCustomMode(const std::string &mode)
{
StringVectCIter it = mVideoModes.begin();
const StringVectCIter it_end = mVideoModes.end();
while (it != it_end)
{
if (*it == mode)
return;
++ it;
}
mVideoModes.push_back(mode);
}
#endif // ANDROID
int ModeListModel::getIndexOf(const std::string &widthXHeightMode)
{
std::string currentMode;
for (int i = 0; i < getNumberOfElements(); i++)
{
currentMode = getElementAt(i);
if (currentMode == widthXHeightMode)
return i;
}
return -1;
}
|