mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-27 01:14:52 +00:00
config:: new setting type color_setting
This commit is contained in:
parent
9ecd621fe8
commit
919725eabb
96
config.cpp
96
config.cpp
@ -193,6 +193,49 @@ struct int_setting : public setting {
|
||||
void load_from(const string& s) override {
|
||||
*value = parseint(s);
|
||||
}
|
||||
|
||||
virtual void swap_with(setting *s) {
|
||||
auto d = dynamic_cast<int_setting*> (s);
|
||||
if(!d) throw hr_exception("illegal swap_with on int_setting");
|
||||
swap(*value, *(d->value));
|
||||
swap(last_value, d->last_value);
|
||||
}
|
||||
|
||||
virtual void clone_from(int_setting *e) {
|
||||
min_value = e->min_value;
|
||||
max_value = e->max_value;
|
||||
}
|
||||
};
|
||||
|
||||
struct color_setting : public setting {
|
||||
color_t *value;
|
||||
color_t dft;
|
||||
bool has_alpha;
|
||||
void add_as_saver() override;
|
||||
bool affects(void *v) override { return v == value; }
|
||||
void show_edit_option(int key) override;
|
||||
cld get_cld() override { return *value; }
|
||||
void set_cld(cld x) override { *value = floor(real(x)+.5); }
|
||||
color_setting *editable(string menu_item_name, string help_text, char key) {
|
||||
this->is_editable = true;
|
||||
this->menu_item_name = menu_item_name;
|
||||
this->help_text = help_text;
|
||||
default_key = key;
|
||||
return this;
|
||||
}
|
||||
|
||||
void load_from(const string& s) override {
|
||||
sscanf(s.c_str(), "%x", value);
|
||||
}
|
||||
|
||||
virtual void swap_with(setting *s) {
|
||||
auto d = dynamic_cast<color_setting*> (s);
|
||||
if(!d) throw hr_exception("illegal swap_with on color_setting");
|
||||
swap(*value, *(d->value));
|
||||
swap(last_value, d->last_value);
|
||||
}
|
||||
|
||||
virtual void clone_from(color_setting *e) { has_alpha = e->has_alpha; }
|
||||
};
|
||||
|
||||
struct bool_setting : public setting {
|
||||
@ -344,6 +387,12 @@ void int_setting::add_as_saver() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void color_setting::add_as_saver() {
|
||||
#if CAP_CONFIG
|
||||
addsaver(*value, config_name, dft);
|
||||
#endif
|
||||
}
|
||||
|
||||
void bool_setting::add_as_saver() {
|
||||
#if CAP_CONFIG
|
||||
addsaver(*value, config_name, dft);
|
||||
@ -414,6 +463,15 @@ void bool_setting::show_edit_option(int key) {
|
||||
});
|
||||
}
|
||||
|
||||
void color_setting::show_edit_option(int key) {
|
||||
dialog::addColorItem(XLAT(menu_item_name), has_alpha ? *value : addalpha(*value), key);
|
||||
dialog::add_action([this] () {
|
||||
dialog::openColorDialog(*value);
|
||||
dialog::colorAlpha = has_alpha;
|
||||
dialog::dialogflags |= sm::SIDE;
|
||||
});
|
||||
}
|
||||
|
||||
EX float_setting *param_f(ld& val, const string p, const string s, ld dft) {
|
||||
unique_ptr<float_setting> u ( new float_setting );
|
||||
u->parameter_name = p;
|
||||
@ -507,6 +565,24 @@ EX bool_setting *param_b(bool& val, const string s, bool dft) {
|
||||
return f;
|
||||
}
|
||||
|
||||
EX color_setting *param_color(color_t& val, const string s, bool has_alpha, color_t dft) {
|
||||
unique_ptr<color_setting> u ( new color_setting );
|
||||
u->parameter_name = param_esc(s);
|
||||
u->config_name = s;
|
||||
u->menu_item_name = s;
|
||||
u->value = &val;
|
||||
u->last_value = dft;
|
||||
u->dft = dft;
|
||||
u->has_alpha = has_alpha;
|
||||
val = dft;
|
||||
u->add_as_saver();
|
||||
auto f = &*u;
|
||||
params[u->parameter_name] = std::move(u);
|
||||
return f;
|
||||
}
|
||||
|
||||
EX color_setting *param_color(color_t& val, const string s, bool has_alpha) { return param_color(val, s, has_alpha, val); }
|
||||
|
||||
EX bool_setting *param_b(bool& val, const string s) { return param_b(val, s, val); }
|
||||
|
||||
#if HDR
|
||||
@ -1014,16 +1090,16 @@ EX void initConfig() {
|
||||
param_f(crosshair_size, "size:crosshair");
|
||||
addsaver(crosshair_color, "color:crosshair");
|
||||
|
||||
addsaver(backcolor, "color:background");
|
||||
addsaver(forecolor, "color:foreground");
|
||||
addsaver(bordcolor, "color:borders");
|
||||
addsaver(ringcolor, "color:ring");
|
||||
param_color(backcolor, "color:background", false);
|
||||
param_color(forecolor, "color:foreground", false);
|
||||
param_color(bordcolor, "color:borders", false);
|
||||
param_color(ringcolor, "color:ring", true);
|
||||
param_f(vid.multiplier_ring, "mring", "mult:ring", 1);
|
||||
addsaver(modelcolor, "color:model");
|
||||
addsaver(periodcolor, "color:period");
|
||||
addsaver(stdgridcolor, "color:stdgrid");
|
||||
param_color(modelcolor, "color:model", true);
|
||||
param_color(periodcolor, "color:period", true);
|
||||
param_color(stdgridcolor, "color:stdgrid", true);
|
||||
param_f(vid.multiplier_grid, "mgrid", "mult:grid", 1);
|
||||
addsaver(dialog::dialogcolor, "color:dialog");
|
||||
addsaver(dialog::dialogcolor, "color:dialog", false);
|
||||
for(auto& p: colortables)
|
||||
savecolortable(p.second, s0+"canvas"+p.first);
|
||||
savecolortable(distcolors, "distance");
|
||||
@ -3974,4 +4050,8 @@ EX void lps_add(local_parameter_set& lps, ld& val, ld nvalue) {
|
||||
lps_add_typed<ld, float_setting> (lps, val, nvalue);
|
||||
}
|
||||
|
||||
EX void lps_add(local_parameter_set& lps, color_t& val, color_t nvalue) {
|
||||
lps_add_typed<color_t, color_setting> (lps, val, nvalue);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user