diff options
Diffstat (limited to 'source/blender/editors/interface/interface_handlers.c')
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 298 |
1 files changed, 157 insertions, 141 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index b37b2f2cd4b..6f76da0317c 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -47,6 +47,7 @@ #include "PIL_time.h" +#include "BKE_animsys.h" #include "BKE_blender_undo.h" #include "BKE_brush.h" #include "BKE_colorband.h" @@ -585,7 +586,7 @@ static bool ui_but_dragedit_update_mval(uiHandleButtonData *data, int mx) return true; } -static void ui_rna_update_preferences_dirty(PointerRNA *ptr, PropertyRNA *prop) +static bool ui_rna_is_userdef(PointerRNA *ptr, PropertyRNA *prop) { /* Not very elegant, but ensures preference changes force re-save. */ bool tag = false; @@ -598,8 +599,18 @@ static void ui_rna_update_preferences_dirty(PointerRNA *ptr, PropertyRNA *prop) tag = true; } } + return tag; +} + +bool UI_but_is_userdef(const uiBut *but) +{ + /* This is read-only, RNA API isn't using const when it could. */ + return ui_rna_is_userdef((PointerRNA *)&but->rnapoin, but->rnaprop); +} - if (tag) { +static void ui_rna_update_preferences_dirty(PointerRNA *ptr, PropertyRNA *prop) +{ + if (ui_rna_is_userdef(ptr, prop)) { U.runtime.is_dirty = true; WM_main_add_notifier(NC_WINDOW, NULL); } @@ -1374,16 +1385,14 @@ static bool ui_drag_toggle_but_is_supported(const uiBut *but) if (ui_but_is_bool(but)) { return true; } - else if (UI_but_is_decorator(but)) { + if (UI_but_is_decorator(but)) { return ELEM(but->icon, ICON_DECORATE, ICON_DECORATE_KEYFRAME, ICON_DECORATE_ANIMATE, ICON_DECORATE_OVERRIDE); } - else { - return false; - } + return false; } /* Button pushed state to compare if other buttons match. Can be more @@ -1394,19 +1403,15 @@ static int ui_drag_toggle_but_pushed_state(bContext *C, uiBut *but) if (but->pushed_state_func) { return but->pushed_state_func(C, but->pushed_state_arg); } - else { - /* Assume icon identifies a unique state, for buttons that - * work though functions callbacks and don't have an boolean - * value that indicates the state. */ - return but->icon + but->iconadd; - } + /* Assume icon identifies a unique state, for buttons that + * work though functions callbacks and don't have an boolean + * value that indicates the state. */ + return but->icon + but->iconadd; } - else if (ui_but_is_bool(but)) { + if (ui_but_is_bool(but)) { return ui_but_is_pushed(but); } - else { - return 0; - } + return 0; } typedef struct uiDragToggleHandle { @@ -1572,9 +1577,7 @@ static int ui_handler_region_drag_toggle(bContext *C, const wmEvent *event, void WM_event_add_mousemove(win); return WM_UI_HANDLER_BREAK; } - else { - return WM_UI_HANDLER_CONTINUE; - } + return WM_UI_HANDLER_CONTINUE; } static bool ui_but_is_drag_toggle(const uiBut *but) @@ -1750,21 +1753,21 @@ static void ui_selectcontext_apply(bContext *C, RNA_property_int_range(&but->rnapoin, prop, &min.i, &max.i); } else if (rna_type == PROP_ENUM) { - /* not a delta infact */ + /* Not a delta in fact. */ delta.i = RNA_property_enum_get(&but->rnapoin, prop); } else if (rna_type == PROP_BOOLEAN) { if (is_array) { - /* not a delta infact */ + /* Not a delta in fact. */ delta.b = RNA_property_boolean_get_index(&but->rnapoin, prop, index); } else { - /* not a delta infact */ + /* Not a delta in fact. */ delta.b = RNA_property_boolean_get(&but->rnapoin, prop); } } else if (rna_type == PROP_POINTER) { - /* not a delta infact */ + /* Not a delta in fact. */ delta.p = RNA_property_pointer_get(&but->rnapoin, prop); } @@ -2322,9 +2325,7 @@ static bool parse_float_array(char *text, float *values, int expected_length) memcpy(values, v, sizeof(float) * expected_length); return true; } - else { - return false; - } + return false; } static void ui_but_paste_numeric_array(bContext *C, @@ -2363,7 +2364,7 @@ static void ui_but_paste_numeric_value(bContext *C, { double value; - if (ui_but_string_set_eval_num(C, but, buf_paste, &value)) { + if (ui_but_string_eval_number(C, but, buf_paste, &value)) { button_activate_state(C, but, BUTTON_STATE_NUM_EDITING); data->value = value; ui_but_string_set(C, but, buf_paste); @@ -4194,7 +4195,7 @@ static int ui_do_but_BUT(bContext *C, uiBut *but, uiHandleButtonData *data, cons button_activate_state(C, but, BUTTON_STATE_WAIT_RELEASE); return WM_UI_HANDLER_BREAK; } - else if (event->type == LEFTMOUSE && event->val == KM_RELEASE && but->block->handle) { + if (event->type == LEFTMOUSE && event->val == KM_RELEASE && but->block->handle) { /* regular buttons will be 'UI_SELECT', menu items 'UI_ACTIVE' */ if (!(but->flag & (UI_SELECT | UI_ACTIVE))) { data->cancel = true; @@ -4202,7 +4203,7 @@ static int ui_do_but_BUT(bContext *C, uiBut *but, uiHandleButtonData *data, cons button_activate_state(C, but, BUTTON_STATE_EXIT); return WM_UI_HANDLER_BREAK; } - else if (ELEM(event->type, EVT_PADENTER, EVT_RETKEY) && event->val == KM_PRESS) { + if (ELEM(event->type, EVT_PADENTER, EVT_RETKEY) && event->val == KM_PRESS) { button_activate_state(C, but, BUTTON_STATE_WAIT_FLASH); return WM_UI_HANDLER_BREAK; } @@ -4237,11 +4238,11 @@ static int ui_do_but_HOTKEYEVT(bContext *C, if (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE)) { return WM_UI_HANDLER_CONTINUE; } - else if (event->type == EVT_UNKNOWNKEY) { + if (event->type == EVT_UNKNOWNKEY) { WM_report(RPT_WARNING, "Unsupported key: Unknown"); return WM_UI_HANDLER_CONTINUE; } - else if (event->type == EVT_CAPSLOCKKEY) { + if (event->type == EVT_CAPSLOCKKEY) { WM_report(RPT_WARNING, "Unsupported key: CapsLock"); return WM_UI_HANDLER_CONTINUE; } @@ -4291,7 +4292,7 @@ static int ui_do_but_HOTKEYEVT(bContext *C, button_activate_state(C, but, BUTTON_STATE_EXIT); return WM_UI_HANDLER_BREAK; } - else if (event->type == EVT_ESCKEY) { + if (event->type == EVT_ESCKEY) { if (event->val == KM_PRESS) { data->cancel = true; data->escapecancel = true; @@ -4357,7 +4358,7 @@ static int ui_do_but_TAB( button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING); return WM_UI_HANDLER_BREAK; } - else if (ELEM(event->type, LEFTMOUSE, EVT_PADENTER, EVT_RETKEY)) { + if (ELEM(event->type, LEFTMOUSE, EVT_PADENTER, EVT_RETKEY)) { int event_val = (is_property) ? KM_PRESS : KM_CLICK; if (event->val == event_val) { button_activate_state(C, but, BUTTON_STATE_EXIT); @@ -4386,7 +4387,7 @@ static int ui_do_but_TEX( if (ELEM(event->type, EVT_PADENTER, EVT_RETKEY) && (!UI_but_is_utf8(but))) { /* pass - allow filesel, enter to execute */ } - else if (but->dt == UI_EMBOSS_NONE && !event->ctrl) { + else if (but->emboss == UI_EMBOSS_NONE && !event->ctrl) { /* pass */ } else { @@ -4459,7 +4460,7 @@ static int ui_do_but_TOG(bContext *C, uiBut *but, uiHandleButtonData *data, cons button_activate_state(C, but, BUTTON_STATE_EXIT); return WM_UI_HANDLER_BREAK; } - else if (ELEM(event->type, WHEELDOWNMOUSE, WHEELUPMOUSE) && event->ctrl) { + if (ELEM(event->type, WHEELDOWNMOUSE, WHEELUPMOUSE) && event->ctrl) { /* Support alt+wheel on expanded enum rows */ if (but->type == UI_BTYPE_ROW) { const int direction = (event->type == WHEELDOWNMOUSE) ? -1 : 1; @@ -4862,7 +4863,7 @@ static void ui_numedit_set_active(uiBut *but) /* Don't change the cursor once pressed. */ if ((but->flag & UI_SELECT) == 0) { - if ((but->drawflag & (UI_BUT_ACTIVE_LEFT)) || (but->drawflag & (UI_BUT_ACTIVE_RIGHT))) { + if ((but->drawflag & UI_BUT_ACTIVE_LEFT) || (but->drawflag & UI_BUT_ACTIVE_RIGHT)) { if (data->changed_cursor) { WM_cursor_modal_restore(data->window); data->changed_cursor = false; @@ -5557,7 +5558,7 @@ static int ui_do_but_BLOCK(bContext *C, uiBut *but, uiHandleButtonData *data, co button_activate_state(C, but, BUTTON_STATE_MENU_OPEN); return WM_UI_HANDLER_BREAK; } - else if (but->type == UI_BTYPE_MENU) { + if (but->type == UI_BTYPE_MENU) { if (ELEM(event->type, WHEELDOWNMOUSE, WHEELUPMOUSE) && event->ctrl) { const int direction = (event->type == WHEELDOWNMOUSE) ? 1 : -1; @@ -5731,7 +5732,7 @@ static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, co button_activate_state(C, but, BUTTON_STATE_MENU_OPEN); return WM_UI_HANDLER_BREAK; } - else if (ELEM(event->type, MOUSEPAN, WHEELDOWNMOUSE, WHEELUPMOUSE) && event->ctrl) { + if (ELEM(event->type, MOUSEPAN, WHEELDOWNMOUSE, WHEELUPMOUSE) && event->ctrl) { ColorPicker *cpicker = but->custom_data; float hsv_static[3] = {0.0f}; float *hsv = cpicker ? cpicker->color_data : hsv_static; @@ -5758,8 +5759,8 @@ static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, co ui_apply_but(C, but->block, but, data, true); return WM_UI_HANDLER_BREAK; } - else if ((int)(but->a1) == UI_PALETTE_COLOR && event->type == EVT_DELKEY && - event->val == KM_PRESS) { + if ((int)(but->a1) == UI_PALETTE_COLOR && event->type == EVT_DELKEY && + event->val == KM_PRESS) { Palette *palette = (Palette *)but->rnapoin.owner_id; PaletteColor *color = but->rnapoin.data; @@ -6164,7 +6165,7 @@ static int ui_do_but_HSVCUBE( return WM_UI_HANDLER_BREAK; } #ifdef WITH_INPUT_NDOF - else if (event->type == NDOF_MOTION) { + if (event->type == NDOF_MOTION) { const wmNDOFMotionData *ndof = event->customdata; const enum eSnapType snap = ui_event_to_snap(event); @@ -6177,7 +6178,7 @@ static int ui_do_but_HSVCUBE( } #endif /* WITH_INPUT_NDOF */ /* XXX hardcoded keymap check.... */ - else if (event->type == EVT_BACKSPACEKEY && event->val == KM_PRESS) { + if (event->type == EVT_BACKSPACEKEY && event->val == KM_PRESS) { if (ELEM(but->a1, UI_GRAD_V_ALT, UI_GRAD_L_ALT)) { int len; @@ -6440,7 +6441,7 @@ static int ui_do_but_HSVCIRCLE( return WM_UI_HANDLER_BREAK; } #ifdef WITH_INPUT_NDOF - else if (event->type == NDOF_MOTION) { + if (event->type == NDOF_MOTION) { const enum eSnapType snap = ui_event_to_snap(event); const wmNDOFMotionData *ndof = event->customdata; @@ -6453,7 +6454,7 @@ static int ui_do_but_HSVCIRCLE( } #endif /* WITH_INPUT_NDOF */ /* XXX hardcoded keymap check.... */ - else if (event->type == EVT_BACKSPACEKEY && event->val == KM_PRESS) { + if (event->type == EVT_BACKSPACEKEY && event->val == KM_PRESS) { int len; /* reset only saturation */ @@ -6934,7 +6935,7 @@ static bool ui_numedit_but_CURVEPROFILE(uiBlock *block, d[0] = mx - data->dragstartx; d[1] = my - data->dragstarty; - if (len_squared_v2(d) < (3.0f * 3.0f)) { + if (len_squared_v2(d) < (9.0f * U.dpi_fac)) { snap = false; } } @@ -6943,32 +6944,38 @@ static bool ui_numedit_but_CURVEPROFILE(uiBlock *block, fy = (my - dragy) / zoomy; if (data->dragsel != -1) { - CurveProfilePoint *point_last = NULL; + float last_x, last_y; const float mval_factor = ui_mouse_scale_warp_factor(shift); bool moved_point = false; /* for ctrl grid, can't use orig coords because of sorting */ fx *= mval_factor; fy *= mval_factor; - /* Move all the points that aren't the last or the first */ - for (a = 1; a < profile->path_len - 1; a++) { - if (pts[a].flag & PROF_SELECT) { - float origx = pts[a].x, origy = pts[a].y; - pts[a].x += fx; - pts[a].y += fy; - if (snap) { - pts[a].x = 0.125f * roundf(8.0f * pts[a].x); - pts[a].y = 0.125f * roundf(8.0f * pts[a].y); + /* Move all selected points. */ + float delta[2] = {fx, fy}; + for (a = 0; a < profile->path_len; a++) { + /* Don't move the last and first control points. */ + if ((pts[a].flag & PROF_SELECT) && (a != 0) && (a != profile->path_len)) { + moved_point |= BKE_curveprofile_move_point(profile, &pts[a], snap, delta); + last_x = pts[a].x; + last_y = pts[a].y; + } + else { + /* Move handles when they're selected but the control point isn't. */ + if (ELEM(pts[a].h2, HD_FREE, HD_ALIGN) && pts[a].flag == PROF_H1_SELECT) { + moved_point |= BKE_curveprofile_move_handle(&pts[a], true, snap, delta); + last_x = pts[a].h1_loc[0]; + last_y = pts[a].h1_loc[1]; } - if (!moved_point && (pts[a].x != origx || pts[a].y != origy)) { - moved_point = true; + if (ELEM(pts[a].h2, HD_FREE, HD_ALIGN) && pts[a].flag == PROF_H2_SELECT) { + moved_point |= BKE_curveprofile_move_handle(&pts[a], false, snap, delta); + last_x = pts[a].h2_loc[0]; + last_y = pts[a].h2_loc[1]; } - - point_last = &pts[a]; } } - BKE_curveprofile_update(profile, false); + BKE_curveprofile_update(profile, PROF_UPDATE_NONE); if (moved_point) { data->draglastx = evtx; @@ -6979,10 +6986,8 @@ static bool ui_numedit_but_CURVEPROFILE(uiBlock *block, * but in practice this isnt really an issue */ if (ui_but_is_cursor_warp(but)) { /* OK but can go outside bounds */ - data->ungrab_mval[0] = but->rect.xmin + - ((point_last->x - profile->view_rect.xmin) * zoomx); - data->ungrab_mval[1] = but->rect.ymin + - ((point_last->y - profile->view_rect.ymin) * zoomy); + data->ungrab_mval[0] = but->rect.xmin + ((last_x - profile->view_rect.xmin) * zoomx); + data->ungrab_mval[1] = but->rect.ymin + ((last_y - profile->view_rect.ymin) * zoomy); BLI_rctf_clamp_pt_v(&but->rect, data->ungrab_mval); } #endif @@ -6990,7 +6995,7 @@ static bool ui_numedit_but_CURVEPROFILE(uiBlock *block, data->dragchange = true; /* mark for selection */ } else { - /* clamp for clip */ + /* Clamp the view rect when clipping is on. */ if (profile->flag & PROF_USE_CLIP) { if (profile->view_rect.xmin - fx < profile->clip_rect.xmin) { fx = profile->view_rect.xmin - profile->clip_rect.xmin; @@ -7021,16 +7026,26 @@ static bool ui_numedit_but_CURVEPROFILE(uiBlock *block, } /** + * Helper for #ui_do_but_CURVEPROFILE. Used to tell whether to select a control point's handles. + */ +static bool point_draw_handles(CurveProfilePoint *point) +{ + return (point->flag & PROF_SELECT && + (ELEM(point->h1, HD_FREE, HD_ALIGN) || ELEM(point->h2, HD_FREE, HD_ALIGN))) || + ELEM(point->flag, PROF_H1_SELECT, PROF_H2_SELECT); +} + +/** * Interaction for curve profile widget. * \note Uses hardcoded keys rather than the keymap. */ static int ui_do_but_CURVEPROFILE( bContext *C, uiBlock *block, uiBut *but, uiHandleButtonData *data, const wmEvent *event) { - int mx, my, i; + CurveProfile *profile = (CurveProfile *)but->poin; + int mx = event->x; + int my = event->y; - mx = event->x; - my = event->y; ui_window_to_block(data->region, block, &mx, &my); /* Move selected control points. */ @@ -7043,12 +7058,10 @@ static int ui_do_but_CURVEPROFILE( return WM_UI_HANDLER_BREAK; } - CurveProfile *profile = (CurveProfile *)but->poin; - /* Delete selected control points. */ if (event->type == EVT_XKEY && event->val == KM_RELEASE) { BKE_curveprofile_remove_by_flag(profile, PROF_SELECT); - BKE_curveprofile_update(profile, false); + BKE_curveprofile_update(profile, PROF_UPDATE_NONE); button_activate_state(C, but, BUTTON_STATE_EXIT); return WM_UI_HANDLER_BREAK; } @@ -7056,76 +7069,94 @@ static int ui_do_but_CURVEPROFILE( /* Selecting, adding, and starting point movements. */ if (data->state == BUTTON_STATE_HIGHLIGHT) { if (event->type == LEFTMOUSE && event->val == KM_PRESS) { - CurveProfilePoint *pts; /* Path or table. */ const float m_xy[2] = {mx, my}; - float dist_min_sq; - int i_selected = -1; if (event->ctrl) { float f_xy[2]; BLI_rctf_transform_pt_v(&profile->view_rect, &but->rect, f_xy, m_xy); BKE_curveprofile_insert(profile, f_xy[0], f_xy[1]); - BKE_curveprofile_update(profile, false); + BKE_curveprofile_update(profile, PROF_UPDATE_CLIP); } /* Check for selecting of a point by finding closest point in radius. */ - dist_min_sq = square_f(U.dpi_fac * 14.0f); /* 14 pixels radius for selecting points. */ - pts = profile->path; - for (i = 0; i < profile->path_len; i++) { + CurveProfilePoint *pts = profile->path; + float dist_min_sq = square_f(U.dpi_fac * 14.0f); /* 14 pixels radius for selecting points. */ + int i_selected = -1; + short selection_type = 0; /* For handle selection. */ + for (int i = 0; i < profile->path_len; i++) { float f_xy[2]; BLI_rctf_transform_pt_v(&but->rect, &profile->view_rect, f_xy, &pts[i].x); - const float dist_sq = len_squared_v2v2(m_xy, f_xy); + float dist_sq = len_squared_v2v2(m_xy, f_xy); if (dist_sq < dist_min_sq) { i_selected = i; + selection_type = PROF_SELECT; dist_min_sq = dist_sq; } + + /* Also select handles if the point is selected and it has the right handle type. */ + if (point_draw_handles(&pts[i])) { + if (ELEM(profile->path[i].h1, HD_FREE, HD_ALIGN)) { + BLI_rctf_transform_pt_v(&but->rect, &profile->view_rect, f_xy, pts[i].h1_loc); + dist_sq = len_squared_v2v2(m_xy, f_xy); + if (dist_sq < dist_min_sq) { + i_selected = i; + selection_type = PROF_H1_SELECT; + dist_min_sq = dist_sq; + } + } + if (ELEM(profile->path[i].h2, HD_FREE, HD_ALIGN)) { + BLI_rctf_transform_pt_v(&but->rect, &profile->view_rect, f_xy, pts[i].h2_loc); + dist_sq = len_squared_v2v2(m_xy, f_xy); + if (dist_sq < dist_min_sq) { + i_selected = i; + selection_type = PROF_H2_SELECT; + dist_min_sq = dist_sq; + } + } + } } - /* Add a point if the click was close to the path but not a control point. */ - if (i_selected == -1) { /* No control point selected. */ + /* Add a point if the click was close to the path but not a control point or handle. */ + if (i_selected == -1) { float f_xy[2], f_xy_prev[2]; - pts = profile->table; - BLI_rctf_transform_pt_v(&but->rect, &profile->view_rect, f_xy, &pts[0].x); + CurveProfilePoint *table = profile->table; + BLI_rctf_transform_pt_v(&but->rect, &profile->view_rect, f_xy, &table[0].x); dist_min_sq = square_f(U.dpi_fac * 8.0f); /* 8 pixel radius from each table point. */ /* Loop through the path's high resolution table and find what's near the click. */ - for (i = 1; i <= PROF_N_TABLE(profile->path_len); i++) { + for (int i = 1; i <= PROF_TABLE_LEN(profile->path_len); i++) { copy_v2_v2(f_xy_prev, f_xy); - BLI_rctf_transform_pt_v(&but->rect, &profile->view_rect, f_xy, &pts[i].x); + BLI_rctf_transform_pt_v(&but->rect, &profile->view_rect, f_xy, &table[i].x); if (dist_squared_to_line_segment_v2(m_xy, f_xy_prev, f_xy) < dist_min_sq) { BLI_rctf_transform_pt_v(&profile->view_rect, &but->rect, f_xy, m_xy); CurveProfilePoint *new_pt = BKE_curveprofile_insert(profile, f_xy[0], f_xy[1]); - BKE_curveprofile_update(profile, false); - - /* reset pts back to the control points. */ - pts = profile->path; + BKE_curveprofile_update(profile, PROF_UPDATE_CLIP); /* Get the index of the newly added point. */ - for (i = 0; i < profile->path_len; i++) { - if (&pts[i] == new_pt) { - i_selected = i; - } - } + i_selected = (int)(new_pt - profile->path); + BLI_assert(i_selected >= 0 && i_selected <= profile->path_len); + selection_type = PROF_SELECT; break; } } } - /* Change the flag for the point(s) if one was selected. */ + /* Change the flag for the point(s) if one was selected or added. */ if (i_selected != -1) { /* Deselect all if this one is deselected, except if we hold shift. */ - if (!event->shift) { - for (i = 0; i < profile->path_len; i++) { - pts[i].flag &= ~PROF_SELECT; - } - pts[i_selected].flag |= PROF_SELECT; + if (event->shift) { + pts[i_selected].flag ^= selection_type; } else { - pts[i_selected].flag ^= PROF_SELECT; + for (int i = 0; i < profile->path_len; i++) { + // pts[i].flag &= ~(PROF_SELECT | PROF_H1_SELECT | PROF_H2_SELECT); + profile->path[i].flag &= ~(PROF_SELECT | PROF_H1_SELECT | PROF_H2_SELECT); + } + profile->path[i_selected].flag |= selection_type; } } else { @@ -7156,19 +7187,13 @@ static int ui_do_but_CURVEPROFILE( else if (event->type == LEFTMOUSE && event->val == KM_RELEASE) { /* Finish move. */ if (data->dragsel != -1) { - CurveProfilePoint *pts = profile->path; if (data->dragchange == false) { /* Deselect all, select one. */ - if (!event->shift) { - for (i = 0; i < profile->path_len; i++) { - pts[i].flag &= ~PROF_SELECT; - } - pts[data->dragsel].flag |= PROF_SELECT; - } } else { - BKE_curveprofile_update(profile, true); /* Remove doubles after move. */ + /* Remove doubles, clip after move. */ + BKE_curveprofile_update(profile, PROF_UPDATE_REMOVE_DOUBLES | PROF_UPDATE_CLIP); } } button_activate_state(C, but, BUTTON_STATE_EXIT); @@ -7223,7 +7248,7 @@ static int ui_do_but_HISTOGRAM( return WM_UI_HANDLER_BREAK; } /* XXX hardcoded keymap check.... */ - else if (event->type == EVT_BACKSPACEKEY && event->val == KM_PRESS) { + if (event->type == EVT_BACKSPACEKEY && event->val == KM_PRESS) { Histogram *hist = (Histogram *)but->poin; hist->ymax = 1.f; @@ -7299,7 +7324,7 @@ static int ui_do_but_WAVEFORM( return WM_UI_HANDLER_BREAK; } /* XXX hardcoded keymap check.... */ - else if (event->type == EVT_BACKSPACEKEY && event->val == KM_PRESS) { + if (event->type == EVT_BACKSPACEKEY && event->val == KM_PRESS) { Scopes *scopes = (Scopes *)but->poin; scopes->wavefrm_yfac = 1.f; @@ -8384,6 +8409,9 @@ void UI_context_update_anim_flag(const bContext *C) { Scene *scene = CTX_data_scene(C); ARegion *region = CTX_wm_region(C); + struct Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C); + const AnimationEvalContext anim_eval_context = BKE_animsys_eval_context_construct( + depsgraph, (scene) ? scene->r.cfra : 0.0f); uiBlock *block; uiBut *but, *activebut; @@ -8393,8 +8421,8 @@ void UI_context_update_anim_flag(const bContext *C) for (block = region->uiblocks.first; block; block = block->next) { for (but = block->buttons.first; but; but = but->next) { - ui_but_anim_flag(but, (scene) ? scene->r.cfra : 0.0f); - ui_but_override_flag(but); + ui_but_anim_flag(but, &anim_eval_context); + ui_but_override_flag(CTX_data_main(C), but); if (UI_but_is_decorator(but)) { ui_but_anim_decorate_update_from_flag(but); } @@ -8911,11 +8939,11 @@ static int ui_handle_list_event(bContext *C, const wmEvent *event, ARegion *regi my = event->y; ui_window_to_block(region, listbox->block, &mx, &my); - /* convert pan to scrollwheel */ + /* Convert pan to scroll-wheel. */ if (type == MOUSEPAN) { ui_pan_to_scroll(event, &type, &val); - /* if type still is mousepan, we call it handled, since delta-y accumulate */ + /* If type still is mouse-pan, we call it handled, since delta-y accumulate. */ /* also see wm_event_system.c do_wheel_ui hack */ if (type == MOUSEPAN) { retval = WM_UI_HANDLER_BREAK; @@ -9389,9 +9417,7 @@ static bool ui_menu_pass_event_to_parent_if_nonactive(uiPopupBlockHandle *menu, BLI_assert(retval == WM_UI_HANDLER_CONTINUE); return true; } - else { - return false; - } + return false; } static int ui_handle_menu_button(bContext *C, const wmEvent *event, uiPopupBlockHandle *menu) @@ -9644,7 +9670,7 @@ static int ui_handle_menu_event(bContext *C, int type = event->type; int val = event->val; - /* convert pan to scrollwheel */ + /* Convert pan to scroll-wheel. */ if (type == MOUSEPAN) { ui_pan_to_scroll(event, &type, &val); } @@ -9669,7 +9695,7 @@ static int ui_handle_menu_event(bContext *C, case EVT_PAGEDOWNKEY: case EVT_HOMEKEY: case EVT_ENDKEY: - /* arrowkeys: only handle for block_loop blocks */ + /* Arrow-keys: only handle for block_loop blocks. */ if (IS_EVENT_MOD(event, shift, ctrl, alt, oskey)) { /* pass */ } @@ -9677,7 +9703,7 @@ static int ui_handle_menu_event(bContext *C, int type = event->type; int val = event->val; - /* convert pan to scrollwheel */ + /* Convert pan to scroll-wheel. */ if (type == MOUSEPAN) { ui_pan_to_scroll(event, &type, &val); } @@ -9937,7 +9963,7 @@ static int ui_handle_menu_event(bContext *C, if (ELEM(event->val, KM_PRESS, KM_DBL_CLICK)) { if ((is_parent_menu == false) && (U.uiflag & USER_MENUOPENAUTO) == 0) { /* for root menus, allow clicking to close */ - if (block->flag & (UI_BLOCK_OUT_1)) { + if (block->flag & UI_BLOCK_OUT_1) { menu->menuretval = UI_RETURN_OK; } else { @@ -9945,7 +9971,7 @@ static int ui_handle_menu_event(bContext *C, } } else if (saferct && !BLI_rctf_isect_pt(&saferct->parent, event->x, event->y)) { - if (block->flag & (UI_BLOCK_OUT_1)) { + if (block->flag & UI_BLOCK_OUT_1) { menu->menuretval = UI_RETURN_OK; } else { @@ -10039,7 +10065,7 @@ static int ui_handle_menu_event(bContext *C, /* strict check, and include the parent rect */ if (!menu->dotowards && !saferct) { - if (block->flag & (UI_BLOCK_OUT_1)) { + if (block->flag & UI_BLOCK_OUT_1) { menu->menuretval = UI_RETURN_OK; } else { @@ -10086,12 +10112,10 @@ static int ui_handle_menu_event(bContext *C, if (menu->menuretval) { return WM_UI_HANDLER_CONTINUE; } - else if (inside) { + if (inside) { return WM_UI_HANDLER_BREAK; } - else { - return retval; - } + return retval; } static int ui_handle_menu_return_submenu(bContext *C, @@ -10146,9 +10170,7 @@ static int ui_handle_menu_return_submenu(bContext *C, if (menu->menuretval) { return WM_UI_HANDLER_CONTINUE; } - else { - return WM_UI_HANDLER_BREAK; - } + return WM_UI_HANDLER_BREAK; } static bool ui_but_pie_menu_supported_apply(uiBut *but) @@ -10176,9 +10198,7 @@ static int ui_but_pie_menu_apply(bContext *C, button_activate_init(C, menu->region, but, BUTTON_ACTIVATE_OPEN); return retval; } - else { - menu->menuretval = UI_RETURN_CANCEL; - } + menu->menuretval = UI_RETURN_CANCEL; } else { ui_apply_but(C, but->block, but, but->active, false); @@ -10882,7 +10902,7 @@ static void ui_popup_handler_remove(bContext *C, void *userdata) /* More correct would be to expect UI_RETURN_CANCEL here, but not wanting to * cancel when removing handlers because of file exit is a rare exception. * So instead of setting cancel flag for all menus before removing handlers, - * just explicitly flag menu with UI_RETURN_OK to avoid cancelling it. */ + * just explicitly flag menu with UI_RETURN_OK to avoid canceling it. */ if ((menu->menuretval & UI_RETURN_OK) == 0 && menu->cancel_func) { menu->cancel_func(C, menu->popup_arg); } @@ -10964,9 +10984,7 @@ bool UI_textbutton_activate_rna(const bContext *C, UI_but_active_only(C, region, block, but); return true; } - else { - return false; - } + return false; } bool UI_textbutton_activate_but(const bContext *C, uiBut *actbut) @@ -10991,9 +11009,7 @@ bool UI_textbutton_activate_but(const bContext *C, uiBut *actbut) UI_but_active_only(C, region, block, but); return true; } - else { - return false; - } + return false; } /** \} */ |