mirror of
https://github.com/LostArtefacts/TRX.git
synced 2025-04-28 20:58:07 +03:00
tr2/option: adjust faster unless holding slow
This commit is contained in:
parent
bfbc54963d
commit
c6d1b4b996
1 changed files with 37 additions and 24 deletions
|
@ -20,6 +20,8 @@ typedef struct {
|
||||||
void *target;
|
void *target;
|
||||||
int32_t min_value;
|
int32_t min_value;
|
||||||
int32_t max_value;
|
int32_t max_value;
|
||||||
|
int32_t delta_slow;
|
||||||
|
int32_t delta_fast;
|
||||||
int32_t misc;
|
int32_t misc;
|
||||||
} M_OPTION;
|
} M_OPTION;
|
||||||
|
|
||||||
|
@ -75,6 +77,8 @@ static M_OPTION m_Options[] = {
|
||||||
.target = &g_Config.visuals.water_color,
|
.target = &g_Config.visuals.water_color,
|
||||||
.min_value = 0,
|
.min_value = 0,
|
||||||
.max_value = 255,
|
.max_value = 255,
|
||||||
|
.delta_slow = 1,
|
||||||
|
.delta_fast = 10,
|
||||||
.misc = 0,
|
.misc = 0,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -84,6 +88,8 @@ static M_OPTION m_Options[] = {
|
||||||
.target = &g_Config.visuals.water_color,
|
.target = &g_Config.visuals.water_color,
|
||||||
.min_value = 0,
|
.min_value = 0,
|
||||||
.max_value = 255,
|
.max_value = 255,
|
||||||
|
.delta_slow = 1,
|
||||||
|
.delta_fast = 10,
|
||||||
.misc = 1,
|
.misc = 1,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -93,6 +99,8 @@ static M_OPTION m_Options[] = {
|
||||||
.target = &g_Config.visuals.water_color,
|
.target = &g_Config.visuals.water_color,
|
||||||
.min_value = 0,
|
.min_value = 0,
|
||||||
.max_value = 255,
|
.max_value = 255,
|
||||||
|
.delta_slow = 1,
|
||||||
|
.delta_fast = 10,
|
||||||
.misc = 2,
|
.misc = 2,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -104,11 +112,11 @@ static M_OPTION m_Options[] = {
|
||||||
static uint8_t *M_GetColorComponent(const M_OPTION *option);
|
static uint8_t *M_GetColorComponent(const M_OPTION *option);
|
||||||
static void M_ClearRows(M_WIDGET *self);
|
static void M_ClearRows(M_WIDGET *self);
|
||||||
static char *M_FormatRowValue(int32_t row_idx);
|
static char *M_FormatRowValue(int32_t row_idx);
|
||||||
static bool M_CanChangeValue(int32_t row_idx, int32_t delta);
|
static bool M_CanChangeValue(int32_t row_idx, int32_t dir);
|
||||||
static bool M_RequestChangeValue(
|
static bool M_RequestChangeValue(M_WIDGET *self, int32_t row_idx, int32_t dir);
|
||||||
M_WIDGET *self, int32_t row_idx, int32_t delta);
|
|
||||||
static void M_DeselectRow(M_WIDGET *self, int32_t row_idx);
|
static void M_DeselectRow(M_WIDGET *self, int32_t row_idx);
|
||||||
static void M_SelectRow(M_WIDGET *self, int32_t row_idx);
|
static void M_SelectRow(M_WIDGET *self, int32_t row_idx);
|
||||||
|
static void M_SyncRows(M_WIDGET *self);
|
||||||
static M_ROW *M_AddRow(
|
static M_ROW *M_AddRow(
|
||||||
M_WIDGET *self, const char *left_text, const char *right_text,
|
M_WIDGET *self, const char *left_text, const char *right_text,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
@ -161,11 +169,9 @@ static char *M_FormatRowValue(const int32_t row_idx)
|
||||||
case COT_INT32:
|
case COT_INT32:
|
||||||
return String_Format(
|
return String_Format(
|
||||||
GS(DETAIL_INTEGER_FMT), *(int32_t *)option->target);
|
GS(DETAIL_INTEGER_FMT), *(int32_t *)option->target);
|
||||||
break;
|
|
||||||
case COT_RGB888: {
|
case COT_RGB888: {
|
||||||
const uint8_t *const component = M_GetColorComponent(option);
|
const uint8_t *const component = M_GetColorComponent(option);
|
||||||
return String_Format("%d", *component);
|
return String_Format("%d", *component);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -173,50 +179,46 @@ static char *M_FormatRowValue(const int32_t row_idx)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool M_CanChangeValue(const int32_t row_idx, const int32_t delta)
|
static bool M_CanChangeValue(const int32_t row_idx, const int32_t dir)
|
||||||
{
|
{
|
||||||
const M_OPTION *const option = &m_Options[row_idx];
|
const M_OPTION *const option = &m_Options[row_idx];
|
||||||
switch (option->option_type) {
|
switch (option->option_type) {
|
||||||
case COT_INT32:
|
case COT_INT32:
|
||||||
if (delta < 0) {
|
if (dir < 0) {
|
||||||
return *(int32_t *)option->target > option->min_value;
|
return *(int32_t *)option->target > option->min_value;
|
||||||
} else if (delta > 0) {
|
} else if (dir > 0) {
|
||||||
return *(int32_t *)option->target < option->max_value;
|
return *(int32_t *)option->target < option->max_value;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case COT_RGB888: {
|
case COT_RGB888: {
|
||||||
const uint8_t *const component = M_GetColorComponent(option);
|
const uint8_t *const component = M_GetColorComponent(option);
|
||||||
if (delta < 0) {
|
if (dir < 0) {
|
||||||
return *component > option->min_value;
|
return *component > option->min_value;
|
||||||
} else if (delta > 0) {
|
} else if (dir > 0) {
|
||||||
return *component < option->max_value;
|
return *component < option->max_value;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return false;
|
break;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void M_SyncRows(M_WIDGET *const self)
|
|
||||||
{
|
|
||||||
for (int32_t row_idx = 0; row_idx < self->row_count; row_idx++) {
|
|
||||||
M_ROW *const row = &self->rows[row_idx];
|
|
||||||
char *value_text = M_FormatRowValue(row_idx);
|
|
||||||
UI_Label_ChangeText(row->value_label, value_text);
|
|
||||||
Memory_Free(value_text);
|
|
||||||
}
|
|
||||||
M_DoLayout(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool M_RequestChangeValue(
|
static bool M_RequestChangeValue(
|
||||||
M_WIDGET *const self, const int32_t row_idx, const int32_t delta)
|
M_WIDGET *const self, const int32_t row_idx, const int32_t dir)
|
||||||
{
|
{
|
||||||
if (!M_CanChangeValue(row_idx, delta)) {
|
if (!M_CanChangeValue(row_idx, dir)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const M_OPTION *const option = &m_Options[row_idx];
|
const M_OPTION *const option = &m_Options[row_idx];
|
||||||
|
int32_t delta = g_Input.slow ? option->delta_slow : option->delta_fast;
|
||||||
|
if (delta == 0) {
|
||||||
|
delta = 1;
|
||||||
|
}
|
||||||
|
delta *= dir;
|
||||||
|
|
||||||
switch (option->option_type) {
|
switch (option->option_type) {
|
||||||
case COT_INT32:
|
case COT_INT32:
|
||||||
*(int32_t *)option->target += delta;
|
*(int32_t *)option->target += delta;
|
||||||
|
@ -254,6 +256,17 @@ static void M_SelectRow(M_WIDGET *const self, const int32_t row_idx)
|
||||||
UI_Frame_SetFrameVisible(row->frame, true);
|
UI_Frame_SetFrameVisible(row->frame, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void M_SyncRows(M_WIDGET *const self)
|
||||||
|
{
|
||||||
|
for (int32_t row_idx = 0; row_idx < self->row_count; row_idx++) {
|
||||||
|
M_ROW *const row = &self->rows[row_idx];
|
||||||
|
char *value_text = M_FormatRowValue(row_idx);
|
||||||
|
UI_Label_ChangeText(row->value_label, value_text);
|
||||||
|
Memory_Free(value_text);
|
||||||
|
}
|
||||||
|
M_DoLayout(self);
|
||||||
|
}
|
||||||
|
|
||||||
static M_ROW *M_AddRow(
|
static M_ROW *M_AddRow(
|
||||||
M_WIDGET *const self, const char *const left_text,
|
M_WIDGET *const self, const char *const left_text,
|
||||||
const char *const right_text, void *const user_data)
|
const char *const right_text, void *const user_data)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue