Files
@ r23882:d683a0787bc9
Branch filter:
Location: cpp/openttd-patchpack/source/src/settings_internal.h - annotation
r23882:d683a0787bc9
6.5 KiB
text/x-c
Codechange: Don't use SDL_CreateRGBSurfaceWithFormat()
This function requires libSDL 2.0.5 or higher. It looks like we don't
need to use it, and can just use the original SDL_CreateRGBSurface(),
with the masks set to 0, to trigger the default 8-bit format, which is
SDL_PIXELFORMAT_INDEX8.
Closes #7785
Note: this code path is activated by using an 8-bit blitter, like:
./bin/openttd -b 8bpp-simple
This function requires libSDL 2.0.5 or higher. It looks like we don't
need to use it, and can just use the original SDL_CreateRGBSurface(),
with the masks set to 0, to trigger the default 8-bit format, which is
SDL_PIXELFORMAT_INDEX8.
Closes #7785
Note: this code path is activated by using an 8-bit blitter, like:
./bin/openttd -b 8bpp-simple
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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | r8208:69bb74cd3d21 r8208:69bb74cd3d21 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r10571:99cb9a95b4cf r8208:69bb74cd3d21 r15610:623a23fb6560 r15610:623a23fb6560 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r15613:193c12018337 r15613:193c12018337 r23678:26fe843cbb90 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r19944:25a78576fb5e r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r23678:26fe843cbb90 r12017:0d662fb726a8 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r19307:0eec88c265b6 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r13129:9becfa618607 r13129:9becfa618607 r13129:9becfa618607 r8208:69bb74cd3d21 r23678:26fe843cbb90 r8208:69bb74cd3d21 r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19716:f48509378d1e r19904:596445e72cf1 r19904:596445e72cf1 r19904:596445e72cf1 r19904:596445e72cf1 r19904:596445e72cf1 r19904:596445e72cf1 r19904:596445e72cf1 r19906:1257c5c4bfd5 r19906:1257c5c4bfd5 r19904:596445e72cf1 r8208:69bb74cd3d21 r10994:9aeee22b7578 r19944:25a78576fb5e r8208:69bb74cd3d21 r16724:241f3035597b r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r11892:098f7f1cca8f r11892:098f7f1cca8f r11069:3f09c162966b r8208:69bb74cd3d21 r8208:69bb74cd3d21 r19323:f9587a5e4cdc r19322:1aa8afde2783 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r19716:f48509378d1e r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r19832:28610f312539 r19832:28610f312539 r19904:596445e72cf1 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r8208:69bb74cd3d21 r11069:3f09c162966b r14376:b8882984cdf2 r15221:4e305be6015a r12017:0d662fb726a8 r8208:69bb74cd3d21 r16849:d593358b4346 | /* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD 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, version 2.
* OpenTTD 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 OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file settings_internal.h Functions and types used internally for the settings configurations. */
#ifndef SETTINGS_INTERNAL_H
#define SETTINGS_INTERNAL_H
#include "saveload/saveload.h"
/**
* Convention/Type of settings. This is then further specified if necessary
* with the SLE_ (SLE_VAR/SLE_FILE) enums in saveload.h
* @see VarTypes
* @see SettingDescBase
*/
enum SettingDescType : byte {
/* 4 bytes allocated a maximum of 16 types for GenericType */
SDT_BEGIN = 0,
SDT_NUMX = 0, ///< any number-type
SDT_BOOLX = 1, ///< a boolean number
SDT_ONEOFMANY = 2, ///< bitmasked number where only ONE bit may be set
SDT_MANYOFMANY = 3, ///< bitmasked number where MULTIPLE bits may be set
SDT_INTLIST = 4, ///< list of integers separated by a comma ','
SDT_STRING = 5, ///< string with a pre-allocated buffer
SDT_END,
/* 10 more possible primitives */
};
enum SettingGuiFlag : uint16 {
/* 1 byte allocated for a maximum of 8 flags
* Flags directing saving/loading of a variable */
SGF_NONE = 0,
SGF_0ISDISABLED = 1 << 0, ///< a value of zero means the feature is disabled
SGF_DISPLAY_ABS = 1 << 1, ///< display absolute value of the setting
SGF_MULTISTRING = 1 << 2, ///< the value represents a limited number of string-options (internally integer)
SGF_NETWORK_ONLY = 1 << 3, ///< this setting only applies to network games
SGF_CURRENCY = 1 << 4, ///< the number represents money, so when reading value multiply by exchange rate
SGF_NO_NETWORK = 1 << 5, ///< this setting does not apply to network games; it may not be changed during the game
SGF_NEWGAME_ONLY = 1 << 6, ///< this setting cannot be changed in a game
SGF_SCENEDIT_TOO = 1 << 7, ///< this setting can be changed in the scenario editor (only makes sense when SGF_NEWGAME_ONLY is set)
SGF_PER_COMPANY = 1 << 8, ///< this setting can be different for each company (saved in company struct)
};
DECLARE_ENUM_AS_BIT_SET(SettingGuiFlag)
/**
* A SettingCategory defines a grouping of the settings.
* The group #SC_BASIC is intended for settings which also a novice player would like to change and is able to understand.
* The group #SC_ADVANCED is intended for settings which an experienced player would like to use. This is the case for most settings.
* Finally #SC_EXPERT settings only few people want to see in rare cases.
* The grouping is meant to be inclusive, i.e. all settings in #SC_BASIC also will be included
* in the set of settings in #SC_ADVANCED. The group #SC_EXPERT contains all settings.
*/
enum SettingCategory {
SC_NONE = 0,
/* Filters for the list */
SC_BASIC_LIST = 1 << 0, ///< Settings displayed in the list of basic settings.
SC_ADVANCED_LIST = 1 << 1, ///< Settings displayed in the list of advanced settings.
SC_EXPERT_LIST = 1 << 2, ///< Settings displayed in the list of expert settings.
/* Setting classification */
SC_BASIC = SC_BASIC_LIST | SC_ADVANCED_LIST | SC_EXPERT_LIST, ///< Basic settings are part of all lists.
SC_ADVANCED = SC_ADVANCED_LIST | SC_EXPERT_LIST, ///< Advanced settings are part of advanced and expert list.
SC_EXPERT = SC_EXPERT_LIST, ///< Expert settings can only be seen in the expert list.
SC_END,
};
/**
* Type of settings for filtering.
*/
enum SettingType {
ST_GAME, ///< Game setting.
ST_COMPANY, ///< Company setting.
ST_CLIENT, ///< Client setting.
ST_ALL, ///< Used in setting filter to match all types.
};
typedef bool OnChange(int32 var); ///< callback prototype on data modification
typedef size_t OnConvert(const char *value); ///< callback prototype for conversion error
/** Properties of config file settings. */
struct SettingDescBase {
const char *name; ///< name of the setting. Used in configuration file and for console
const void *def; ///< default value given when none is present
SettingDescType cmd; ///< various flags for the variable
SettingGuiFlag flags; ///< handles how a setting would show up in the GUI (text/currency, etc.)
int32 min; ///< minimum values
uint32 max; ///< maximum values
int32 interval; ///< the interval to use between settings in the 'settings' window. If interval is '0' the interval is dynamically determined
const char *many; ///< ONE/MANY_OF_MANY: string of possible values for this type
StringID str; ///< (translated) string with descriptive text; gui and console
StringID str_help; ///< (Translated) string with help text; gui only.
StringID str_val; ///< (Translated) first string describing the value.
OnChange *proc; ///< callback procedure for when the value is changed
OnConvert *proc_cnvt; ///< callback procedure when loading value mechanism fails
SettingCategory cat; ///< assigned categories of the setting
};
struct SettingDesc {
SettingDescBase desc; ///< Settings structure (going to configuration file)
SaveLoad save; ///< Internal structure (going to savegame, parts to config)
bool IsEditable(bool do_command = false) const;
SettingType GetType() const;
};
/* NOTE: The only difference between SettingDesc and SettingDescGlob is
* that one uses global variables as a source and the other offsets
* in a struct which are bound to a certain variable during runtime.
* The only way to differentiate between these two is to check if an object
* has been passed to the function or not. If not, then it is a global variable
* and save->variable has its address, otherwise save->variable only holds the
* offset in a certain struct */
typedef SettingDesc SettingDescGlobVarList;
const SettingDesc *GetSettingFromName(const char *name, uint *i);
bool SetSettingValue(uint index, int32 value, bool force_newgame = false);
bool SetSettingValue(uint index, const char *value, bool force_newgame = false);
void SetCompanySetting(uint index, int32 value);
#endif /* SETTINGS_INTERNAL_H */
|