mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-22 07:13:07 +01:00
Issues with Dropdown text
This commit is contained in:
@@ -3486,7 +3486,7 @@ STR_5149 :{SMALLFONT}{BLACK}Open the cheats window
|
|||||||
STR_5150 :Enable debugging tools
|
STR_5150 :Enable debugging tools
|
||||||
STR_5151 :,
|
STR_5151 :,
|
||||||
STR_5152 :.
|
STR_5152 :.
|
||||||
STR_5153 :RCT1 colour scheme
|
STR_5153 :Custom
|
||||||
STR_5154 :Hardware display
|
STR_5154 :Hardware display
|
||||||
STR_5155 :Allow testing of unfinished tracks
|
STR_5155 :Allow testing of unfinished tracks
|
||||||
STR_5156 :{SMALLFONT}{BLACK}Allows testing of most ride types even when the track is unfinished, does not apply to block sectioned modes
|
STR_5156 :{SMALLFONT}{BLACK}Allows testing of most ride types even when the track is unfinished, does not apply to block sectioned modes
|
||||||
@@ -3571,3 +3571,4 @@ STR_5234 :{SMALLFONT}{BLACK}Prompts
|
|||||||
STR_5235 :{SMALLFONT}{BLACK}Settings
|
STR_5235 :{SMALLFONT}{BLACK}Settings
|
||||||
STR_5236 :Window:
|
STR_5236 :Window:
|
||||||
STR_5237 :Palette:
|
STR_5237 :Palette:
|
||||||
|
STR_5238 :Presets:
|
||||||
|
|||||||
241
src/config.c
241
src/config.c
@@ -20,7 +20,10 @@
|
|||||||
|
|
||||||
#include "addresses.h"
|
#include "addresses.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "localisation/language.h"
|
||||||
#include "localisation/localisation.h"
|
#include "localisation/localisation.h"
|
||||||
|
#include "util/util.h"
|
||||||
|
#include "interface/colour_schemes.h"
|
||||||
|
|
||||||
// Magic number for original game cfg file
|
// Magic number for original game cfg file
|
||||||
static const int MagicNumber = 0x0003113A;
|
static const int MagicNumber = 0x0003113A;
|
||||||
@@ -171,6 +174,7 @@ config_property_definition _generalDefinitions[] = {
|
|||||||
{ offsetof(general_configuration, test_unfinished_tracks), "test_unfinished_tracks", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL },
|
{ offsetof(general_configuration, test_unfinished_tracks), "test_unfinished_tracks", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL },
|
||||||
{ offsetof(general_configuration, no_test_crashes), "no_test_crashes", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL },
|
{ offsetof(general_configuration, no_test_crashes), "no_test_crashes", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL },
|
||||||
{ offsetof(general_configuration, date_format), "date_format", CONFIG_VALUE_TYPE_UINT8, DATE_FORMAT_DMY, _dateFormatEnum },
|
{ offsetof(general_configuration, date_format), "date_format", CONFIG_VALUE_TYPE_UINT8, DATE_FORMAT_DMY, _dateFormatEnum },
|
||||||
|
{ offsetof(general_configuration, current_colour_scheme_preset), "colour_scheme_preset", CONFIG_VALUE_TYPE_STRING, { .value_string = "*RCT2" }, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
config_property_definition _interfaceDefinitions[] = {
|
config_property_definition _interfaceDefinitions[] = {
|
||||||
@@ -380,23 +384,6 @@ bool config_save(const utf8string path)
|
|||||||
fputc('\n', file);
|
fputc('\n', file);
|
||||||
}
|
}
|
||||||
|
|
||||||
fputc('[', file);
|
|
||||||
fwrite("colour_schemes", "colour_schemes", 1, file);
|
|
||||||
fputc(']', file);
|
|
||||||
fputc('\n', file);
|
|
||||||
for (i = 0; i < gNumColourSchemeWindows; i++) {
|
|
||||||
window_colour_scheme colour_scheme = gColourSchemes[i];
|
|
||||||
for (j = 0; j < colour_scheme.num_colours; j++) {
|
|
||||||
|
|
||||||
fwrite(colour_scheme.ini_name, strlen(colour_scheme.ini_name), 1, file);
|
|
||||||
fprintf(file, "_%d", j);
|
|
||||||
fwrite(" = ", 3, 1, file);
|
|
||||||
fprintf(file, "%u", colour_scheme.colours[j]);
|
|
||||||
fputc('\n', file);
|
|
||||||
}
|
|
||||||
fputc('\n', file);
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1016,31 +1003,233 @@ bool config_shortcut_keys_save()
|
|||||||
#pragma region Colour Schemes
|
#pragma region Colour Schemes
|
||||||
|
|
||||||
|
|
||||||
|
static bool colour_schemes_open(const utf8string path);
|
||||||
|
static bool colour_schemes_save(const utf8string path);
|
||||||
|
static void colour_schemes_read_properties(int preset, window_colour_scheme **colour_scheme, const_utf8string line);
|
||||||
|
static void colour_schemes_set_property(window_colour_scheme **colour_scheme, const_utf8string line);
|
||||||
|
|
||||||
|
|
||||||
|
void colour_schemes_remove_extension(char *path)
|
||||||
|
{
|
||||||
|
char *ch;
|
||||||
|
|
||||||
|
for (ch = path; *ch != 0; ch++) {
|
||||||
|
if (*ch == '.') {
|
||||||
|
*ch = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void colour_schemes_set_default()
|
void colour_schemes_set_default()
|
||||||
{
|
{
|
||||||
gConfigColourSchemes.num_presets = 2;
|
gConfigColourSchemes.num_presets = 2;
|
||||||
|
gConfigColourSchemes.presets = malloc(sizeof(colour_scheme_preset*) * gConfigColourSchemes.num_presets);
|
||||||
|
|
||||||
gConfigColourSchemes.presets = malloc(sizeof(colour_schemes_setting*) * gConfigColourSchemes.num_presets);
|
// Set RCT2 colour scheme
|
||||||
|
strcpy(gConfigColourSchemes.presets[0].name, language_get_string(2741));
|
||||||
gConfigColourSchemes.presets[0].colour_schemes = malloc(sizeof(window_colours) * gNumColourSchemeWindows);
|
gConfigColourSchemes.presets[0].colour_schemes = malloc(sizeof(window_colours) * gNumColourSchemeWindows);
|
||||||
|
for (int i = 0; i < gNumColourSchemeWindows; i++) {
|
||||||
for (int j = 0; j < gNumColourSchemeWindows; j++) {
|
for (int j = 0; j < 6; j++)
|
||||||
for (int k = 0; k < 6; k++)
|
gConfigColourSchemes.presets[0].colour_schemes[i].colours[j] = gColourSchemes[i].colours[j];
|
||||||
gConfigColourSchemes.presets[0].colour_schemes[j].colours[k] = gColourSchemes[j].colours[k];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set RCT1 colour scheme
|
||||||
|
strcpy(gConfigColourSchemes.presets[1].name, language_get_string(2740));
|
||||||
|
gConfigColourSchemes.presets[1].colour_schemes = malloc(sizeof(window_colours) * gNumColourSchemeWindows);
|
||||||
|
for (int i = 0; i < gNumColourSchemeWindows; i++) {
|
||||||
|
uint8 changed_colour = 0xFF;
|
||||||
|
for (int k = 0; gColourSchemesRCT1[k].classification != 0xFF; k++) {
|
||||||
|
if (gColourSchemesRCT1[k].classification == gColourSchemes[k].classification) {
|
||||||
|
changed_colour = (uint8)k;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int j = 0; j < 6; j++) {
|
||||||
|
gConfigColourSchemes.presets[1].colour_schemes[i].colours[j] = (changed_colour != 0xFF ? gColourSchemesRCT1[changed_colour].colours[j] : gColourSchemes[i].colours[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool colour_schemes_open_default()
|
void colour_schemes_load_presets()
|
||||||
{
|
{
|
||||||
|
utf8 path[MAX_PATH];
|
||||||
|
file_info file;
|
||||||
|
int fileEnumHandle;
|
||||||
|
|
||||||
|
platform_get_user_directory(path, "colour schemes");
|
||||||
|
strcpy(path, "*.ini");
|
||||||
|
fileEnumHandle = platform_enumerate_files_begin(path);
|
||||||
|
while (platform_enumerate_files_next(fileEnumHandle, &file)) {
|
||||||
|
colour_schemes_open(file.path);
|
||||||
|
}
|
||||||
|
platform_enumerate_files_end(fileEnumHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool colour_schemes_save_default()
|
bool colour_schemes_save_preset(int preset)
|
||||||
{
|
{
|
||||||
|
utf8 path[MAX_PATH];
|
||||||
|
|
||||||
|
platform_get_user_directory(path, "colour schemes");
|
||||||
|
strcat(path, "custom.ini");
|
||||||
|
if (config_save(path)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool colour_schemes_open(const utf8string path)
|
||||||
|
{
|
||||||
|
FILE *file;
|
||||||
|
uint8 *lineBuffer;
|
||||||
|
size_t lineBufferCapacity;
|
||||||
|
size_t lineLength;
|
||||||
|
int c, preset;
|
||||||
|
window_colour_scheme *currentColourScheme;
|
||||||
|
|
||||||
|
file = fopen(path, "rb");
|
||||||
|
if (file == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Check if the colour scheme is already loaded
|
||||||
|
// No nead to read the first two presets as they're hardcoded in
|
||||||
|
for (preset = 2; preset < gConfigColourSchemes.num_presets; preset++) {
|
||||||
|
if (strcmp(path, gConfigColourSchemes.presets[preset].name) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Otherwise allocate one
|
||||||
|
if (preset == gConfigColourSchemes.num_presets) {
|
||||||
|
gConfigColourSchemes.num_presets++;
|
||||||
|
gConfigColourSchemes.presets = realloc(gConfigColourSchemes.presets, sizeof(colour_scheme_preset*) * gConfigColourSchemes.num_presets);
|
||||||
|
strcpy(gConfigColourSchemes.presets[preset].name, path_get_filename(path));
|
||||||
|
gConfigColourSchemes.presets[preset].colour_schemes = malloc(sizeof(window_colours) * gNumColourSchemeWindows);
|
||||||
|
for (int i = 0; i < gNumColourSchemeWindows; i++) {
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
gConfigColourSchemes.presets[preset].colour_schemes[i].colours[j] = gColourSchemes[i].colours[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
currentColourScheme = NULL;
|
||||||
|
lineBufferCapacity = 64;
|
||||||
|
lineBuffer = malloc(lineBufferCapacity);
|
||||||
|
lineLength = 0;
|
||||||
|
|
||||||
|
// Skim UTF-8 byte order mark
|
||||||
|
fread(lineBuffer, 3, 1, file);
|
||||||
|
if (!(lineBuffer[0] == 0xEF && lineBuffer[1] == 0xBB && lineBuffer[2] == 0xBF))
|
||||||
|
fseek(file, 0, SEEK_SET);
|
||||||
|
|
||||||
|
while ((c = fgetc(file)) != EOF) {
|
||||||
|
if (c == '\n' || c == '\r') {
|
||||||
|
lineBuffer[lineLength++] = 0;
|
||||||
|
colour_schemes_read_properties(preset, ¤tColourScheme, (const_utf8string)lineBuffer);
|
||||||
|
lineLength = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lineBuffer[lineLength++] = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineLength >= lineBufferCapacity) {
|
||||||
|
lineBufferCapacity *= 2;
|
||||||
|
lineBuffer = realloc(lineBuffer, lineBufferCapacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineLength > 0) {
|
||||||
|
lineBuffer[lineLength++] = 0;
|
||||||
|
colour_schemes_read_properties(preset, ¤tColourScheme, lineBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(lineBuffer);
|
||||||
|
fclose(file);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool colour_schemes_save(const utf8string path)
|
||||||
|
{
|
||||||
|
FILE *file;
|
||||||
|
int i, j, preset;
|
||||||
|
value_union *value;
|
||||||
|
|
||||||
|
file = fopen(path, "wb");
|
||||||
|
if (file == NULL) {
|
||||||
|
log_error("Unable to write to colour scheme file.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (preset = 2; preset < gConfigColourSchemes.num_presets; preset++) {
|
||||||
|
if (strcmp(path, gConfigColourSchemes.presets[preset].name) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (preset == gConfigColourSchemes.num_presets) {
|
||||||
|
log_error("Unable to write colour scheme, no preset with that name found.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < gNumColourSchemeWindows; i++) {
|
||||||
|
window_colour_scheme* colour_scheme = &(gColourSchemes[i]);
|
||||||
|
|
||||||
|
fputc('[', file);
|
||||||
|
fwrite(colour_scheme->section_name, strlen(colour_scheme->section_name), 1, file);
|
||||||
|
fputc(']', file);
|
||||||
|
fputc('\n', file);
|
||||||
|
|
||||||
|
for (j = 0; j < colour_scheme->num_colours; j++) {
|
||||||
|
|
||||||
|
fprintf(file, "colour_%d", j);
|
||||||
|
fwrite(" = ", 3, 1, file);
|
||||||
|
fprintf(file, "%u", colour_scheme->colours[j]);
|
||||||
|
fputc('\n', file);
|
||||||
|
}
|
||||||
|
fputc('\n', file);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void colour_schemes_read_properties(int preset, window_colour_scheme **colour_scheme, const_utf8string line)
|
||||||
|
{
|
||||||
|
utf8string ch = (utf8string)line;
|
||||||
|
utf8_skip_whitespace(&ch);
|
||||||
|
|
||||||
|
if (*ch == '[') {
|
||||||
|
const_utf8string sectionName;
|
||||||
|
int sectionNameSize;
|
||||||
|
if (config_get_section(ch, §ionName, §ionNameSize)) {
|
||||||
|
for (int i = 0; i < gNumColourSchemeWindows; i++) {
|
||||||
|
if (strcmp(sectionName, gColourSchemes[i].section_name)) {
|
||||||
|
*colour_scheme = &(gConfigColourSchemes.presets[preset].colour_schemes[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (*colour_scheme != NULL) {
|
||||||
|
const_utf8string propertyName, *value;
|
||||||
|
int propertyNameSize, valueSize;
|
||||||
|
if (config_get_property_name_value(ch, &propertyName, &propertyNameSize, &value, &valueSize)) {
|
||||||
|
colour_schemes_set_property(colour_scheme, propertyName, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void colour_schemes_set_property(window_colour_scheme *colour_scheme, const_utf8string name, const_utf8string value)
|
||||||
|
{
|
||||||
|
const_utf8string colour_names[] = { "colour_0", "colour_1", "colour_2", "colour_3", "colour_4", "colour_5" };
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
if (strcmp(name, colour_names[i]) == 0) {
|
||||||
|
colour_scheme->colours[i] = (uint8)strtol(value, NULL, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
18
src/config.h
18
src/config.h
@@ -24,7 +24,6 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "localisation/currency.h"
|
#include "localisation/currency.h"
|
||||||
#include "platform/platform.h"
|
#include "platform/platform.h"
|
||||||
#include "interface/colour_schemes.h"
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES = (1 << 0),
|
CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES = (1 << 0),
|
||||||
@@ -140,6 +139,7 @@ typedef struct {
|
|||||||
uint8 test_unfinished_tracks;
|
uint8 test_unfinished_tracks;
|
||||||
uint8 no_test_crashes;
|
uint8 no_test_crashes;
|
||||||
uint8 date_format;
|
uint8 date_format;
|
||||||
|
utf8string current_colour_scheme_preset;
|
||||||
} general_configuration;
|
} general_configuration;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -176,12 +176,16 @@ typedef struct {
|
|||||||
} twitch_configuration;
|
} twitch_configuration;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
window_colours *colour_schemes;
|
uint8 colours[6];
|
||||||
char *name;
|
} window_colours;
|
||||||
} colour_schemes_setting;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
colour_schemes_setting *presets;
|
window_colours *colour_schemes;
|
||||||
|
char name[256];
|
||||||
|
} colour_scheme_preset;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
colour_scheme_preset *presets;
|
||||||
uint16 num_presets;
|
uint16 num_presets;
|
||||||
} colour_schemes_configuration;
|
} colour_schemes_configuration;
|
||||||
|
|
||||||
@@ -212,7 +216,7 @@ bool config_shortcut_keys_save();
|
|||||||
bool config_find_or_browse_install_directory();
|
bool config_find_or_browse_install_directory();
|
||||||
|
|
||||||
void colour_schemes_set_default();
|
void colour_schemes_set_default();
|
||||||
bool colour_schemes_open_default();
|
void colour_schemes_load_presets();
|
||||||
bool colour_schemes_save_default();
|
bool colour_schemes_save_preset(int preset);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -76,60 +76,28 @@ window_colour_scheme gColourSchemes[] = {
|
|||||||
{ WC_EDITOR_SCENARIO_BOTTOM_TOOLBAR, { 150, 150, 141, 0, 0, 0 }, 3, 5181, "editor_scenario_bottom_toolbar" },
|
{ WC_EDITOR_SCENARIO_BOTTOM_TOOLBAR, { 150, 150, 141, 0, 0, 0 }, 3, 5181, "editor_scenario_bottom_toolbar" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
marked_window_colours gColourSchemesRCT1[sizeof(gColourSchemes)] = {
|
marked_window_colours gColourSchemesRCT1[sizeof(gColourSchemes)] = {
|
||||||
{ WC_TOP_TOOLBAR, { 1, 1, 1, 1, 0, 0 } }, // WC_TOP_TOOLBAR
|
{ WC_TOP_TOOLBAR, { 1, 1, 1, 1, 0, 0 } }, // WC_TOP_TOOLBAR
|
||||||
{ WC_BOTTOM_TOOLBAR, { 129, 129, 0, 18, 0, 0 } }, // WC_BOTTOM_TOOLBAR
|
{ WC_BOTTOM_TOOLBAR, { 129, 129, 0, 18, 0, 0 } }, // WC_BOTTOM_TOOLBAR
|
||||||
{ WC_RIDE, { 26, 1, 11, 0, 0, 0 } }, // WC_RIDE
|
{ WC_RIDE, { 26, 1, 11, 0, 0, 0 } }, // WC_RIDE
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_RIDE_CONSTRUCTION
|
{ WC_RIDE_LIST, { 26, 1, 1, 0, 0, 0 } }, // WC_RIDE_LIST
|
||||||
{ WC_RIDE_LIST, { 0, 0, 0, 0, 0, 0 } }, // WC_RIDE_LIST
|
{ WC_CONSTRUCT_RIDE, { 26, 1, 1, 0, 0, 0 } }, // WC_CONSTRUCT_RIDE
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_SAVE_PROMPT
|
{ WC_PEEP, { 22, 26, 26, 0, 0, 0 } }, // WC_PEEP
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_CONSTRUCT_RIDE
|
{ WC_GUEST_LIST, { 22, 26, 26, 0, 0, 0 } }, // WC_GUEST_LIST
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_DEMOLISH_RIDE_PROMPT
|
{ WC_STAFF_LIST, { 12, 4, 4, 0, 0, 0 } }, // WC_STAFF_LIST
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_SCENERY
|
{ WC_FINANCES, { 4, 1, 1, 0, 0, 0 } }, // WC_FINANCES
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_OPTIONS
|
{ WC_TITLE_MENU, { 129, 129, 129, 0, 0, 0 } }, // WC_TITLE_MENU
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_FOOTPATH
|
{ WC_TITLE_EXIT, { 129, 129, 129, 0, 0, 0 } }, // WC_TITLE_EXIT
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_LAND
|
{ WC_NEW_CAMPAIGN, { 4, 4, 1, 0, 0, 0 } }, // WC_NEW_CAMPAIGN
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_WATER
|
{ WC_TITLE_OPTIONS, { 129, 129, 129, 0, 0, 0 } }, // WC_TITLE_OPTIONS
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_PEEP
|
{ WC_STAFF, { 12, 4, 4, 0, 0, 0 } }, // WC_STAFF
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_GUEST_LIST
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_STAFF_LIST
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_FIRE_PROMPT
|
{ 0xFF, { 0, 0, 0, 0, 0, 0 } } // End
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_PARK_INFORMATION
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_FINANCES
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_TITLE_MENU
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_TITLE_EXIT
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_RECENT_NEWS
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_SCENARIO_SELECT
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_TRACK_DESIGN_LIST
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_TRACK_DESIGN_PLACE
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_NEW_CAMPAIGN
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_KEYBOARD_SHORTCUT_LIST
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_CHANGE_KEYBOARD_SHORTCUT
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_MAP
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_BANNER
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_EDITOR_OBJECT_SELECTION
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_EDITOR_INVENTION_LIST
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_EDITOR_SCENARIO_OPTIONS
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_EDTIOR_OBJECTIVE_OPTIONS
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_MANAGE_TRACK_DESIGN
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_TRACK_DELETE_PROMPT
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_INSTALL_TRACK
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_CLEAR_SCENERY
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_CHEATS
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_RESEARCH
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_VIEWPORT
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_MAPGEN
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_LOADSAVE
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_LOADSAVE_OVERWRITE_PROMPT
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_TITLE_OPTIONS
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_LAND_RIGHTS
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_COLOUR_SCHEMES
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_STAFF
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_EDITOR_TRACK_BOTTOM_TOOLBAR
|
|
||||||
{ 0, 0, 0, 0, 0, 0 }, // WC_EDITOR_SCENARIO_BOTTOM_TOOLBAR
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
uint16 gCurrentColourSchemePreset = 0;
|
||||||
uint32 gNumColourSchemeWindows = sizeof(gColourSchemes) / sizeof(window_colour_scheme);
|
uint32 gNumColourSchemeWindows = sizeof(gColourSchemes) / sizeof(window_colour_scheme);
|
||||||
|
|
||||||
window_colour_scheme* colour_scheme_get_by_class(rct_windowclass classification)
|
window_colour_scheme* colour_scheme_get_by_class(rct_windowclass classification)
|
||||||
@@ -154,10 +122,10 @@ void colour_scheme_update(rct_window *window)
|
|||||||
transparent = true;
|
transparent = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//if (transparent)
|
if (transparent)
|
||||||
window->flags |= WF_TRANSPARENT;
|
window->flags |= WF_TRANSPARENT;
|
||||||
//else
|
else
|
||||||
// window->flags &= ~WF_TRANSPARENT;
|
window->flags &= ~WF_TRANSPARENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
void colour_scheme_update_by_class(rct_window *window, rct_windowclass classification)
|
void colour_scheme_update_by_class(rct_window *window, rct_windowclass classification)
|
||||||
@@ -171,8 +139,47 @@ void colour_scheme_update_by_class(rct_window *window, rct_windowclass classific
|
|||||||
transparent = true;
|
transparent = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//if (transparent)
|
if (transparent)
|
||||||
window->flags |= WF_TRANSPARENT;
|
window->flags |= WF_TRANSPARENT;
|
||||||
//else
|
else
|
||||||
// window->flags &= ~WF_TRANSPARENT;
|
window->flags &= ~WF_TRANSPARENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
void colour_scheme_change_preset(int preset)
|
||||||
|
{
|
||||||
|
if (preset >= 0 && preset < gConfigColourSchemes.num_presets) {
|
||||||
|
switch (preset) {
|
||||||
|
case 0:
|
||||||
|
gConfigGeneral.current_colour_scheme_preset = "*RCT2";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
gConfigGeneral.current_colour_scheme_preset = "*RCT1";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
gConfigGeneral.current_colour_scheme_preset = gConfigColourSchemes.presets[preset].name;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gCurrentColourSchemePreset = preset;
|
||||||
|
for (int i = 0; i < gNumColourSchemeWindows; i++) {
|
||||||
|
for (int j = 0; j < gColourSchemes[i].num_colours; j++) {
|
||||||
|
gColourSchemes[i].colours[j] = gConfigColourSchemes.presets[preset].colour_schemes[i].colours[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
window_invalidate_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool colour_scheme_create_preset(const char *name)
|
||||||
|
{
|
||||||
|
int preset = gConfigColourSchemes.num_presets;
|
||||||
|
gConfigColourSchemes.num_presets++;
|
||||||
|
gConfigColourSchemes.presets = realloc(gConfigColourSchemes.presets, sizeof(colour_scheme_preset*) * gConfigColourSchemes.num_presets);
|
||||||
|
strcpy(gConfigColourSchemes.presets[preset].name, name);
|
||||||
|
gConfigColourSchemes.presets[preset].colour_schemes = malloc(sizeof(window_colours) * gNumColourSchemeWindows);
|
||||||
|
for (int i = 0; i < gNumColourSchemeWindows; i++) {
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
gConfigColourSchemes.presets[preset].colour_schemes[i].colours[j] = gColourSchemes[i].colours[j];
|
||||||
|
}
|
||||||
|
colour_schemes_save_preset(preset);
|
||||||
|
colour_scheme_change_preset(gConfigColourSchemes.num_presets - 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,12 +29,9 @@ typedef struct {
|
|||||||
uint8 colours[6];
|
uint8 colours[6];
|
||||||
uint8 num_colours;
|
uint8 num_colours;
|
||||||
rct_string_id name;
|
rct_string_id name;
|
||||||
char *ini_name;
|
char *section_name;
|
||||||
} window_colour_scheme;
|
} window_colour_scheme;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8 colours[6];
|
|
||||||
} window_colours;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
rct_windowclass classification;
|
rct_windowclass classification;
|
||||||
@@ -43,7 +40,9 @@ typedef struct {
|
|||||||
|
|
||||||
extern window_colour_scheme gColourSchemes[];
|
extern window_colour_scheme gColourSchemes[];
|
||||||
|
|
||||||
extern window_colours gColourSchemesRCT1[];
|
extern marked_window_colours gColourSchemesRCT1[];
|
||||||
|
|
||||||
|
extern uint16 gCurrentColourSchemePreset;
|
||||||
|
|
||||||
extern uint32 gNumColourSchemeWindows;
|
extern uint32 gNumColourSchemeWindows;
|
||||||
|
|
||||||
@@ -52,4 +51,7 @@ window_colour_scheme* colour_scheme_get_by_class(rct_windowclass classification)
|
|||||||
void colour_scheme_update(rct_window *window);
|
void colour_scheme_update(rct_window *window);
|
||||||
void colour_scheme_update_by_class(rct_window *window, rct_windowclass classification);
|
void colour_scheme_update_by_class(rct_window *window, rct_windowclass classification);
|
||||||
|
|
||||||
|
void colour_scheme_change_preset(int preset);
|
||||||
|
bool colour_scheme_create_preset(const char *name);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -150,6 +150,9 @@ void openrct2_launch()
|
|||||||
|
|
||||||
Mixer_Init(NULL);
|
Mixer_Init(NULL);
|
||||||
|
|
||||||
|
colour_schemes_set_default();
|
||||||
|
colour_schemes_load_presets();
|
||||||
|
|
||||||
switch (gOpenRCT2StartupAction) {
|
switch (gOpenRCT2StartupAction) {
|
||||||
case STARTUP_ACTION_INTRO:
|
case STARTUP_ACTION_INTRO:
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_RUN_INTRO_TICK_PART, uint8) = 8;
|
RCT2_GLOBAL(RCT2_ADDRESS_RUN_INTRO_TICK_PART, uint8) = 8;
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ enum WINDOW_STAFF_LIST_WIDGET_IDX {
|
|||||||
WIDX_COLOUR_SCHEMES_SETTINGS_TAB,
|
WIDX_COLOUR_SCHEMES_SETTINGS_TAB,
|
||||||
WIDX_COLOUR_SCHEMES_PRESETS,
|
WIDX_COLOUR_SCHEMES_PRESETS,
|
||||||
WIDX_COLOUR_SCHEMES_PRESETS_DROPDOWN,
|
WIDX_COLOUR_SCHEMES_PRESETS_DROPDOWN,
|
||||||
WIDX_COLOUR_SCHEMES_RCT1_STYLES_CHECKBOX,
|
|
||||||
WIDX_COLOUR_SCHEMES_COLORBTN_MASK,
|
WIDX_COLOUR_SCHEMES_COLORBTN_MASK,
|
||||||
WIDX_COLOUR_SCHEMES_LIST,
|
WIDX_COLOUR_SCHEMES_LIST,
|
||||||
};
|
};
|
||||||
@@ -125,10 +124,9 @@ static rct_widget window_colour_schemes_widgets[] = {
|
|||||||
{ WWT_TAB, 1, 158, 188, 17, 43, 0x02000144E, 5233 }, // misc tab
|
{ WWT_TAB, 1, 158, 188, 17, 43, 0x02000144E, 5233 }, // misc tab
|
||||||
{ WWT_TAB, 1, 189, 219, 17, 43, 0x02000144E, 5234 }, // prompts tab
|
{ WWT_TAB, 1, 189, 219, 17, 43, 0x02000144E, 5234 }, // prompts tab
|
||||||
{ WWT_TAB, 1, 220, 250, 17, 43, 0x02000144E, 5235 }, // settings tab
|
{ WWT_TAB, 1, 220, 250, 17, 43, 0x02000144E, 5235 }, // settings tab
|
||||||
{ WWT_COLORBTN, 1, 0, 0, 0, 0, STR_NONE, STR_NONE }, // color button mask
|
{ WWT_DROPDOWN, 1, 125, 299, 60, 71, STR_NONE, STR_NONE }, // Preset colour schemes
|
||||||
{ WWT_DROPDOWN, 1, 155, 299, 60, 71, STR_NONE, STR_NONE }, // Preset colour schemes
|
|
||||||
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 61, 70, 876, STR_NONE },
|
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 61, 70, 876, STR_NONE },
|
||||||
{ WWT_CHECKBOX, 1, 10, 229, 68, 79, STR_SOUND, STR_NONE }, // RCT1 menu styles
|
{ WWT_COLORBTN, 1, 0, 0, 0, 0, STR_NONE, STR_NONE }, // color button mask
|
||||||
{ WWT_SCROLL, 1, 3, 316, 60, 266, 2, STR_NONE }, // staff list
|
{ WWT_SCROLL, 1, 3, 316, 60, 266, 2, STR_NONE }, // staff list
|
||||||
{ WIDGETS_END },
|
{ WIDGETS_END },
|
||||||
};
|
};
|
||||||
@@ -325,7 +323,9 @@ void window_colour_schemes_open()
|
|||||||
(1 << WIDX_COLOUR_SCHEMES_MISC_TAB) |
|
(1 << WIDX_COLOUR_SCHEMES_MISC_TAB) |
|
||||||
(1 << WIDX_COLOUR_SCHEMES_PROMPTS_TAB) |
|
(1 << WIDX_COLOUR_SCHEMES_PROMPTS_TAB) |
|
||||||
(1 << WIDX_COLOUR_SCHEMES_SETTINGS_TAB) |
|
(1 << WIDX_COLOUR_SCHEMES_SETTINGS_TAB) |
|
||||||
(1 << WIDX_COLOUR_SCHEMES_COLORBTN_MASK);
|
(1 << WIDX_COLOUR_SCHEMES_COLORBTN_MASK) |
|
||||||
|
(1 << WIDX_COLOUR_SCHEMES_PRESETS) |
|
||||||
|
(1 << WIDX_COLOUR_SCHEMES_PRESETS_DROPDOWN);
|
||||||
|
|
||||||
window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_LIST].type = WWT_SCROLL;
|
window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_LIST].type = WWT_SCROLL;
|
||||||
|
|
||||||
@@ -383,6 +383,7 @@ static void window_colour_schemes_resize()
|
|||||||
static void window_colour_schemes_mousedown(int widgetIndex, rct_window* w, rct_widget* widget)
|
static void window_colour_schemes_mousedown(int widgetIndex, rct_window* w, rct_widget* widget)
|
||||||
{
|
{
|
||||||
short newSelectedTab;
|
short newSelectedTab;
|
||||||
|
int num_items, i;
|
||||||
|
|
||||||
switch (widgetIndex) {
|
switch (widgetIndex) {
|
||||||
case WIDX_COLOUR_SCHEMES_MAIN_UI_TAB:
|
case WIDX_COLOUR_SCHEMES_MAIN_UI_TAB:
|
||||||
@@ -401,6 +402,30 @@ static void window_colour_schemes_mousedown(int widgetIndex, rct_window* w, rct_
|
|||||||
w->frame_no = 0;
|
w->frame_no = 0;
|
||||||
window_invalidate(w);
|
window_invalidate(w);
|
||||||
break;
|
break;
|
||||||
|
case WIDX_COLOUR_SCHEMES_PRESETS_DROPDOWN:
|
||||||
|
num_items = gConfigColourSchemes.num_presets;
|
||||||
|
|
||||||
|
for (i = 0; i < num_items; i++) {
|
||||||
|
//gDropdownItemsFormat[i] = 2777;
|
||||||
|
//gDropdownItemsArgs[i] = 1170 | ((uint64)(intptr_t)gConfigColourSchemes.presets[i].name << 16);
|
||||||
|
//gDropdownItemsFormat[i] = 1170;
|
||||||
|
//gDropdownItemsArgs[i] = ((uint64)&gConfigColourSchemes.presets[i].name) << 32;
|
||||||
|
gDropdownItemsFormat[i] = 1170;
|
||||||
|
gDropdownItemsArgs[i] = &gConfigColourSchemes.presets[i].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
window_dropdown_show_text_custom_width(
|
||||||
|
w->x + widget->left,
|
||||||
|
w->y + widget->top,
|
||||||
|
widget->bottom - widget->top + 1,
|
||||||
|
w->colours[1],
|
||||||
|
DROPDOWN_FLAG_STAY_OPEN,
|
||||||
|
num_items,
|
||||||
|
widget->right - widget->left - 3
|
||||||
|
);
|
||||||
|
|
||||||
|
gDropdownItemsChecked = 1 << gCurrentColourSchemePreset;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -410,12 +435,22 @@ static void window_colour_schemes_dropdown()
|
|||||||
short widgetIndex, dropdownIndex;
|
short widgetIndex, dropdownIndex;
|
||||||
window_dropdown_get_registers(w, widgetIndex, dropdownIndex);
|
window_dropdown_get_registers(w, widgetIndex, dropdownIndex);
|
||||||
|
|
||||||
if (widgetIndex == WIDX_COLOUR_SCHEMES_LIST && dropdownIndex != -1) {
|
switch (widgetIndex) {
|
||||||
get_colour_scheme_tab()->colours[_color_index_2] = dropdownIndex | get_colour_scheme_tab()->colours[_color_index_2] & 0x80;
|
case WIDX_COLOUR_SCHEMES_LIST:
|
||||||
window_invalidate_all();
|
if (dropdownIndex != -1) {
|
||||||
|
get_colour_scheme_tab()->colours[_color_index_2] = dropdownIndex | get_colour_scheme_tab()->colours[_color_index_2] & 0x80;
|
||||||
|
window_invalidate_all();
|
||||||
|
_color_index_1 = -1;
|
||||||
|
_color_index_2 = -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WIDX_COLOUR_SCHEMES_PRESETS_DROPDOWN:
|
||||||
|
if (dropdownIndex != -1) {
|
||||||
|
colour_scheme_change_preset(dropdownIndex);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
_color_index_1 = -1;
|
|
||||||
_color_index_2 = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void window_colour_schemes_update(rct_window *w)
|
void window_colour_schemes_update(rct_window *w)
|
||||||
@@ -563,6 +598,18 @@ void window_colour_schemes_paint() {
|
|||||||
gfx_draw_string_left(dpi, 5236, w, w->colours[1], w->x + 6, 58 - 12 + w->y + 1);
|
gfx_draw_string_left(dpi, 5236, w, w->colours[1], w->x + 6, 58 - 12 + w->y + 1);
|
||||||
gfx_draw_string_left(dpi, 5237, w, w->colours[1], w->x + 220, 58 - 12 + w->y + 1);
|
gfx_draw_string_left(dpi, 5237, w, w->colours[1], w->x + 220, 58 - 12 + w->y + 1);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint32) = &gConfigColourSchemes.presets[gCurrentColourSchemePreset].name;
|
||||||
|
gfx_draw_string_left(dpi, 5238, NULL, 12, w->x + 10, w->y + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_PRESETS].top + 1);
|
||||||
|
gfx_draw_string_left(
|
||||||
|
dpi,
|
||||||
|
1170,
|
||||||
|
(void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS,
|
||||||
|
12,
|
||||||
|
w->x + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_PRESETS].left + 1,
|
||||||
|
w->y + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_PRESETS].top
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user