Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Eisel <julian@blender.org>2020-09-04 22:18:45 +0300
committerJulian Eisel <julian@blender.org>2020-09-04 22:26:31 +0300
commite6f0b60c2e9111af1878d31dcc295c59ed1bea77 (patch)
tree4df10fc869f5f512c233a2755246c1749bafc1c7 /source/blender/editors/interface/interface_handlers.c
parent47881791be0538f9558b2ef091e1761187df250d (diff)
UI Code Quality: Use derived struct for number buttons
For the man rationale behind this design, see 49f088e2d093. Further, this removes users of uiBut.a1/uiBut.a2, which is a very ugly design choice (hard to reason about). Note that I had to do rather ugly, specific exceptions for the number buttons in `ui_def_but_rna()`. But once all users of a1/a2 are removed, this special handling shouldn't be needed anymore. I also had to move a sanity check out of the button definition. It's now moved into a new debug only sanity checking function executed when finishing the layout definition (block end).
Diffstat (limited to 'source/blender/editors/interface/interface_handlers.c')
-rw-r--r--source/blender/editors/interface/interface_handlers.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 83cbdeff0d8..a4042ab8265 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -3896,12 +3896,14 @@ static void ui_numedit_begin(uiBut *but, uiHandleButtonData *data)
softrange = softmax - softmin;
if ((but->type == UI_BTYPE_NUM) && (ui_but_is_cursor_warp(but) == false)) {
+ uiButNumber *number_but = (uiButNumber *)but;
/* Use a minimum so we have a predictable range,
* otherwise some float buttons get a large range. */
const float value_step_float_min = 0.1f;
const bool is_float = ui_but_is_float(but);
- const double value_step = is_float ? (double)(but->a1 * UI_PRECISION_FLOAT_SCALE) :
- (int)but->a1;
+ const double value_step = is_float ?
+ (double)(number_but->step_size * UI_PRECISION_FLOAT_SCALE) :
+ (int)number_but->step_size;
const float drag_map_softrange_max = UI_DRAG_MAP_SOFT_RANGE_PIXEL_MAX * UI_DPI_FAC;
const float softrange_max = min_ff(
softrange,
@@ -4699,13 +4701,14 @@ static float ui_numedit_apply_snap(int temp,
return temp;
}
-static bool ui_numedit_but_NUM(uiBut *but,
+static bool ui_numedit_but_NUM(uiButNumber *number_but,
uiHandleButtonData *data,
int mx,
const bool is_motion,
const enum eSnapType snap,
float fac)
{
+ uiBut *but = &number_but->but;
float deler, tempf;
int lvalue, temp;
bool changed = false;
@@ -4724,7 +4727,7 @@ static bool ui_numedit_but_NUM(uiBut *but,
/* Mouse location isn't screen clamped to the screen so use a linear mapping
* 2px == 1-int, or 1px == 1-ClickStep */
if (is_float) {
- fac *= 0.01f * but->a1;
+ fac *= 0.01f * number_but->step_size;
tempf = (float)data->startvalue + ((float)(mx - data->dragstartx) * fac);
tempf = ui_numedit_apply_snapf(but, tempf, softmin, softmax, snap);
@@ -4927,6 +4930,7 @@ static void ui_numedit_set_active(uiBut *but)
static int ui_do_but_NUM(
bContext *C, uiBlock *block, uiBut *but, uiHandleButtonData *data, const wmEvent *event)
{
+ uiButNumber *number_but = (uiButNumber *)but;
int click = 0;
int retval = WM_UI_HANDLER_CONTINUE;
@@ -4936,6 +4940,8 @@ static int ui_do_but_NUM(
/* mouse location kept at screen pixel coords */
const int screen_mx = event->x;
+ BLI_assert(but->type == UI_BTYPE_NUM);
+
ui_window_to_block(data->region, block, &mx, &my);
ui_numedit_set_active(but);
@@ -5028,8 +5034,12 @@ static int ui_do_but_NUM(
fac /= 10.0f;
}
- if (ui_numedit_but_NUM(
- but, data, (ui_but_is_cursor_warp(but) ? screen_mx : mx), is_motion, snap, fac)) {
+ if (ui_numedit_but_NUM(number_but,
+ data,
+ (ui_but_is_cursor_warp(but) ? screen_mx : mx),
+ is_motion,
+ snap,
+ fac)) {
ui_numedit_apply(C, block, but, data);
}
#ifdef USE_DRAG_MULTINUM
@@ -5060,7 +5070,7 @@ static int ui_do_but_NUM(
if (but->drawflag & (UI_BUT_ACTIVE_LEFT | UI_BUT_ACTIVE_RIGHT)) {
button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
- const int value_step = (int)but->a1;
+ const int value_step = (int)number_but->step_size;
BLI_assert(value_step > 0);
const int softmin = round_fl_to_int_clamp(but->softmin);
const int softmax = round_fl_to_int_clamp(but->softmax);
@@ -5084,7 +5094,7 @@ static int ui_do_but_NUM(
if (but->drawflag & (UI_BUT_ACTIVE_LEFT | UI_BUT_ACTIVE_RIGHT)) {
button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
- const double value_step = (double)but->a1 * UI_PRECISION_FLOAT_SCALE;
+ const double value_step = (double)number_but->step_size * UI_PRECISION_FLOAT_SCALE;
BLI_assert(value_step > 0.0f);
const double value_test = (but->drawflag & UI_BUT_ACTIVE_LEFT) ?
(double)max_ff(but->softmin,