Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/interface/interface_handlers.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
| Show First 20 Lines • Show All 8,258 Lines • ▼ Show 20 Lines | if (oldbut) { | ||||
| button_activate_exit(C, oldbut, data, false, false); | button_activate_exit(C, oldbut, data, false, false); | ||||
| } | } | ||||
| button_activate_init(C, ar, but, type); | button_activate_init(C, ar, but, type); | ||||
| } | } | ||||
| /************ handle events for an activated button ***********/ | /************ handle events for an activated button ***********/ | ||||
| static bool ui_button_value_default(uiBut *but, double *r_value) | |||||
| { | |||||
| if (but->rnaprop != NULL && ui_but_is_rna_valid(but)) { | |||||
| int type = RNA_property_type(but->rnaprop); | |||||
| if (ELEM(type, PROP_FLOAT, PROP_INT)) { | |||||
| double default_value; | |||||
| switch (type) { | |||||
| case PROP_INT: | |||||
| if (RNA_property_array_check(but->rnaprop)) { | |||||
| default_value = (double)RNA_property_int_get_default_index(&but->rnapoin, but->rnaprop, but->rnaindex); | |||||
| } | |||||
| else { | |||||
| default_value = (double)RNA_property_int_get_default(&but->rnapoin, but->rnaprop); | |||||
| } | |||||
| break; | |||||
| case PROP_FLOAT: | |||||
| if (RNA_property_array_check(but->rnaprop)) { | |||||
| default_value = (double)RNA_property_float_get_default_index(&but->rnapoin, but->rnaprop, but->rnaindex); | |||||
| } | |||||
| else { | |||||
| default_value = (double)RNA_property_float_get_default(&but->rnapoin, but->rnaprop); | |||||
| } | |||||
| break; | |||||
| } | |||||
| *r_value = default_value; | |||||
| return true; | |||||
| } | |||||
| } | |||||
| return false; | |||||
| } | |||||
| static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but) | static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but) | ||||
| { | { | ||||
| uiHandleButtonData *data = but->active; | uiHandleButtonData *data = but->active; | ||||
| const uiHandleButtonState state_orig = data->state; | const uiHandleButtonState state_orig = data->state; | ||||
| uiBlock *block; | uiBlock *block; | ||||
| ARegion *ar; | ARegion *ar; | ||||
| int retval; | int retval; | ||||
| ▲ Show 20 Lines • Show All 177 Lines • ▼ Show 20 Lines | static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but) | ||||
| } | } | ||||
| /* may have been re-allocated above (eyedropper for eg) */ | /* may have been re-allocated above (eyedropper for eg) */ | ||||
| data = but->active; | data = but->active; | ||||
| if (data && data->state == BUTTON_STATE_EXIT) { | if (data && data->state == BUTTON_STATE_EXIT) { | ||||
| uiBut *post_but = data->postbut; | uiBut *post_but = data->postbut; | ||||
| uiButtonActivateType post_type = data->posttype; | uiButtonActivateType post_type = data->posttype; | ||||
| /* Reset the button value when empty text is typed. */ | |||||
| if ((data->str != NULL) && (data->str[0] == '\0') && | |||||
| ELEM(RNA_property_type(but->rnaprop), PROP_FLOAT, PROP_INT)) | |||||
| { | |||||
| MEM_SAFE_FREE(data->str); | |||||
| ui_button_value_default(but, &data->value); | |||||
| #ifdef USE_DRAG_MULTINUM | |||||
| if (data->multi_data.mbuts) { | |||||
| for (LinkNode *l = data->multi_data.mbuts; l; l = l->next) { | |||||
| uiButMultiState *state = l->link; | |||||
| uiBut *but_iter = state->but; | |||||
| double default_value; | |||||
| if (ui_button_value_default(but_iter, &default_value)) { | |||||
| ui_but_value_set(but_iter, default_value); | |||||
| } | |||||
| } | |||||
| } | |||||
| ui_multibut_free(data, block); | |||||
| #endif | |||||
| } | |||||
| button_activate_exit(C, but, data, (post_but == NULL), false); | button_activate_exit(C, but, data, (post_but == NULL), false); | ||||
| /* for jumping to the next button with tab while text editing */ | /* for jumping to the next button with tab while text editing */ | ||||
| if (post_but) { | if (post_but) { | ||||
| button_activate_init(C, ar, post_but, post_type); | button_activate_init(C, ar, post_but, post_type); | ||||
| } | } | ||||
| else { | else { | ||||
| /* XXX issue is because WM_event_add_mousemove(C) is a bad hack and not reliable, | /* XXX issue is because WM_event_add_mousemove(C) is a bad hack and not reliable, | ||||
| ▲ Show 20 Lines • Show All 1,813 Lines • Show Last 20 Lines | |||||