diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-05-23 11:50:35 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-05-23 11:51:11 +0300 |
commit | e92baab34893f5a5b3d6f59238fdb7855b72d7fe (patch) | |
tree | 457da9be1190b111803eb4a92e7b9384f243cfcd /source/blender/editors/interface | |
parent | 37b5c52f111d4fe6e024c1cd66ba965b3b6bd83d (diff) | |
parent | d886e32270edb8273ec48a41d1bdcef1fe802835 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/editors/interface')
18 files changed, 1642 insertions, 1642 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index be0c84f7d80..e4b298fecf0 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -93,7 +93,7 @@ /** * a full doc with API notes can be found in 'blender/doc/guides/interface_API.txt' - * + * * `uiBlahBlah()` external function. * `ui_blah_blah()` internal function. */ @@ -318,7 +318,7 @@ void ui_block_bounds_calc(uiBlock *block) { uiBut *bt; int xof; - + if (BLI_listbase_is_empty(&block->buttons)) { if (block->panel) { block->rect.xmin = 0.0; block->rect.xmax = block->panel->sizex; @@ -326,13 +326,13 @@ void ui_block_bounds_calc(uiBlock *block) } } else { - + BLI_rctf_init_minmax(&block->rect); for (bt = block->buttons.first; bt; bt = bt->next) { BLI_rctf_union(&block->rect, &bt->rect); } - + block->rect.xmin -= block->bounds; block->rect.ymin -= block->bounds; block->rect.xmax += block->bounds; @@ -341,7 +341,7 @@ void ui_block_bounds_calc(uiBlock *block) block->rect.xmax = block->rect.xmin + max_ff(BLI_rctf_size_x(&block->rect), block->minbounds); - /* hardcoded exception... but that one is annoying with larger safety */ + /* hardcoded exception... but that one is annoying with larger safety */ bt = block->buttons.first; if (bt && STREQLEN(bt->str, "ERROR", 5)) xof = 10; else xof = 40; @@ -357,7 +357,7 @@ static void ui_block_bounds_calc_centered(wmWindow *window, uiBlock *block) int xmax, ymax; int startx, starty; int width, height; - + /* note: this is used for the splash where window bounds event has not been * updated by ghost, get the window bounds from ghost directly */ @@ -365,18 +365,18 @@ static void ui_block_bounds_calc_centered(wmWindow *window, uiBlock *block) ymax = WM_window_pixels_y(window); ui_block_bounds_calc(block); - + width = BLI_rctf_size_x(&block->rect); height = BLI_rctf_size_y(&block->rect); - + startx = (xmax * 0.5f) - (width * 0.5f); starty = (ymax * 0.5f) - (height * 0.5f); - + UI_block_translate(block, startx - block->rect.xmin, starty - block->rect.ymin); - + /* now recompute bounds and safety */ ui_block_bounds_calc(block); - + } static void ui_block_bounds_calc_centered_pie(uiBlock *block) @@ -406,7 +406,7 @@ static void ui_block_bounds_calc_popup( /* compute mouse position with user defined offset */ ui_block_bounds_calc(block); - + xmax = WM_window_pixels_x(window); ymax = WM_window_pixels_y(window); @@ -464,7 +464,7 @@ void UI_block_bounds_set_normal(uiBlock *block, int addval) { if (block == NULL) return; - + block->bounds = addval; block->bounds_type = UI_BLOCK_BOUNDS; } @@ -723,7 +723,7 @@ bool UI_but_active_only(const bContext *C, ARegion *ar, uiBlock *block, uiBut *b uiBlock *oldblock; uiBut *oldbut; bool activate = false, found = false, isactive = false; - + oldblock = block->oldblock; if (!oldblock) { activate = true; @@ -746,7 +746,7 @@ bool UI_but_active_only(const bContext *C, ARegion *ar, uiBlock *block, uiBut *b ui_but_free(C, but); return false; } - + return true; } @@ -950,27 +950,27 @@ static bool ui_but_event_property_operator_string( "WM_OT_context_cycle_array", "WM_OT_context_menu_enum", NULL - }; + }; const size_t num_ops = sizeof(ctx_toggle_opnames) / sizeof(const char *); - + bool found = false; - + /* this version is only for finding hotkeys for properties (which get set via context using operators) */ if (but->rnaprop) { - /* to avoid massive slowdowns on property panels, for now, we only check the + /* to avoid massive slowdowns on property panels, for now, we only check the * hotkeys for Editor / Scene settings... * * TODO: userpref settings? */ // TODO: value (for enum stuff)? char *data_path = NULL; - + if (but->rnapoin.id.data) { ID *id = but->rnapoin.id.data; - + if (GS(id->name) == ID_SCR) { - /* screen/editor property - * NOTE: in most cases, there is actually no info for backwards tracing + /* screen/editor property + * NOTE: in most cases, there is actually no info for backwards tracing * how to get back to ID from the editor data we may be dealing with */ if (RNA_struct_is_a(but->rnapoin.type, &RNA_Space)) { @@ -991,7 +991,7 @@ static bool ui_but_event_property_operator_string( } else if (GS(id->name) == ID_SCE) { if (RNA_struct_is_a(but->rnapoin.type, &RNA_ToolSettings)) { - /* toolsettings property + /* toolsettings property * NOTE: toolsettings is usually accessed directly (i.e. not through scene) */ data_path = RNA_path_from_ID_to_property(&but->rnapoin, but->rnaprop); @@ -999,7 +999,7 @@ static bool ui_but_event_property_operator_string( else { /* scene property */ char *path = RNA_path_from_ID_to_property(&but->rnapoin, but->rnaprop); - + if (path) { data_path = BLI_sprintfN("scene.%s", path); MEM_freeN(path); @@ -1015,23 +1015,23 @@ static bool ui_but_event_property_operator_string( else { //puts("other id"); } - + //printf("prop shortcut: '%s' (%s)\n", RNA_property_identifier(but->rnaprop), data_path); } - + /* we have a datapath! */ if (data_path) { size_t i; - + /* create a property to host the "datapath" property we're sending to the operators */ IDProperty *prop_path; IDProperty *prop_path_value; - + IDPropertyTemplate val = {0}; prop_path = IDP_New(IDP_GROUP, &val, __func__); prop_path_value = IDP_NewString(data_path, "data_path", strlen(data_path) + 1); IDP_AddToGroup(prop_path, prop_path_value); - + /* check each until one works... */ for (i = 0; (i < num_ops) && (ctx_toggle_opnames[i]); i++) { if (WM_key_event_operator_string( @@ -1042,14 +1042,14 @@ static bool ui_but_event_property_operator_string( break; } } - + /* cleanup */ IDP_FreeProperty(prop_path); MEM_freeN(prop_path); MEM_freeN(data_path); } } - + return found; } @@ -1225,7 +1225,7 @@ void UI_block_end_ex(const bContext *C, uiBlock *block, const int xy[2], int r_x if (block->flag & (UI_BLOCK_LOOP | UI_BLOCK_SHOW_SHORTCUT_ALWAYS)) { ui_menu_block_set_keymaps(C, block); } - + /* after keymaps! */ switch (block->bounds_type) { case UI_BLOCK_BOUNDS_NONE: @@ -1273,12 +1273,12 @@ void ui_fontscale(short *points, float aspect) { if (aspect < 0.9f || aspect > 1.1f) { float pointsf = *points; - + /* for some reason scaling fonts goes too fast compared to widget size */ /* XXX not true anymore? (ton) */ //aspect = sqrt(aspect); pointsf /= aspect; - + if (aspect > 1.0f) *points = ceilf(pointsf); else @@ -1303,7 +1303,7 @@ void UI_block_draw(const bContext *C, uiBlock *block) ARegion *ar; uiBut *but; rcti rect; - + /* get menu region or area region */ ar = CTX_wm_menu(C); if (!ar) @@ -1314,23 +1314,23 @@ void UI_block_draw(const bContext *C, uiBlock *block) /* we set this only once */ glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - + /* scale fonts */ ui_fontscale(&style.paneltitle.points, block->aspect); ui_fontscale(&style.grouplabel.points, block->aspect); ui_fontscale(&style.widgetlabel.points, block->aspect); ui_fontscale(&style.widget.points, block->aspect); - + /* scale block min/max to rect */ ui_but_to_pixelrect(&rect, ar, block, NULL); - + /* pixel space for AA widgets */ gpuPushProjectionMatrix(); gpuPushMatrix(); gpuLoadIdentity(); wmOrtho2_region_pixelspace(ar); - + /* back */ if (block->flag & UI_BLOCK_RADIAL) ui_draw_pie_center(block); @@ -1349,7 +1349,7 @@ void UI_block_draw(const bContext *C, uiBlock *block) for (but = block->buttons.first; but; but = but->next) { if (!(but->flag & (UI_HIDDEN | UI_SCROLLED))) { ui_but_to_pixelrect(&rect, ar, block, but); - + /* XXX: figure out why invalid coordinates happen when closing render window */ /* and material preview is redrawn in main window (temp fix for bug #23848) */ if (rect.xmin < rect.xmax && rect.ymin < rect.ymax) @@ -1360,7 +1360,7 @@ void UI_block_draw(const bContext *C, uiBlock *block) UI_widgetbase_draw_cache_end(); UI_icon_draw_cache_end(); BLF_batch_draw_end(); - + /* restore matrix */ gpuPopProjectionMatrix(); gpuPopMatrix(); @@ -1680,10 +1680,10 @@ bool ui_but_is_float(const uiBut *but) { if (but->pointype == UI_BUT_POIN_FLOAT && but->poin) return true; - + if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_FLOAT) return true; - + return false; } @@ -1714,7 +1714,7 @@ bool ui_but_is_unit(const uiBut *but) if (ui_but_is_unit_radians_ex(unit, unit_type)) return false; #endif - + /* for now disable time unit conversion */ if (unit_type == PROP_UNIT_TIME) return false; @@ -1898,7 +1898,7 @@ void ui_but_value_set(uiBut *but, double value) if (fval >= -0.00001f && fval <= 0.00001f) fval = 0.0f; /* prevent negative zero */ value = fval; } - + /* then set value with possible edit override */ if (but->editval) value = *but->editval = value; @@ -2032,11 +2032,11 @@ void ui_but_convert_to_unit_alt_name(uiBut *but, char *str, size_t maxlen) UnitSettings *unit = but->block->unit; int unit_type = UI_but_unit_type_get(but); char *orig_str; - + orig_str = BLI_strdup(str); - + bUnit_ToUnitAltName(str, maxlen, orig_str, unit->system, RNA_SUBTYPE_UNIT_VALUE(unit_type)); - + MEM_freeN(orig_str); } } @@ -2692,7 +2692,7 @@ void UI_block_free(const bContext *C, uiBlock *block) BLI_freelistN(&block->saferct); BLI_freelistN(&block->color_pickers.list); - + MEM_freeN(block); } @@ -2721,7 +2721,7 @@ void UI_blocklist_draw(const bContext *C, const ListBase *lb) void UI_blocklist_free(const bContext *C, ListBase *lb) { uiBlock *block; - + while ((block = BLI_pophead(lb))) { UI_block_free(C, block); } @@ -2733,7 +2733,7 @@ void UI_blocklist_free_inactive(const bContext *C, ListBase *lb) for (block = lb->first; block; block = nextblock) { nextblock = block->next; - + if (!block->handle) { if (!block->active) { BLI_remlink(lb, block); @@ -2834,9 +2834,9 @@ void ui_but_update_ex(uiBut *but, const bool validate) /* if something changed in the button */ double value = UI_BUT_VALUE_UNSET; // float okwidth; // UNUSED - + ui_but_update_select_flag(but, &value); - + /* only update soft range while not editing */ if (!(but->editval || but->editstr || but->editvec)) { if ((but->rnaprop != NULL) || @@ -2865,7 +2865,7 @@ void ui_but_update_ex(uiBut *but, const bool validate) but->hardmin <= but->hardmax); } break; - + case UI_BTYPE_ICON_TOGGLE: case UI_BTYPE_ICON_TOGGLE_N: if (!but->rnaprop || (RNA_property_flag(but->rnaprop) & PROP_ICONS_CONSECUTIVE)) { @@ -2873,16 +2873,16 @@ void ui_but_update_ex(uiBut *but, const bool validate) else but->iconadd = 0; } break; - + /* quiet warnings for unhandled types */ default: break; } - - + + /* safety is 4 to enable small number buttons (like 'users') */ // okwidth = -4 + (BLI_rcti_size_x(&but->rect)); // UNUSED - + /* name: */ switch (but->type) { @@ -2970,7 +2970,7 @@ void ui_but_update_ex(uiBut *but, const bool validate) else { BLI_strncpy(but->drawstr, but->str, UI_MAX_DRAW_STR); } - + break; case UI_BTYPE_TEXT: @@ -2983,7 +2983,7 @@ void ui_but_update_ex(uiBut *but, const bool validate) BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%s", but->str, str); } break; - + case UI_BTYPE_KEY_EVENT: { const char *str; @@ -3030,13 +3030,13 @@ void ui_but_update_ex(uiBut *but, const bool validate) default: BLI_strncpy(but->drawstr, but->str, UI_MAX_DRAW_STR); break; - + } /* if we are doing text editing, this will override the drawstr */ if (but->editstr) but->drawstr[0] = '\0'; - + /* text clipping moved to widget drawing code itself */ } @@ -3129,7 +3129,7 @@ static uiBut *ui_def_but( int slen; BLI_assert(width >= 0 && height >= 0); - + /* we could do some more error checks here */ if ((type & BUTTYPE) == UI_BTYPE_LABEL) { BLI_assert((poin != NULL || min != 0.0f || max != 0.0f || (a1 == 0.0f && a2 != 0.0f) || (a1 != 0.0f && a1 != 1.0f)) == false); @@ -3184,7 +3184,7 @@ static uiBut *ui_def_but( but->funcN = block->funcN; if (block->func_argN) but->func_argN = MEM_dupallocN(block->func_argN); - + but->pos = -1; /* cursor invisible */ if (ELEM(but->type, UI_BTYPE_NUM, UI_BTYPE_NUM_SLIDER)) { /* add a space to name */ @@ -3237,7 +3237,7 @@ static uiBut *ui_def_but( } BLI_addtail(&block->buttons, but); - + if (block->curlayout) ui_layout_add_but(block->curlayout, but); @@ -3526,7 +3526,7 @@ static uiBut *ui_def_but_rna( if (icon) { ui_def_but_icon(but, icon, UI_HAS_ICON); } - + if ((type == UI_BTYPE_MENU) && (but->dt == UI_EMBOSS_PULLDOWN)) { but->flag |= UI_BUT_ICON_SUBMENU; } @@ -3603,7 +3603,7 @@ uiBut *uiDefBut(uiBlock *block, int type, int retval, const char *str, int x, in uiBut *but = ui_def_but(block, type, retval, str, x, y, width, height, poin, min, max, a1, a2, tip); ui_but_update(but); - + return but; } @@ -3645,7 +3645,7 @@ struct AutoComplete { AutoComplete *UI_autocomplete_begin(const char *startname, size_t maxlen) { AutoComplete *autocpl; - + autocpl = MEM_callocN(sizeof(AutoComplete), "AutoComplete"); autocpl->maxlen = maxlen; autocpl->matches = 0; @@ -3686,7 +3686,7 @@ void UI_autocomplete_update_name(AutoComplete *autocpl, const char *name) } int UI_autocomplete_end(AutoComplete *autocpl, char *autoname) -{ +{ int match = AUTOCOMPLETE_NO_MATCH; if (autocpl->truncate[0]) { if (autocpl->matches == 1) { @@ -3944,7 +3944,7 @@ uiBut *uiDefIconTextButO_ptr(uiBlock *block, int type, wmOperatorType *ot, int o uiBut *uiDefIconTextButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, const char *str, int x, int y, short width, short height, const char *tip) { wmOperatorType *ot = WM_operatortype_find(opname, 0); - if (str && str[0] == '\0') + if (str && str[0] == '\0') return uiDefIconButO_ptr(block, type, ot, opcontext, icon, x, y, width, height, tip); return uiDefIconTextButO_ptr(block, type, ot, opcontext, icon, str, x, y, width, height, tip); } @@ -3957,11 +3957,11 @@ int UI_blocklist_min_y_get(ListBase *lb) { uiBlock *block; int min = 0; - + for (block = lb->first; block; block = block->next) if (block == lb->first || block->rect.ymin < min) min = block->rect.ymin; - + return min; } @@ -3980,7 +3980,7 @@ void UI_block_order_flip(uiBlock *block) return; else if (block->flag & UI_BLOCK_NO_FLIP) return; - + for (but = block->buttons.first; but; but = but->next) { if (but->drawflag & UI_BUT_ALIGN) return; if (but->rect.ymin < miny) miny = but->rect.ymin; @@ -4129,8 +4129,8 @@ void UI_but_unit_type_set(uiBut *but, const int unit_type) int UI_but_unit_type_get(const uiBut *but) { int ownUnit = (int)but->unit_type; - - /* own unit define always takes precedence over RNA provided, allowing for overriding + + /* own unit define always takes precedence over RNA provided, allowing for overriding * default value provided in RNA in a few special cases (i.e. Active Keyframe in Graph Edit) */ /* XXX: this doesn't allow clearing unit completely, though the same could be said for icons */ @@ -4292,7 +4292,7 @@ uiBut *uiDefIconMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, int ic uiBut *uiDefIconTextBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, int icon, const char *str, int x, int y, short width, short height, const char *tip) { uiBut *but = ui_def_but(block, UI_BTYPE_BLOCK, 0, str, x, y, width, height, arg, 0.0, 0.0, 0.0, 0.0, tip); - + /* XXX temp, old menu calls pass on icon arrow, which is now UI_BUT_ICON_SUBMENU flag */ if (icon != ICON_RIGHTARROW_THIN) { ui_def_but_icon(but, icon, 0); @@ -4303,7 +4303,7 @@ uiBut *uiDefIconTextBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, but->block_create_func = func; ui_but_update(but); - + return but; } @@ -4311,14 +4311,14 @@ uiBut *uiDefIconTextBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, uiBut *uiDefIconBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, int retval, int icon, int x, int y, short width, short height, const char *tip) { uiBut *but = ui_def_but(block, UI_BTYPE_BLOCK, retval, "", x, y, width, height, arg, 0.0, 0.0, 0.0, 0.0, tip); - + ui_def_but_icon(but, icon, UI_HAS_ICON); but->drawflag |= UI_BUT_ICON_LEFT; - + but->block_create_func = func; ui_but_update(but); - + return but; } @@ -4345,13 +4345,13 @@ uiBut *uiDefHotKeyevtButS(uiBlock *block, int retval, const char *str, int x, in uiBut *uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxlen, int x, int y, short width, short height, float a1, float a2, const char *tip) { uiBut *but = ui_def_but(block, UI_BTYPE_SEARCH_MENU, retval, "", x, y, width, height, arg, 0.0, maxlen, a1, a2, tip); - + ui_def_but_icon(but, icon, UI_HAS_ICON); but->drawflag |= UI_BUT_ICON_LEFT | UI_BUT_TEXT_LEFT; - + ui_but_update(but); - + return but; } @@ -4375,7 +4375,7 @@ void UI_but_func_search_set( but->search_create_func = search_create_func; but->search_func = search_func; but->search_arg = arg; - + if (bfunc) { #ifdef DEBUG if (but->func) { @@ -4385,7 +4385,7 @@ void UI_but_func_search_set( #endif UI_but_func_set(but, bfunc, arg, active); } - + /* search buttons show red-alert if item doesn't exist, not for menus */ if (0 == (but->block->flag & UI_BLOCK_LOOP)) { /* skip empty buttons, not all buttons need input, we only show invalid */ @@ -4483,14 +4483,14 @@ uiBut *uiDefSearchButO_ptr( void UI_but_focus_on_enter_event(wmWindow *win, uiBut *but) { wmEvent event; - + wm_event_init_from_window(win, &event); event.type = EVT_BUT_OPEN; event.val = KM_PRESS; event.customdata = but; event.customdatafree = false; - + wm_event_add(win, &event); } @@ -4614,7 +4614,7 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...) PointerRNA *ptr = NULL; PropertyRNA *prop = NULL; int value = 0; - + /* get the enum property... */ if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_ENUM) { /* enum property */ @@ -4625,8 +4625,8 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...) else if (but->optype) { PointerRNA *opptr = UI_but_operator_ptr_get(but); wmOperatorType *ot = but->optype; - - /* if the default property of the operator is enum and it is set, + + /* if the default property of the operator is enum and it is set, * fetch the tooltip of the selected value so that "Snap" and "Mirror" * operator menus in the Anim Editors will show tooltips for the different * operations instead of the meaningless generic operator tooltip @@ -4639,7 +4639,7 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...) } } } - + /* get strings from matching enum item */ if (ptr && prop) { if (!item) { diff --git a/source/blender/editors/interface/interface_align.c b/source/blender/editors/interface/interface_align.c index 1fc38a27303..619dce1b9d9 100644 --- a/source/blender/editors/interface/interface_align.c +++ b/source/blender/editors/interface/interface_align.c @@ -524,7 +524,7 @@ static void ui_block_align_calc_but(uiBut *first, short nr) { uiBut *prev, *but = NULL, *next; int flag = 0, cols = 0, rows = 0; - + /* auto align */ for (but = first; but && but->alignnr == nr; but = but->next) { @@ -535,7 +535,7 @@ static void ui_block_align_calc_but(uiBut *first, short nr) } /* rows == 0: 1 row, cols == 0: 1 column */ - + /* note; how it uses 'flag' in loop below (either set it, or OR it) is confusing */ for (but = first, prev = NULL; but && but->alignnr == nr; prev = but, but = but->next) { next = but->next; @@ -544,13 +544,13 @@ static void ui_block_align_calc_but(uiBut *first, short nr) /* clear old flag */ but->drawflag &= ~UI_BUT_ALIGN; - + if (flag == 0) { /* first case */ if (next) { if (buts_are_horiz(but, next)) { if (rows == 0) flag = UI_BUT_ALIGN_RIGHT; - else + else flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_RIGHT; } else { @@ -597,14 +597,14 @@ static void ui_block_align_calc_but(uiBut *first, short nr) flag |= UI_BUT_ALIGN_TOP; } else { /* next button switches to new row */ - + if (prev && buts_are_horiz(prev, but)) flag |= UI_BUT_ALIGN_LEFT; else { flag &= ~UI_BUT_ALIGN_LEFT; flag |= UI_BUT_ALIGN_TOP; } - + if ((flag & UI_BUT_ALIGN_TOP) == 0) { /* still top row */ if (prev) { if (next && buts_are_horiz(but, next)) @@ -614,16 +614,16 @@ static void ui_block_align_calc_but(uiBut *first, short nr) flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_LEFT; } } - else + else flag |= UI_BUT_ALIGN_DOWN; } - else + else flag |= UI_BUT_ALIGN_TOP; } } - + but->drawflag |= flag; - + /* merge coordinates */ if (prev) { /* simple cases */ @@ -646,7 +646,7 @@ static void ui_block_align_calc_but(uiBut *first, short nr) /* the previous button is a single one in its row */ but->rect.ymax = (prev->rect.ymin + but->rect.ymax) / 2.0f; prev->rect.ymin = but->rect.ymax; - + but->rect.xmin = prev->rect.xmin; if (next && buts_are_horiz(but, next) == 0) but->rect.xmax = prev->rect.xmax; diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c index 95a0f8704fa..ea1b58107bd 100644 --- a/source/blender/editors/interface/interface_anim.c +++ b/source/blender/editors/interface/interface_anim.c @@ -73,26 +73,26 @@ void ui_but_anim_flag(uiBut *but, float cfra) FCurve *fcu; bool driven; bool special; - + but->flag &= ~(UI_BUT_ANIMATED | UI_BUT_ANIMATED_KEY | UI_BUT_DRIVEN); - + /* NOTE: "special" is reserved for special F-Curves stored on the animation data * itself (which are used to animate properties of the animation data). * We count those as "animated" too for now */ fcu = ui_but_get_fcurve(but, &adt, &act, &driven, &special); - + if (fcu) { if (!driven) { but->flag |= UI_BUT_ANIMATED; - - /* T41525 - When the active action is a NLA strip being edited, + + /* T41525 - When the active action is a NLA strip being edited, * we need to correct the frame number to "look inside" the * remapped action */ if (adt) cfra = BKE_nla_tweakedit_remap(adt, cfra, NLATIME_CONVERT_UNMAP); - + if (fcurve_frame_has_keyframe(fcu, cfra, 0)) but->flag |= UI_BUT_ANIMATED_KEY; } @@ -111,9 +111,9 @@ bool ui_but_anim_expression_get(uiBut *but, char *str, size_t maxlen) FCurve *fcu; ChannelDriver *driver; bool driven, special; - + fcu = ui_but_get_fcurve(but, NULL, NULL, &driven, &special); - + if (fcu && driven) { driver = fcu->driver; @@ -138,20 +138,20 @@ bool ui_but_anim_expression_set(uiBut *but, const char *str) if (fcu && driven) { driver = fcu->driver; - + if (driver && (driver->type == DRIVER_TYPE_PYTHON)) { BLI_strncpy_utf8(driver->expression, str, sizeof(driver->expression)); - + /* tag driver as needing to be recompiled */ driver->flag |= DRIVER_FLAG_RECOMPILE; - + /* clear invalid flags which may prevent this from working */ driver->flag &= ~DRIVER_FLAG_INVALID; fcu->flag &= ~FCURVE_DISABLED; - + /* this notifier should update the Graph Editor and trigger depsgraph refresh? */ WM_event_add_notifier(but->block->evil_C, NC_ANIMATION | ND_KEYFRAME, NULL); - + return true; } } @@ -167,14 +167,14 @@ bool ui_but_anim_expression_create(uiBut *but, const char *str) FCurve *fcu; char *path; bool ok = false; - + /* button must have RNA-pointer to a numeric-capable property */ if (ELEM(NULL, but->rnapoin.data, but->rnaprop)) { if (G.debug & G_DEBUG) printf("ERROR: create expression failed - button has no RNA info attached\n"); return false; } - + if (RNA_property_array_check(but->rnaprop) != 0) { if (but->rnaindex == -1) { if (G.debug & G_DEBUG) @@ -182,7 +182,7 @@ bool ui_but_anim_expression_create(uiBut *but, const char *str) return false; } } - + /* make sure we have animdata for this */ /* FIXME: until materials can be handled by depsgraph, don't allow drivers to be created for them */ id = (ID *)but->rnapoin.id.data; @@ -191,18 +191,18 @@ bool ui_but_anim_expression_create(uiBut *but, const char *str) printf("ERROR: create expression failed - invalid data-block for adding drivers (%p)\n", id); return false; } - + /* get path */ path = RNA_path_from_ID_to_property(&but->rnapoin, but->rnaprop); if (path == NULL) { return false; } - + /* create driver */ fcu = verify_driver_fcurve(id, path, but->rnaindex, 1); if (fcu) { ChannelDriver *driver = fcu->driver; - + if (driver) { /* set type of driver */ driver->type = DRIVER_TYPE_PYTHON; @@ -218,9 +218,9 @@ bool ui_but_anim_expression_create(uiBut *but, const char *str) ok = true; } } - + MEM_freeN(path); - + return ok; } @@ -233,17 +233,17 @@ void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra) bool special; fcu = ui_but_get_fcurve(but, NULL, &action, &driven, &special); - + if (fcu == NULL) return; - + if (special) { /* NLA Strip property */ if (IS_AUTOKEY_ON(scene)) { Depsgraph *depsgraph = CTX_data_depsgraph(C); ReportList *reports = CTX_wm_reports(C); ToolSettings *ts = scene->toolsettings; - + insert_keyframe_direct(depsgraph, reports, but->rnapoin, but->rnaprop, fcu, cfra, ts->keyframe_type, 0); WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); } @@ -256,23 +256,23 @@ void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra) Depsgraph *depsgraph = CTX_data_depsgraph(C); ReportList *reports = CTX_wm_reports(C); ToolSettings *ts = scene->toolsettings; - + insert_keyframe_direct(depsgraph, reports, but->rnapoin, but->rnaprop, fcu, cfra, ts->keyframe_type, INSERTKEY_DRIVER); WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); } } else { id = but->rnapoin.id.data; - + /* TODO: this should probably respect the keyingset only option for anim */ if (autokeyframe_cfra_can_key(scene, id)) { Depsgraph *depsgraph = CTX_data_depsgraph(C); ReportList *reports = CTX_wm_reports(C); ToolSettings *ts = scene->toolsettings; short flag = ANIM_get_keyframing_flags(scene, 1); - + fcu->flag &= ~FCURVE_SELECTED; - + /* Note: We use but->rnaindex instead of fcu->array_index, * because a button may control all items of an array at once. * E.g., color wheels (see T42567). */ @@ -280,7 +280,7 @@ void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra) insert_keyframe(depsgraph, reports, id, action, ((fcu->grp) ? (fcu->grp->name) : (NULL)), fcu->rna_path, but->rnaindex, cfra, ts->keyframe_type, flag); - + WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); } } diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c index ce22dac9e91..f093f47519c 100644 --- a/source/blender/editors/interface/interface_draw.c +++ b/source/blender/editors/interface/interface_draw.c @@ -184,7 +184,7 @@ void UI_draw_roundbox_4fv(bool filled, float minx, float miny, float maxx, float else { immVertex2f(pos, maxx, miny); } - + /* corner right-top */ if (roundboxtype & UI_CNR_TOP_RIGHT) { immVertex2f(pos, maxx, maxy - rad); @@ -196,7 +196,7 @@ void UI_draw_roundbox_4fv(bool filled, float minx, float miny, float maxx, float else { immVertex2f(pos, maxx, maxy); } - + /* corner left-top */ if (roundboxtype & UI_CNR_TOP_LEFT) { immVertex2f(pos, minx + rad, maxy); @@ -208,7 +208,7 @@ void UI_draw_roundbox_4fv(bool filled, float minx, float miny, float maxx, float else { immVertex2f(pos, minx, maxy); } - + /* corner left-bottom */ if (roundboxtype & UI_CNR_BOTTOM_LEFT) { immVertex2f(pos, minx, miny + rad); @@ -220,7 +220,7 @@ void UI_draw_roundbox_4fv(bool filled, float minx, float miny, float maxx, float else { immVertex2f(pos, minx, miny); } - + immEnd(); immUnbindProgram(); #endif @@ -302,15 +302,15 @@ void UI_draw_roundbox_shade_x( /* start with corner right-bottom */ if (roundboxtype & UI_CNR_BOTTOM_RIGHT) { - + round_box_shade_col(color, coltop, coldown, 0.0); immVertex2f(pos, maxx - rad, miny); - + for (a = 0; a < 7; a++) { round_box_shade_col(color, coltop, coldown, vec[a][1] * idiv); immVertex2f(pos, maxx - rad + vec[a][0], miny + vec[a][1]); } - + round_box_shade_col(color, coltop, coldown, rad * idiv); immVertex2f(pos, maxx, miny + rad); } @@ -318,13 +318,13 @@ void UI_draw_roundbox_shade_x( round_box_shade_col(color, coltop, coldown, 0.0); immVertex2f(pos, maxx, miny); } - + /* corner right-top */ if (roundboxtype & UI_CNR_TOP_RIGHT) { - + round_box_shade_col(color, coltop, coldown, (div - rad) * idiv); immVertex2f(pos, maxx, maxy - rad); - + for (a = 0; a < 7; a++) { round_box_shade_col(color, coltop, coldown, (div - rad + vec[a][1]) * idiv); immVertex2f(pos, maxx - vec[a][1], maxy - rad + vec[a][0]); @@ -336,18 +336,18 @@ void UI_draw_roundbox_shade_x( round_box_shade_col(color, coltop, coldown, 1.0); immVertex2f(pos, maxx, maxy); } - + /* corner left-top */ if (roundboxtype & UI_CNR_TOP_LEFT) { - + round_box_shade_col(color, coltop, coldown, 1.0); immVertex2f(pos, minx + rad, maxy); - + for (a = 0; a < 7; a++) { round_box_shade_col(color, coltop, coldown, (div - vec[a][1]) * idiv); immVertex2f(pos, minx + rad - vec[a][0], maxy - vec[a][1]); } - + round_box_shade_col(color, coltop, coldown, (div - rad) * idiv); immVertex2f(pos, minx, maxy - rad); } @@ -355,18 +355,18 @@ void UI_draw_roundbox_shade_x( round_box_shade_col(color, coltop, coldown, 1.0); immVertex2f(pos, minx, maxy); } - + /* corner left-bottom */ if (roundboxtype & UI_CNR_BOTTOM_LEFT) { - + round_box_shade_col(color, coltop, coldown, rad * idiv); immVertex2f(pos, minx, miny + rad); - + for (a = 0; a < 7; a++) { round_box_shade_col(color, coltop, coldown, (rad - vec[a][1]) * idiv); immVertex2f(pos, minx + vec[a][1], miny + rad - vec[a][0]); } - + round_box_shade_col(color, coltop, coldown, 0.0); immVertex2f(pos, minx + rad, miny); } @@ -418,7 +418,7 @@ void UI_draw_roundbox_shade_y( float colLeft[3], colRight[3]; int vert_count = 0; int a; - + /* mult */ for (a = 0; a < 7; a++) { mul_v2_fl(vec[a], rad); @@ -450,12 +450,12 @@ void UI_draw_roundbox_shade_y( if (roundboxtype & UI_CNR_BOTTOM_RIGHT) { round_box_shade_col(color, colLeft, colRight, 0.0); immVertex2f(pos, maxx - rad, miny); - + for (a = 0; a < 7; a++) { round_box_shade_col(color, colLeft, colRight, vec[a][0] * idiv); immVertex2f(pos, maxx - rad + vec[a][0], miny + vec[a][1]); } - + round_box_shade_col(color, colLeft, colRight, rad * idiv); immVertex2f(pos, maxx, miny + rad); } @@ -463,14 +463,14 @@ void UI_draw_roundbox_shade_y( round_box_shade_col(color, colLeft, colRight, 0.0); immVertex2f(pos, maxx, miny); } - + /* corner right-top */ if (roundboxtype & UI_CNR_TOP_RIGHT) { round_box_shade_col(color, colLeft, colRight, 0.0); immVertex2f(pos, maxx, maxy - rad); - + for (a = 0; a < 7; a++) { - + round_box_shade_col(color, colLeft, colRight, (div - rad - vec[a][0]) * idiv); immVertex2f(pos, maxx - vec[a][1], maxy - rad + vec[a][0]); } @@ -481,17 +481,17 @@ void UI_draw_roundbox_shade_y( round_box_shade_col(color, colLeft, colRight, 0.0); immVertex2f(pos, maxx, maxy); } - + /* corner left-top */ if (roundboxtype & UI_CNR_TOP_LEFT) { round_box_shade_col(color, colLeft, colRight, (div - rad) * idiv); immVertex2f(pos, minx + rad, maxy); - + for (a = 0; a < 7; a++) { round_box_shade_col(color, colLeft, colRight, (div - rad + vec[a][0]) * idiv); immVertex2f(pos, minx + rad - vec[a][0], maxy - vec[a][1]); } - + round_box_shade_col(color, colLeft, colRight, 1.0); immVertex2f(pos, minx, maxy - rad); } @@ -499,17 +499,17 @@ void UI_draw_roundbox_shade_y( round_box_shade_col(color, colLeft, colRight, 1.0); immVertex2f(pos, minx, maxy); } - + /* corner left-bottom */ if (roundboxtype & UI_CNR_BOTTOM_LEFT) { round_box_shade_col(color, colLeft, colRight, 1.0); immVertex2f(pos, minx, miny + rad); - + for (a = 0; a < 7; a++) { round_box_shade_col(color, colLeft, colRight, (vec[a][0]) * idiv); immVertex2f(pos, minx + vec[a][1], miny + rad - vec[a][0]); } - + round_box_shade_col(color, colLeft, colRight, 1.0); immVertex2f(pos, minx + rad, miny); } @@ -638,10 +638,10 @@ void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSED(w float facx = 1.0f; float facy = 1.0f; - + int w = BLI_rcti_size_x(rect); int h = BLI_rcti_size_y(rect); - + /* scissor doesn't seem to be doing the right thing...? */ #if 0 /* prevent drawing outside widget area */ @@ -649,9 +649,9 @@ void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSED(w glGetIntegerv(GL_SCISSOR_BOX, scissor); glScissor(rect->xmin, rect->ymin, w, h); #endif - + glEnable(GL_BLEND); - + if (w != ibuf->x || h != ibuf->y) { facx = (float)w / (float)ibuf->x; facy = (float)h / (float)ibuf->y; @@ -660,14 +660,14 @@ void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSED(w IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR); immDrawPixelsTex(&state, (float)rect->xmin, (float)rect->ymin, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, ibuf->rect, facx, facy, NULL); - + glDisable(GL_BLEND); - + #if 0 // restore scissortest glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); #endif - + #endif } @@ -788,10 +788,10 @@ void ui_draw_but_HISTOGRAM(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUS .ymin = (float)recti->ymin + 1, .ymax = (float)recti->ymax - 1 }; - + float w = BLI_rctf_size_x(&rect); float h = BLI_rctf_size_y(&rect) * hist->ymax; - + glEnable(GL_BLEND); glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); @@ -850,7 +850,7 @@ void ui_draw_but_HISTOGRAM(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUS } immUnbindProgram(); - + /* outline */ draw_scope_end(&rect, scissor); } @@ -884,9 +884,9 @@ void ui_draw_but_WAVEFORM(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSE float colorsycc[3][3] = {{1, 0, 1}, {1, 1, 0}, {0, 1, 1}}; float colors_alpha[3][3], colorsycc_alpha[3][3]; /* colors pre multiplied by alpha for speed up */ float min, max; - + if (scopes == NULL) return; - + rctf rect = { .xmin = (float)recti->xmin + 1, .xmax = (float)recti->xmax - 1, @@ -900,10 +900,10 @@ void ui_draw_but_WAVEFORM(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSE float h = BLI_rctf_size_y(&rect) * scopes->wavefrm_yfac; float yofs = rect.ymin + (BLI_rctf_size_y(&rect) - h) * 0.5f; float w3 = w / 3.0f; - + /* log scale for alpha */ float alpha = scopes->wavefrm_alpha * scopes->wavefrm_alpha; - + unit_m3(colors); for (int c = 0; c < 3; c++) { @@ -974,7 +974,7 @@ void ui_draw_but_WAVEFORM(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSE immEnd(); } - + /* separate min max zone on the right */ immBegin(GWN_PRIM_LINES, 2); immVertex2f(pos, rect.xmin + w, rect.ymin); @@ -1171,20 +1171,20 @@ void ui_draw_but_VECTORSCOPE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UN const float colors[6][3] = { {0.75, 0.0, 0.0}, {0.75, 0.75, 0.0}, {0.0, 0.75, 0.0}, {0.0, 0.75, 0.75}, {0.0, 0.0, 0.75}, {0.75, 0.0, 0.75}}; - + rctf rect = { .xmin = (float)recti->xmin + 1, .xmax = (float)recti->xmax - 1, .ymin = (float)recti->ymin + 1, .ymax = (float)recti->ymax - 1 }; - + float w = BLI_rctf_size_x(&rect); float h = BLI_rctf_size_y(&rect); float centerx = rect.xmin + w * 0.5f; float centery = rect.ymin + h * 0.5f; float diam = (w < h) ? w : h; - + float alpha = scopes->vecscope_alpha * scopes->vecscope_alpha * scopes->vecscope_alpha; glEnable(GL_BLEND); @@ -1202,7 +1202,7 @@ void ui_draw_but_VECTORSCOPE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UN (rect.ymin - 1), (rect.xmax + 1) - (rect.xmin - 1), (rect.ymax + 1) - (rect.ymin - 1)); - + Gwn_VertFormat *format = immVertexFormat(); unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT); @@ -1243,7 +1243,7 @@ void ui_draw_but_VECTORSCOPE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UN /* saturation points */ for (int i = 0; i < 6; i++) vectorscope_draw_target(pos, centerx, centery, diam, colors[i]); - + if (scopes->ok && scopes->vecscope != NULL) { /* pixel point cloud */ float col[3] = {alpha, alpha, alpha}; @@ -1434,16 +1434,16 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti v1[1] = y1 + sizey_solid; v2[1] = rect->ymax; - + immBegin(GWN_PRIM_TRI_STRIP, (sizex + 1) * 2); for (int a = 0; a <= sizex; a++) { float pos = ((float)a) / sizex; BKE_colorband_evaluate(coba, pos, colf); if (display) IMB_colormanagement_scene_linear_to_display_v3(colf, display); - + v1[0] = v2[0] = x1 + a; - + immAttrib4fv(color, colf); immVertex2fv(position, v1); immVertex2fv(position, v2); @@ -1499,7 +1499,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti immEnd(); glDisable(GL_BLEND); - + /* layer: draw handles */ for (int a = 0; a < coba->tot; a++, cbd++) { if (a != coba->cur) { @@ -1524,20 +1524,20 @@ void ui_draw_but_UNITVEC(uiBut *but, uiWidgetColors *wcol, const rcti *rect) float diffuse[3] = {1.0f, 1.0f, 1.0f}; float light[3]; float size; - + /* backdrop */ UI_draw_roundbox_corner_set(UI_CNR_ALL); UI_draw_roundbox_3ubAlpha(true, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f, (unsigned char *)wcol->inner, 255); - + glCullFace(GL_BACK); glEnable(GL_CULL_FACE); - + /* setup lights */ ui_but_v3_get(but, light); /* transform to button */ gpuPushMatrix(); - + if (BLI_rcti_size_x(rect) < BLI_rcti_size_y(rect)) size = 0.5f * BLI_rcti_size_x(rect); else @@ -1554,7 +1554,7 @@ void ui_draw_but_UNITVEC(uiBut *but, uiWidgetColors *wcol, const rcti *rect) /* restore */ glDisable(GL_CULL_FACE); - + /* AA circle */ Gwn_VertFormat *format = immVertexFormat(); unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT); @@ -1578,7 +1578,7 @@ static void ui_draw_but_curve_grid(unsigned int pos, const rcti *rect, float zoo float dx = step * zoomx; float fx = rect->xmin + zoomx * (-offsx); if (fx > rect->xmin) fx -= dx * (floorf(fx - rect->xmin)); - + float dy = step * zoomy; float fy = rect->ymin + zoomy * (-offsy); if (fy > rect->ymin) fy -= dy * (floorf(fy - rect->ymin)); @@ -1598,7 +1598,7 @@ static void ui_draw_but_curve_grid(unsigned int pos, const rcti *rect, float zoo fy += dy; } immEnd(); - + } static void gl_shaded_color(unsigned char *col, int shade) @@ -1732,7 +1732,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti else if (cumap->cur == 3) { float lum = IMB_colormanagement_get_luminance(cumap->sample); immUniformColor3ub(240, 240, 240); - + immVertex2f(pos, rect->xmin + zoomx * (lum - offsx), rect->ymin); immVertex2f(pos, rect->xmin + zoomx * (lum - offsx), rect->ymax); } @@ -1743,7 +1743,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti immUniformColor3ub(100, 240, 100); else immUniformColor3ub(100, 100, 240); - + immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymin); immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymax); } @@ -1755,7 +1755,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); immBegin(GWN_PRIM_LINE_STRIP, (CM_TABLE + 1) + 2); - + if (cuma->table == NULL) curvemapping_changed(cumap, false); @@ -1811,7 +1811,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti } immEnd(); immUnbindProgram(); - + /* restore scissortest */ glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); @@ -1959,7 +1959,7 @@ void ui_draw_but_TRACKPREVIEW(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *U void ui_draw_but_NODESOCKET(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti *recti) { static const float size = 5.0f; - + /* 16 values of sin function */ const float si[16] = { 0.00000000f, 0.39435585f, 0.72479278f, 0.93775213f, @@ -1974,12 +1974,12 @@ void ui_draw_but_NODESOCKET(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol -0.99486932f, -0.87434661f, -0.61210598f, -0.25065253f, 0.15142777f, 0.52896401f, 0.82076344f, 0.97952994f, }; - + GLint scissor[4]; - + /* need scissor test, can draw outside of boundary */ glGetIntegerv(GL_SCISSOR_BOX, scissor); - + rcti scissor_new = { .xmin = recti->xmin, .ymin = recti->ymin, @@ -1994,7 +1994,7 @@ void ui_draw_but_NODESOCKET(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol scissor_new.ymin, BLI_rcti_size_x(&scissor_new), BLI_rcti_size_y(&scissor_new)); - + float x = 0.5f * (recti->xmin + recti->xmax); float y = 0.5f * (recti->ymin + recti->ymax); @@ -2008,7 +2008,7 @@ void ui_draw_but_NODESOCKET(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol for (int a = 0; a < 16; a++) immVertex2f(pos, x + size * si[a], y + size * co[a]); immEnd(); - + immUniformColor4ub(0, 0, 0, 150); glLineWidth(1); glEnable(GL_LINE_SMOOTH); @@ -2020,7 +2020,7 @@ void ui_draw_but_NODESOCKET(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol glDisable(GL_BLEND); immUnbindProgram(); - + /* restore scissortest */ glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); } @@ -2107,7 +2107,7 @@ void UI_draw_box_shadow(unsigned char alpha, float minx, float miny, float maxx, ui_shadowbox(pos, color, minx, miny, maxx, maxy, 11.0, (20 * alpha) >> 8); ui_shadowbox(pos, color, minx, miny, maxx, maxy, 7.0, (40 * alpha) >> 8); ui_shadowbox(pos, color, minx, miny, maxx, maxy, 5.0, (80 * alpha) >> 8); - + immEnd(); immUnbindProgram(); @@ -2119,7 +2119,7 @@ void UI_draw_box_shadow(unsigned char alpha, float minx, float miny, float maxx, void ui_draw_dropshadow(const rctf *rct, float radius, float aspect, float alpha, int UNUSED(select)) { float rad; - + if (radius > (BLI_rctf_size_y(rct) - 10.0f) * 0.5f) rad = (BLI_rctf_size_y(rct) - 10.0f) * 0.5f; else @@ -2135,7 +2135,7 @@ void ui_draw_dropshadow(const rctf *rct, float radius, float aspect, float alpha { a = i * aspect; } - + glEnable(GL_BLEND); const float dalpha = alpha * 2.0f / 255.0f; float calpha = dalpha; @@ -2151,7 +2151,7 @@ void ui_draw_dropshadow(const rctf *rct, float radius, float aspect, float alpha visibility = visibility * (1.0f - calpha); calpha += dalpha; } - + uiWidgetBaseParameters widget_params = { .recti.xmin = rct->xmin, .recti.ymin = rct->ymin, .recti.xmax = rct->xmax, .recti.ymax = rct->ymax - 10.0f, @@ -2177,6 +2177,6 @@ void ui_draw_dropshadow(const rctf *rct, float radius, float aspect, float alpha float color[4] = {0.0f, 0.0f, 0.0f, 0.4f}; UI_draw_roundbox_4fv(false, rct->xmin - 0.5f, rct->ymin - 0.5f, rct->xmax + 0.5f, rct->ymax + 0.5f, radius + 0.5f, color); glDisable(GL_LINE_SMOOTH); - + glDisable(GL_BLEND); } diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 6332d006dbb..d597fde767f 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +17,7 @@ * * The Original Code is Copyright (C) 2008 Blender Foundation. * All rights reserved. - * + * * Contributor(s): Blender Foundation * * ***** END GPL LICENSE BLOCK ***** @@ -296,7 +296,7 @@ typedef struct uiHandleButtonData { /* tooltip */ unsigned int tooltip_force : 1; - + /* auto open */ bool used_mouse; wmTimer *autoopentimer; @@ -338,7 +338,7 @@ typedef struct uiHandleButtonData { /* menu open (watch UI_screen_free_active_but) */ uiPopupBlockHandle *menu; int menuretval; - + /* search box (watch UI_screen_free_active_but) */ ARegion *searchbox; #ifdef USE_KEYNAV_LIMIT @@ -365,14 +365,14 @@ typedef struct uiAfterFunc { uiButHandleFunc func; void *func_arg1; void *func_arg2; - + uiButHandleNFunc funcN; void *func_argN; uiButHandleRenameFunc rename_func; void *rename_arg1; void *rename_orig; - + uiBlockHandleFunc handle_func; void *handle_func_arg; int retval; @@ -459,18 +459,18 @@ void ui_pan_to_scroll(const wmEvent *event, int *type, int *val) } else { lastdy += dy; - + if (ABS(lastdy) > (int)UI_UNIT_Y) { if (U.uiflag2 & USER_TRACKPAD_NATURAL) dy = -dy; - + *val = KM_PRESS; - + if (dy > 0) *type = WHEELUPMOUSE; else *type = WHEELDOWNMOUSE; - + lastdy = 0; } } @@ -537,7 +537,7 @@ static uiBut *ui_but_next(uiBut *but) static uiBut *ui_but_first(uiBlock *block) { uiBut *but; - + but = block->buttons.first; while (but) { if (ui_but_is_editable(but)) return but; @@ -549,7 +549,7 @@ static uiBut *ui_but_first(uiBlock *block) static uiBut *ui_but_last(uiBlock *block) { uiBut *but; - + but = block->buttons.last; while (but) { if (ui_but_is_editable(but)) return but; @@ -606,7 +606,7 @@ static void ui_mouse_scale_warp( float *r_mx, float *r_my, const bool shift) { const float fac = ui_mouse_scale_warp_factor(shift); - + /* slow down the mouse, this is fairly picky */ *r_mx = (data->dragstartx * (1.0f - fac) + mx * fac); *r_my = (data->dragstarty * (1.0f - fac) + my * fac); @@ -717,7 +717,7 @@ static void ui_apply_but_func(bContext *C, uiBut *but) after->butm_func_arg = block->butm_func_arg; after->a2 = but->a2; } - + if (block->handle) after->popup_op = block->handle->popup_op; @@ -832,17 +832,17 @@ static void ui_apply_but_funcs_after(bContext *C) after.funcN(C, after.func_argN, after.func_arg2); if (after.func_argN) MEM_freeN(after.func_argN); - + if (after.handle_func) after.handle_func(C, after.handle_func_arg, after.retval); if (after.butm_func) after.butm_func(C, after.butm_func_arg, after.a2); - + if (after.rename_func) after.rename_func(C, after.rename_arg1, after.rename_orig); if (after.rename_orig) MEM_freeN(after.rename_orig); - + if (after.undostr[0]) ED_undo_push(C, after.undostr); } @@ -880,32 +880,32 @@ static void ui_apply_but_TOG(bContext *C, uiBut *but, uiHandleButtonData *data) { double value; int w, lvalue, push; - + value = ui_but_value_get(but); lvalue = (int)value; - + if (but->bit) { w = UI_BITBUT_TEST(lvalue, but->bitnr); if (w) lvalue = UI_BITBUT_CLR(lvalue, but->bitnr); else lvalue = UI_BITBUT_SET(lvalue, but->bitnr); - + ui_but_value_set(but, (double)lvalue); if (but->type == UI_BTYPE_ICON_TOGGLE || but->type == UI_BTYPE_ICON_TOGGLE_N) { ui_but_update_edited(but); } } else { - + if (value == 0.0) push = 1; else push = 0; - + if (ELEM(but->type, UI_BTYPE_TOGGLE_N, UI_BTYPE_ICON_TOGGLE_N, UI_BTYPE_CHECKBOX_N)) push = !push; ui_but_value_set(but, (double)push); if (but->type == UI_BTYPE_ICON_TOGGLE || but->type == UI_BTYPE_ICON_TOGGLE_N) { ui_but_update_edited(but); } } - + ui_apply_but_func(C, but); data->retval = but->retval; @@ -1705,11 +1705,11 @@ static bool ui_but_contains_point_px_icon(uiBut *but, ARegion *ar, const wmEvent { rcti rect; int x = event->x, y = event->y; - + ui_window_to_block(ar, but->block, &x, &y); - + BLI_rcti_rctf_copy(&rect, &but->rect); - + if (but->imb || but->type == UI_BTYPE_COLOR) { /* use button size itself */ } @@ -1721,7 +1721,7 @@ static bool ui_but_contains_point_px_icon(uiBut *but, ARegion *ar, const wmEvent rect.xmin += delta / 2; rect.xmax -= delta / 2; } - + return BLI_rcti_isect_pt(&rect, x, y); } @@ -1812,7 +1812,7 @@ static bool ui_but_drag_init( } return true; } - + return false; } @@ -2028,13 +2028,13 @@ static void ui_but_drop(bContext *C, const wmEvent *event, uiBut *but, uiHandleB { wmDrag *wmd; ListBase *drags = event->customdata; /* drop event type has listbase customdata by default */ - + for (wmd = drags->first; wmd; wmd = wmd->next) { if (wmd->type == WM_DRAG_ID) { /* align these types with UI_but_active_drop_name */ if (ELEM(but->type, UI_BTYPE_TEXT, UI_BTYPE_SEARCH_MENU)) { ID *id = (ID *)wmd->poin; - + button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING); ui_textedit_string_set(but, data, id->name + 2); @@ -2048,7 +2048,7 @@ static void ui_but_drop(bContext *C, const wmEvent *event, uiBut *but, uiHandleB } } } - + } /* ******************* copy and paste ******************** */ @@ -2086,7 +2086,7 @@ static void ui_but_copy_paste(bContext *C, uiBut *but, uiHandleButtonData *data, /* numeric value */ if (ELEM(but->type, UI_BTYPE_NUM, UI_BTYPE_NUM_SLIDER)) { - + if (but->poin == NULL && but->rnapoin.data == NULL) { /* pass */ } @@ -2189,7 +2189,7 @@ static void ui_but_copy_paste(bContext *C, uiBut *but, uiHandleButtonData *data, /* RGB triple */ else if (but->type == UI_BTYPE_COLOR) { float rgba[4]; - + if (but->poin == NULL && but->rnapoin.data == NULL) { /* pass */ } @@ -2200,7 +2200,7 @@ static void ui_but_copy_paste(bContext *C, uiBut *but, uiHandleButtonData *data, rgba[3] = RNA_property_float_get_index(&but->rnapoin, but->rnaprop, 3); else rgba[3] = 1.0f; - + ui_but_v3_get(but, rgba); /* convert to linear color to do compatible copy between gamma and non-gamma */ if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA) @@ -2208,7 +2208,7 @@ static void ui_but_copy_paste(bContext *C, uiBut *but, uiHandleButtonData *data, BLI_snprintf(buf_copy, sizeof(buf_copy), "[%f, %f, %f, %f]", rgba[0], rgba[1], rgba[2], rgba[3]); WM_clipboard_text_set(buf_copy, 0); - + } else { if (sscanf(buf_paste, "[%f, %f, %f, %f]", &rgba[0], &rgba[1], &rgba[2], &rgba[3]) == 4) { @@ -2350,7 +2350,7 @@ static int ui_text_position_from_hidden(uiBut *but, int pos) for (i = 0, strpos = butstr; i < pos; i++) strpos = BLI_str_find_next_char_utf8(strpos, NULL); - + return (strpos - butstr); } @@ -2448,7 +2448,7 @@ static bool ui_textedit_delete_selection(uiBut *but, uiHandleButtonData *data) memmove(str + but->selsta, str + but->selend, (len - but->selend) + 1); changed = true; } - + but->pos = but->selend = but->selsta; return changed; } @@ -2479,7 +2479,7 @@ static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, con if (fstyle->kerning == 1) /* for BLF_width */ BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT); - + ui_but_text_password_hide(password_str, but, false); if (ELEM(but->type, UI_BTYPE_TEXT, UI_BTYPE_SEARCH_MENU)) { @@ -2489,13 +2489,13 @@ static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, con } /* but this extra .05 makes clicks inbetween characters feel nicer */ startx += ((UI_TEXT_MARGIN_X + 0.05f) * U.widget_unit) / aspect; - + /* mouse dragged outside the widget to the left */ if (x < startx) { int i = but->ofs; str_last = &str[but->ofs]; - + while (i > 0) { if (BLI_str_cursor_step_prev_utf8(str, but->ofs, &i)) { /* 0.25 == scale factor for less sensitivity */ @@ -2517,7 +2517,7 @@ static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, con /* keep track of previous distance from the cursor to the char */ float cdist, cdist_prev = 0.0f; short pos_prev; - + str_last = &str[strlen(str)]; but->pos = pos_prev = ((str_last - str) - but->ofs); @@ -2550,10 +2550,10 @@ static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, con but->pos += but->ofs; if (but->pos < 0) but->pos = 0; } - + if (fstyle->kerning == 1) BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT); - + ui_but_text_password_hide(password_str, but, true); fstyle->points = fstyle_points_prev; @@ -2789,7 +2789,7 @@ static bool ui_textedit_copypaste(uiBut *but, uiHandleButtonData *data, const in char *pbuf; bool changed = false; int buf_len; - + /* paste */ if (mode == UI_TEXTEDIT_PASTE) { /* extract the first line from the clipboard */ @@ -2816,7 +2816,7 @@ static bool ui_textedit_copypaste(uiBut *but, uiHandleButtonData *data, const in BLI_strncpy(buf, data->str + but->selsta, sellen + 1); WM_clipboard_text_set(buf, 0); MEM_freeN(buf); - + /* for cut only, delete the selection afterwards */ if (mode == UI_TEXTEDIT_CUT) { if ((but->selend - but->selsta) > 0) { @@ -2972,7 +2972,7 @@ static void ui_textedit_end(bContext *C, uiBut *but, uiHandleButtonData *data) printf("%s: invalid utf8 - stripped chars %d\n", __func__, strip); } } - + if (data->searchbox) { if (data->cancel == false) { if ((ui_searchbox_apply(but, data->searchbox) == false) && @@ -2991,11 +2991,11 @@ static void ui_textedit_end(bContext *C, uiBut *but, uiHandleButtonData *data) MEM_SAFE_FREE(but->search_arg); } } - + but->editstr = NULL; but->pos = -1; } - + WM_cursor_modal_restore(win); #ifdef WITH_INPUT_IME @@ -3092,7 +3092,7 @@ static void ui_do_but_textedit( ui_searchbox_event(C, data->searchbox, but, event); #endif } - + break; case RIGHTMOUSE: case ESCKEY: @@ -3112,7 +3112,7 @@ static void ui_do_but_textedit( case LEFTMOUSE: { bool had_selection = but->selsta != but->selend; - + /* exit on LMB only on RELEASE for searchbox, to mimic other popups, and allow multiple menu levels */ if (data->searchbox) inbox = ui_searchbox_inside(data->searchbox, event->x, event->y); @@ -3142,7 +3142,7 @@ static void ui_do_but_textedit( retval = WM_UI_HANDLER_BREAK; } } - + /* only select a word in button if there was no selection before */ if (event->val == KM_DBL_CLICK && had_selection == false) { ui_textedit_move(but, data, STRCUR_DIR_PREV, false, STRCUR_JUMP_DELIM); @@ -3239,7 +3239,7 @@ static void ui_do_but_textedit( event->ctrl ? STRCUR_JUMP_DELIM : STRCUR_JUMP_NONE); retval = WM_UI_HANDLER_BREAK; break; - + case AKEY: /* Ctrl + A: Select all */ @@ -3317,7 +3317,7 @@ static void ui_do_but_textedit( } retval = WM_UI_HANDLER_BREAK; - + } /* textbutton with this flag: do live update (e.g. for search buttons) */ if (but->flag & UI_BUT_TEXTEDIT_UPDATE) { @@ -3353,7 +3353,7 @@ static void ui_do_but_textedit( ui_but_update_edited(but); } but->changed = true; - + if (data->searchbox) ui_searchbox_update(C, data->searchbox, but, true); /* true = reset */ } @@ -3550,7 +3550,7 @@ int ui_but_menu_direction(uiBut *but) if (data && data->menu) return data->menu->direction; - + return 0; } @@ -3642,7 +3642,7 @@ static int ui_do_but_HOTKEYEVT( return WM_UI_HANDLER_BREAK; } } - + /* always set */ but->modifier_key = 0; if (event->shift) but->modifier_key |= KM_SHIFT; @@ -3652,15 +3652,15 @@ static int ui_do_but_HOTKEYEVT( ui_but_update(but); ED_region_tag_redraw(data->region); - + if (event->val == KM_PRESS) { if (ISHOTKEY(event->type)) { - + if (WM_key_event_string(event->type, false)[0]) ui_but_value_set(but, event->type); else data->cancel = true; - + button_activate_state(C, but, BUTTON_STATE_EXIT); return WM_UI_HANDLER_BREAK; } @@ -3671,10 +3671,10 @@ static int ui_do_but_HOTKEYEVT( button_activate_state(C, but, BUTTON_STATE_EXIT); } } - + } } - + return WM_UI_HANDLER_CONTINUE; } @@ -3899,13 +3899,13 @@ static int ui_do_but_EXIT( bContext *C, uiBut *but, uiHandleButtonData *data, const wmEvent *event) { - + if (data->state == BUTTON_STATE_HIGHLIGHT) { /* first handle click on icondrag type button */ if (event->type == LEFTMOUSE && but->dragpoin) { if (ui_but_contains_point_px_icon(but, data->region, event)) { - + /* tell the button to wait and keep checking further events to * see if it should start dragging */ button_activate_state(C, but, BUTTON_STATE_WAIT_DRAG); @@ -3934,25 +3934,25 @@ static int ui_do_but_EXIT( } } else if (data->state == BUTTON_STATE_WAIT_DRAG) { - + /* this function also ends state */ if (ui_but_drag_init(C, but, data, event)) { return WM_UI_HANDLER_BREAK; } - - /* If the mouse has been pressed and released, getting to - * this point without triggering a drag, then clear the + + /* If the mouse has been pressed and released, getting to + * this point without triggering a drag, then clear the * drag state for this button and continue to pass on the event */ if (event->type == LEFTMOUSE && event->val == KM_RELEASE) { button_activate_state(C, but, BUTTON_STATE_EXIT); return WM_UI_HANDLER_CONTINUE; } - - /* while waiting for a drag to be triggered, always block + + /* while waiting for a drag to be triggered, always block * other events from getting handled */ return WM_UI_HANDLER_BREAK; } - + return WM_UI_HANDLER_CONTINUE; } @@ -3966,7 +3966,7 @@ static float ui_numedit_apply_snapf( } else { float fac = 1.0f; - + if (ui_but_is_unit(but)) { UnitSettings *unit = but->block->unit; int unit_type = RNA_SUBTYPE_UNIT_VALUE(UI_but_unit_type_get(but)); @@ -4014,7 +4014,7 @@ static float ui_numedit_apply_snapf( else { BLI_assert(0); } - + if (fac != 1.0f) tempf *= fac; } @@ -4159,7 +4159,7 @@ static bool ui_numedit_but_NUM( } data->dragf += (((float)(mx - data->draglastx)) / deler) * non_linear_scale; - + CLAMP(data->dragf, 0.0f, 1.0f); data->draglastx = mx; tempf = (softmin + data->dragf * softrange); @@ -4172,7 +4172,7 @@ static bool ui_numedit_but_NUM( CLAMP(temp, softmin, softmax); lvalue = (int)data->value; - + if (temp != lvalue) { data->dragchange = true; data->value = (double)temp; @@ -4262,11 +4262,11 @@ static int ui_do_but_NUM( if (data->state == BUTTON_STATE_HIGHLIGHT) { int type = event->type, val = event->val; - + if (type == MOUSEPAN) { ui_pan_to_scroll(event, &type, &val); } - + /* XXX hardcoded keymap check.... */ if (type == MOUSEPAN && event->alt) retval = WM_UI_HANDLER_BREAK; /* allow accumulating values, otherwise scrolling gets preference */ @@ -4302,7 +4302,7 @@ static int ui_do_but_NUM( copy_v2_v2_int(data->multi_data.drag_start, &event->x); #endif } - + } else if (data->state == BUTTON_STATE_NUM_EDITING) { if (event->type == ESCKEY || event->type == RIGHTMOUSE) { @@ -4363,7 +4363,7 @@ static int ui_do_but_NUM( ui_do_but_textedit_select(C, block, but, data, event); retval = WM_UI_HANDLER_BREAK; } - + if (click) { /* we can click on the side arrows to increment/decrement, * or click inside to edit the value directly */ @@ -4426,7 +4426,7 @@ static int ui_do_but_NUM( retval = WM_UI_HANDLER_BREAK; } - + data->draglastx = mx; data->draglasty = my; @@ -4675,13 +4675,13 @@ static int ui_do_but_SLI( /* nudge slider to the left or right */ float f, tempf, softmin, softmax, softrange; int temp; - + button_activate_state(C, but, BUTTON_STATE_NUM_EDITING); - + softmin = but->softmin; softmax = but->softmax; softrange = softmax - softmin; - + tempf = data->value; temp = (int)data->value; @@ -4694,13 +4694,13 @@ static int ui_do_but_SLI( { f = (float)(mx - but->rect.xmin) / (BLI_rctf_size_x(&but->rect)); } - + f = softmin + f * softrange; - + if (!ui_but_is_float(but)) { if (f < temp) temp--; else temp++; - + if (temp >= softmin && temp <= softmax) data->value = temp; else @@ -4709,13 +4709,13 @@ static int ui_do_but_SLI( else { if (f < tempf) tempf -= 0.01f; else tempf += 0.01f; - + if (tempf >= softmin && tempf <= softmax) data->value = tempf; else data->cancel = true; } - + button_activate_state(C, but, BUTTON_STATE_EXIT); retval = WM_UI_HANDLER_BREAK; } @@ -4728,7 +4728,7 @@ static int ui_do_but_SLI( data->draglastx = mx; data->draglasty = my; - + return retval; } @@ -4739,7 +4739,7 @@ static int ui_do_but_SCROLL( int mx, my /*, click = 0 */; int retval = WM_UI_HANDLER_CONTINUE; bool horizontal = (BLI_rctf_size_x(&but->rect) > BLI_rctf_size_y(&but->rect)); - + mx = event->x; my = event->y; ui_window_to_block(data->region, block, &mx, &my); @@ -4785,7 +4785,7 @@ static int ui_do_but_SCROLL( retval = WM_UI_HANDLER_BREAK; } - + return retval; } @@ -4868,9 +4868,9 @@ static int ui_do_but_BLOCK( bContext *C, uiBut *but, uiHandleButtonData *data, const wmEvent *event) { - + if (data->state == BUTTON_STATE_HIGHLIGHT) { - + /* first handle click on icondrag type button */ if (event->type == LEFTMOUSE && but->dragpoin && event->val == KM_PRESS) { if (ui_but_contains_point_px_icon(but, data->region, event)) { @@ -4927,19 +4927,19 @@ static int ui_do_but_BLOCK( } } else if (data->state == BUTTON_STATE_WAIT_DRAG) { - + /* this function also ends state */ if (ui_but_drag_init(C, but, data, event)) { return WM_UI_HANDLER_BREAK; } - + /* outside icon quit, not needed if drag activated */ if (0 == ui_but_contains_point_px_icon(but, data->region, event)) { button_activate_state(C, but, BUTTON_STATE_EXIT); data->cancel = true; return WM_UI_HANDLER_BREAK; } - + if (event->type == LEFTMOUSE && event->val == KM_RELEASE) { button_activate_state(C, but, BUTTON_STATE_MENU_OPEN); return WM_UI_HANDLER_BREAK; @@ -4958,7 +4958,7 @@ static bool ui_numedit_but_UNITVEC( float dx, dy, rad, radsq, mrad, *fp; int mdx, mdy; bool changed = true; - + /* button is presumed square */ /* if mouse moves outside of sphere, it does negative normal */ @@ -4968,21 +4968,21 @@ static bool ui_numedit_but_UNITVEC( fp = data->origvec; rad = BLI_rctf_size_x(&but->rect); radsq = rad * rad; - + if (fp[2] > 0.0f) { mdx = (rad * fp[0]); mdy = (rad * fp[1]); } else if (fp[2] > -1.0f) { mrad = rad / sqrtf(fp[0] * fp[0] + fp[1] * fp[1]); - + mdx = 2.0f * mrad * fp[0] - (rad * fp[0]); mdy = 2.0f * mrad * fp[1] - (rad * fp[1]); } else { mdx = mdy = 0; } - + dx = (float)(mx + mdx - data->dragstartx); dy = (float)(my + mdy - data->dragstarty); @@ -4994,12 +4994,12 @@ static bool ui_numedit_but_UNITVEC( fp[2] = sqrtf(radsq - dx * dx - dy * dy); } else { /* outer circle */ - + mrad = rad / sqrtf(mrad); // veclen - + dx *= (2.0f * mrad - 1.0f); dy *= (2.0f * mrad - 1.0f); - + mrad = dx * dx + dy * dy; if (mrad < radsq) { fp[0] = dx; @@ -5199,7 +5199,7 @@ static int ui_do_but_UNITVEC( /* also do drag the first time */ if (ui_numedit_but_UNITVEC(but, data, mx, my, snap)) ui_numedit_apply(C, block, but, data); - + return WM_UI_HANDLER_BREAK; } } @@ -5217,7 +5217,7 @@ static int ui_do_but_UNITVEC( return WM_UI_HANDLER_BREAK; } - + return WM_UI_HANDLER_CONTINUE; } @@ -5288,30 +5288,30 @@ static bool ui_numedit_but_HSVCUBE( ui_block_cm_to_display_space_v3(but->block, rgb); ui_rgb_to_color_picker_HSVCUBE_compat_v(but, rgb, hsv); - + /* only apply the delta motion, not absolute */ if (shift) { rcti rect_i; float xpos, ypos, hsvo[3]; - + BLI_rcti_rctf_copy(&rect_i, &but->rect); - + /* calculate original hsv again */ copy_v3_v3(rgb, data->origvec); if (use_display_colorspace) ui_block_cm_to_display_space_v3(but->block, rgb); - + copy_v3_v3(hsvo, hsv); ui_rgb_to_color_picker_HSVCUBE_compat_v(but, rgb, hsvo); - + /* and original position */ ui_hsvcube_pos_from_vals(but, &rect_i, hsvo, &xpos, &ypos); - + mx_fl = xpos - (data->dragstartx - mx_fl); my_fl = ypos - (data->dragstarty - my_fl); } - + /* relative position within box */ x = ((float)mx_fl - but->rect.xmin) / BLI_rctf_size_x(&but->rect); y = ((float)my_fl - but->rect.ymin) / BLI_rctf_size_y(&but->rect); @@ -5428,10 +5428,10 @@ static void ui_ndofedit_but_HSVCUBE( case UI_GRAD_V_ALT: case UI_GRAD_L_ALT: /* vertical 'value' strip */ - + /* exception only for value strip - use the range set in but->min/max */ hsv[2] += ndof->rvec[0] * sensitivity; - + CLAMP(hsv[2], but->softmin, but->softmax); break; default: @@ -5481,19 +5481,19 @@ static int ui_do_but_HSVCUBE( /* also do drag the first time */ if (ui_numedit_but_HSVCUBE(but, data, mx, my, snap, event->shift != 0)) ui_numedit_apply(C, block, but, data); - + return WM_UI_HANDLER_BREAK; } #ifdef WITH_INPUT_NDOF else if (event->type == NDOF_MOTION) { const wmNDOFMotionData *ndof = event->customdata; const enum eSnapType snap = ui_event_to_snap(event); - + ui_ndofedit_but_HSVCUBE(but, data, ndof, snap, event->shift != 0); - + button_activate_state(C, but, BUTTON_STATE_EXIT); ui_apply_but(C, but->block, but, data, true); - + return WM_UI_HANDLER_BREAK; } #endif /* WITH_INPUT_NDOF */ @@ -5501,9 +5501,9 @@ static int ui_do_but_HSVCUBE( else if (event->type == BACKSPACEKEY && event->val == KM_PRESS) { if (ELEM(but->a1, UI_GRAD_V_ALT, UI_GRAD_L_ALT)) { int len; - + /* reset only value */ - + len = RNA_property_array_length(&but->rnapoin, but->rnaprop); if (ELEM(len, 3, 4)) { float rgb[3], def_hsv[3]; @@ -5519,10 +5519,10 @@ static int ui_do_but_HSVCUBE( def_hsv[0] = hsv[0]; def_hsv[1] = hsv[1]; - + ui_color_picker_to_rgb_HSVCUBE_v(but, def_hsv, rgb); ui_but_v3_set(but, rgb); - + RNA_property_update(C, &but->rnapoin, but->rnaprop); return WM_UI_HANDLER_BREAK; } @@ -5548,7 +5548,7 @@ static int ui_do_but_HSVCUBE( else if (event->type == LEFTMOUSE && event->val != KM_PRESS) { button_activate_state(C, but, BUTTON_STATE_EXIT); } - + return WM_UI_HANDLER_BREAK; } @@ -5569,7 +5569,7 @@ static bool ui_numedit_but_HSVCIRCLE( bool use_display_colorspace = ui_but_is_colorpicker_display_space(but); ui_mouse_scale_warp(data, mx, my, &mx_fl, &my_fl, shift); - + #ifdef USE_CONT_MOUSE_CORRECT if (ui_but_is_cursor_warp(but)) { /* OK but can go outside bounds */ @@ -5609,7 +5609,7 @@ static bool ui_numedit_but_HSVCIRCLE( /* only apply the delta motion, not absolute */ if (shift) { float xpos, ypos, hsvo[3], rgbo[3]; - + /* calculate original hsv again */ copy_v3_v3(hsvo, hsv); copy_v3_v3(rgbo, data->origvec); @@ -5623,9 +5623,9 @@ static bool ui_numedit_but_HSVCIRCLE( mx_fl = xpos - (data->dragstartx - mx_fl); my_fl = ypos - (data->dragstarty - my_fl); - + } - + ui_hsvcircle_vals_from_pos(hsv, hsv + 1, &rect, mx_fl, my_fl); if ((but->flag & UI_BUT_COLOR_CUBIC) && (U.color_picker_type == USER_CP_CIRCLE_HSV)) @@ -5645,10 +5645,10 @@ static bool ui_numedit_but_HSVCIRCLE( ui_block_cm_to_scene_linear_v3(but->block, rgb); ui_but_v3_set(but, rgb); - + data->draglastx = mx; data->draglasty = my; - + return changed; } @@ -5664,28 +5664,28 @@ static void ui_ndofedit_but_HSVCIRCLE( float rgb[3]; float phi, r /*, sqr */ /* UNUSED */, v[2]; float sensitivity = (shift ? 0.06f : 0.3f) * ndof->dt; - + ui_but_v3_get(but, rgb); if (use_display_colorspace) ui_block_cm_to_display_space_v3(but->block, rgb); ui_rgb_to_color_picker_compat_v(rgb, hsv); - + /* Convert current color on hue/sat disc to circular coordinates phi, r */ phi = fmodf(hsv[0] + 0.25f, 1.0f) * -2.0f * (float)M_PI; r = hsv[1]; /* sqr = r > 0.0f ? sqrtf(r) : 1; */ /* UNUSED */ - + /* Convert to 2d vectors */ v[0] = r * cosf(phi); v[1] = r * sinf(phi); - + /* Use ndof device y and x rotation to move the vector in 2d space */ v[0] += ndof->rvec[2] * sensitivity; v[1] += ndof->rvec[0] * sensitivity; /* convert back to polar coords on circle */ phi = atan2f(v[0], v[1]) / (2.0f * (float)M_PI) + 0.5f; - + /* use ndof Y rotation to additionally rotate hue */ phi += ndof->rvec[1] * sensitivity * 0.5f; r = len_v2(v); @@ -5713,14 +5713,14 @@ static void ui_ndofedit_but_HSVCIRCLE( hsv_clamp_v(hsv, FLT_MAX); ui_color_picker_to_rgb_v(hsv, data->vec); - + if ((but->flag & UI_BUT_VEC_SIZE_LOCK) && (data->vec[0] || data->vec[1] || data->vec[2])) { normalize_v3_length(data->vec, but->a2); } if (use_display_colorspace) ui_block_cm_to_scene_linear_v3(but->block, data->vec); - + ui_but_v3_set(but, data->vec); } #endif /* WITH_INPUT_NDOF */ @@ -5735,7 +5735,7 @@ static int ui_do_but_HSVCIRCLE( mx = event->x; my = event->y; ui_window_to_block(data->region, block, &mx, &my); - + if (data->state == BUTTON_STATE_HIGHLIGHT) { if (event->type == LEFTMOUSE && event->val == KM_PRESS) { const enum eSnapType snap = ui_event_to_snap(event); @@ -5744,52 +5744,52 @@ static int ui_do_but_HSVCIRCLE( data->draglastx = mx; data->draglasty = my; button_activate_state(C, but, BUTTON_STATE_NUM_EDITING); - + /* also do drag the first time */ if (ui_numedit_but_HSVCIRCLE(but, data, mx, my, snap, event->shift != 0)) ui_numedit_apply(C, block, but, data); - + return WM_UI_HANDLER_BREAK; } #ifdef WITH_INPUT_NDOF else if (event->type == NDOF_MOTION) { const enum eSnapType snap = ui_event_to_snap(event); const wmNDOFMotionData *ndof = event->customdata; - + ui_ndofedit_but_HSVCIRCLE(but, data, ndof, snap, event->shift != 0); button_activate_state(C, but, BUTTON_STATE_EXIT); ui_apply_but(C, but->block, but, data, true); - + return WM_UI_HANDLER_BREAK; } #endif /* WITH_INPUT_NDOF */ /* XXX hardcoded keymap check.... */ else if (event->type == BACKSPACEKEY && event->val == KM_PRESS) { int len; - + /* reset only saturation */ - + len = RNA_property_array_length(&but->rnapoin, but->rnaprop); if (len >= 3) { float rgb[3], def_hsv[3]; float *def; def = MEM_callocN(sizeof(float) * len, "reset_defaults - float"); - + RNA_property_float_get_default_array(&but->rnapoin, but->rnaprop, def); ui_color_picker_to_rgb_v(def, def_hsv); - + ui_but_v3_get(but, rgb); ui_rgb_to_color_picker_compat_v(rgb, hsv); - + def_hsv[0] = hsv[0]; def_hsv[2] = hsv[2]; hsv_to_rgb_v(def_hsv, rgb); ui_but_v3_set(but, rgb); - + RNA_property_update(C, &but->rnapoin, but->rnaprop); - + MEM_freeN(def); } return WM_UI_HANDLER_BREAK; @@ -5828,7 +5828,7 @@ static int ui_do_but_HSVCIRCLE( } return WM_UI_HANDLER_BREAK; } - + return WM_UI_HANDLER_CONTINUE; } @@ -5847,10 +5847,10 @@ static bool ui_numedit_but_COLORBAND(uiBut *but, uiHandleButtonData *data, int m dx = ((float)(mx - data->draglastx)) / BLI_rctf_size_x(&but->rect); data->dragcbd->pos += dx; CLAMP(data->dragcbd->pos, 0.0f, 1.0f); - + BKE_colorband_update_sort(data->coba); data->dragcbd = data->coba->data + data->coba->cur; /* because qsort */ - + data->draglastx = mx; changed = true; @@ -5897,7 +5897,7 @@ static int ui_do_but_COLORBAND( mindist = xco; } } - + data->dragcbd = coba->data + coba->cur; data->dragfstart = data->dragcbd->pos; button_activate_state(C, but, BUTTON_STATE_NUM_EDITING); @@ -5951,10 +5951,10 @@ static bool ui_numedit_but_CURVE( dragx = data->draglastx; dragy = data->draglasty; ui_window_to_block(data->region, block, &dragx, &dragy); - + zoomx = BLI_rctf_size_x(&but->rect) / BLI_rctf_size_x(&cumap->curr); zoomy = BLI_rctf_size_y(&but->rect) / BLI_rctf_size_y(&cumap->curr); - + if (snap) { float d[2]; @@ -5993,7 +5993,7 @@ static bool ui_numedit_but_CURVE( } curvemapping_changed(cumap, false); - + if (moved_point) { data->draglastx = evtx; data->draglasty = evty; @@ -6017,7 +6017,7 @@ static bool ui_numedit_but_CURVE( else { fx = (mx - dragx) / zoomx; fy = (my - dragy) / zoomy; - + /* clamp for clip */ if (cumap->flag & CUMA_DO_CLIP) { if (cumap->curr.xmin - fx < cumap->clipr.xmin) @@ -6034,7 +6034,7 @@ static bool ui_numedit_but_CURVE( cumap->curr.ymin -= fy; cumap->curr.xmax -= fx; cumap->curr.ymax -= fy; - + data->draglastx = evtx; data->draglasty = evty; @@ -6056,7 +6056,7 @@ static int ui_do_but_CURVE( mx = event->x; my = event->y; ui_window_to_block(data->region, block, &mx, &my); - + if (data->state == BUTTON_STATE_HIGHLIGHT) { if (event->type == LEFTMOUSE && event->val == KM_PRESS) { CurveMapping *cumap = (CurveMapping *)but->poin; @@ -6069,7 +6069,7 @@ static int ui_do_but_CURVE( if (event->ctrl) { float f_xy[2]; BLI_rctf_transform_pt_v(&cumap->curr, &but->rect, f_xy, m_xy); - + curvemap_insert(cuma, f_xy[0], f_xy[1]); curvemapping_changed(cumap, false); changed = true; @@ -6091,7 +6091,7 @@ static int ui_do_but_CURVE( int i; float f_xy[2], f_xy_prev[2]; - /* if the click didn't select anything, check if it's clicked on the + /* if the click didn't select anything, check if it's clicked on the * curve itself, and if so, add a point */ cmp = cuma->table; @@ -6112,10 +6112,10 @@ static int ui_do_but_CURVE( curvemapping_changed(cumap, false); changed = true; - + /* reset cmp back to the curve points again, rather than drawing segments */ cmp = cuma->curve; - + /* find newly added point and make it 'sel' */ for (a = 0; a < cuma->totpoint; a++) { if (cmp[a].x == f_xy[0]) { @@ -6146,7 +6146,7 @@ static int ui_do_but_CURVE( } data->dragsel = sel; - + data->dragstartx = event->x; data->dragstarty = event->y; data->draglastx = event->x; @@ -6159,7 +6159,7 @@ static int ui_do_but_CURVE( else if (data->state == BUTTON_STATE_NUM_EDITING) { if (event->type == MOUSEMOVE) { if (event->x != data->draglastx || event->y != data->draglasty) { - + if (ui_numedit_but_CURVE(block, but, data, event->x, event->y, event->ctrl != 0, event->shift != 0)) ui_numedit_apply(C, block, but, data); } @@ -6220,11 +6220,11 @@ static int ui_do_but_HISTOGRAM( uiHandleButtonData *data, const wmEvent *event) { int mx, my; - + mx = event->x; my = event->y; ui_window_to_block(data->region, block, &mx, &my); - + if (data->state == BUTTON_STATE_HIGHLIGHT) { if (event->type == LEFTMOUSE && event->val == KM_PRESS) { data->dragstartx = mx; @@ -6232,18 +6232,18 @@ static int ui_do_but_HISTOGRAM( data->draglastx = mx; data->draglasty = my; button_activate_state(C, but, BUTTON_STATE_NUM_EDITING); - + /* also do drag the first time */ if (ui_numedit_but_HISTOGRAM(but, data, mx, my)) ui_numedit_apply(C, block, but, data); - + return WM_UI_HANDLER_BREAK; } /* XXX hardcoded keymap check.... */ else if (event->type == BACKSPACEKEY && event->val == KM_PRESS) { Histogram *hist = (Histogram *)but->poin; hist->ymax = 1.f; - + button_activate_state(C, but, BUTTON_STATE_EXIT); return WM_UI_HANDLER_BREAK; } @@ -6267,7 +6267,7 @@ static int ui_do_but_HISTOGRAM( } return WM_UI_HANDLER_BREAK; } - + return WM_UI_HANDLER_CONTINUE; } @@ -6438,7 +6438,7 @@ static void but_shortcut_name_func(bContext *C, void *arg1, int UNUSED(event)) char shortcut_str[128]; IDProperty *prop = (but->opptr) ? but->opptr->data : NULL; - + /* complex code to change name of button */ if (WM_key_event_operator_string( C, but->optype->idname, but->opcontext, prop, true, @@ -6469,18 +6469,18 @@ static uiBlock *menu_change_shortcut(bContext *C, ARegion *ar, void *arg) BLI_assert(kmi != NULL); RNA_pointer_create(&wm->id, &RNA_KeyMapItem, kmi, &ptr); - + block = UI_block_begin(C, ar, "_popup", UI_EMBOSS); UI_block_func_handle_set(block, but_shortcut_name_func, but); UI_block_flag_enable(block, UI_BLOCK_MOVEMOUSE_QUIT); UI_block_direction_set(block, UI_DIR_CENTER_Y); - + layout = UI_block_layout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 0, 200, 20, 0, style); - + uiItemR(layout, &ptr, "type", UI_ITEM_R_FULL_EVENT | UI_ITEM_R_IMMEDIATE, "", ICON_NONE); - + UI_block_bounds_set_popup(block, 6, -50, 26); - + return block; } @@ -6500,7 +6500,7 @@ static uiBlock *menu_add_shortcut(bContext *C, ARegion *ar, void *arg) uiStyle *style = UI_style_get_dpi(); IDProperty *prop = (but->opptr) ? but->opptr->data : NULL; int kmi_id; - + /* XXX this guess_opname can potentially return a different keymap than being found on adding later... */ km = WM_keymap_guess_opname(C, but->optype->idname); kmi = WM_keymap_add_item(km, but->optype->idname, AKEY, KM_PRESS, 0, 0); @@ -6526,7 +6526,7 @@ static uiBlock *menu_add_shortcut(bContext *C, ARegion *ar, void *arg) layout = UI_block_layout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 0, 200, 20, 0, style); uiItemR(layout, &ptr, "type", UI_ITEM_R_FULL_EVENT | UI_ITEM_R_IMMEDIATE, "", ICON_NONE); - + UI_block_bounds_set_popup(block, 6, -50, 26); #ifdef USE_KEYMAP_ADD_HACK @@ -6575,7 +6575,7 @@ static void remove_shortcut_func(bContext *C, void *arg1, void *UNUSED(arg2)) BLI_assert(kmi != NULL); WM_keymap_remove_item(km, kmi); - + but_shortcut_name_func(C, but, 0); } @@ -6667,7 +6667,7 @@ static bool ui_but_menu(bContext *C, uiBut *but) if (but->type == UI_BTYPE_IMAGE) { return false; } - + /* highly unlikely getting the label ever fails */ UI_but_string_info_get(C, but, &label, NULL); @@ -6698,7 +6698,7 @@ static bool ui_but_menu(bContext *C, uiBut *but) /* determine if we can key a single component of an array */ is_array = RNA_property_array_length(&but->rnapoin, but->rnaprop) != 0; is_array_component = (is_array && but->rnaindex != -1); - + /* Keyframes */ if (but->flag & UI_BUT_ANIMATED_KEY) { /* replace/delete keyfraemes */ @@ -6718,11 +6718,11 @@ static bool ui_but_menu(bContext *C, uiBut *but) uiItemBooleanO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Delete Keyframe"), ICON_NONE, "ANIM_OT_keyframe_delete_button", "all", 1); } - + /* keyframe settings */ uiItemS(layout); - - + + } else if (but->flag & UI_BUT_DRIVEN) { /* pass */ @@ -6739,7 +6739,7 @@ static bool ui_but_menu(bContext *C, uiBut *but) ICON_KEY_HLT, "ANIM_OT_keyframe_insert_button", "all", 1); } } - + if ((but->flag & UI_BUT_ANIMATED) && (but->rnapoin.type != &RNA_NlaStrip)) { if (is_array_component) { uiItemBooleanO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Clear Keyframes"), @@ -6774,7 +6774,7 @@ static bool ui_but_menu(bContext *C, uiBut *but) uiItemO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Paste Driver"), ICON_NONE, "ANIM_OT_paste_driver_button"); } - + uiItemO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Open Drivers Editor"), ICON_DRIVER, "SCREEN_OT_drivers_editor_show"); } @@ -6785,13 +6785,13 @@ static bool ui_but_menu(bContext *C, uiBut *but) uiItemS(layout); if (is_array_component) { - uiItemMenuEnumO(layout, C, "ANIM_OT_driver_button_add", "mapping_type", - CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Add Drivers"), + uiItemMenuEnumO(layout, C, "ANIM_OT_driver_button_add", "mapping_type", + CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Add Drivers"), ICON_DRIVER); } else { - uiItemMenuEnumO(layout, C, "ANIM_OT_driver_button_add", "mapping_type", - CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Add Driver"), + uiItemMenuEnumO(layout, C, "ANIM_OT_driver_button_add", "mapping_type", + CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Add Driver"), ICON_DRIVER); } @@ -6799,11 +6799,11 @@ static bool ui_but_menu(bContext *C, uiBut *but) uiItemO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Paste Driver"), ICON_NONE, "ANIM_OT_paste_driver_button"); } - + uiItemO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Open Drivers Editor"), ICON_NONE, "SCREEN_OT_drivers_editor_show"); } - + /* Keying Sets */ /* TODO: check on modifyability of Keying Set when doing this */ if (is_anim) { @@ -6879,7 +6879,7 @@ static bool ui_but_menu(bContext *C, uiBut *but) /* Copy Property Value * Paste Property Value */ - + if (is_array_component) { uiItemBooleanO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Reset All to Default Values"), ICON_LOOP_BACK, "UI_OT_reset_default_button", "all", 1); @@ -6894,7 +6894,7 @@ static bool ui_but_menu(bContext *C, uiBut *but) uiItemO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Unset"), ICON_NONE, "UI_OT_unset_property_button"); } - + if (is_array_component) { uiItemBooleanO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Copy All To Selected"), ICON_NONE, "UI_OT_copy_to_selected_button", "all", true); @@ -7382,7 +7382,7 @@ bool UI_but_active_drop_name(bContext *C) if (ELEM(but->type, UI_BTYPE_TEXT, UI_BTYPE_SEARCH_MENU)) return 1; } - + return 0; } @@ -7424,11 +7424,11 @@ static bool ui_region_contains_point_px(ARegion *ar, int x, int y) if (!BLI_rcti_isect_pt(&winrct, x, y)) { for (uiBlock *block = ar->uiblocks.first; block; block = block->next) block->auto_open = false; - + return false; } - /* also, check that with view2d, that the mouse is not over the scrollbars + /* also, check that with view2d, that the mouse is not over the scrollbars * NOTE: care is needed here, since the mask rect may include the scrollbars * even when they are not visible, so we need to make a copy of the mask to * use to check @@ -7436,7 +7436,7 @@ static bool ui_region_contains_point_px(ARegion *ar, int x, int y) if (ar->v2d.mask.xmin != ar->v2d.mask.xmax) { View2D *v2d = &ar->v2d; int mx, my; - + /* convert window coordinates to region coordinates */ mx = x; my = y; @@ -7447,7 +7447,7 @@ static bool ui_region_contains_point_px(ARegion *ar, int x, int y) return false; } } - + return true; } @@ -7471,7 +7471,7 @@ static bool ui_but_contains_point_px(ARegion *ar, uiBut *but, int x, int y) else if (!ui_but_contains_pt(but, mx, my)) { return false; } - + return true; } @@ -7696,7 +7696,7 @@ static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState s but->flag |= UI_SELECT; UI_but_tooltip_timer_remove(C, but); } - + /* text editing */ if (state == BUTTON_STATE_TEXT_EDITING && data->state != BUTTON_STATE_TEXT_SELECTING) ui_textedit_begin(C, but, data); @@ -7704,7 +7704,7 @@ static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState s ui_textedit_end(C, but, data); else if (data->state == BUTTON_STATE_TEXT_SELECTING && state != BUTTON_STATE_TEXT_EDITING) ui_textedit_end(C, but, data); - + /* number editing */ if (state == BUTTON_STATE_NUM_EDITING) { if (ui_but_is_cursor_warp(but)) @@ -7781,7 +7781,7 @@ static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState s } } } - + /* wait for mousemove to enable drag */ if (state == BUTTON_STATE_WAIT_DRAG) { but->flag &= ~UI_SELECT; @@ -7825,7 +7825,7 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA data->interactive = true; } } - + data->state = BUTTON_STATE_INIT; /* activate button */ @@ -7843,14 +7843,14 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA data->used_mouse = true; } button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT); - + /* activate right away */ if (but->flag & UI_BUT_IMMEDIATE) { if (but->type == UI_BTYPE_HOTKEY_EVENT) button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT); /* .. more to be added here */ } - + if (type == BUTTON_ACTIVATE_OPEN) { button_activate_state(C, but, BUTTON_STATE_MENU_OPEN); @@ -7859,7 +7859,7 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA ARegion *subar = data->menu->region; uiBlock *subblock = subar->uiblocks.first; uiBut *subbut; - + if (subblock) { subbut = ui_but_first(subblock); @@ -8167,7 +8167,7 @@ void UI_context_update_anim_flag(const bContext *C) ui_but_anim_flag(but, (scene) ? scene->r.cfra : 0.0f); ui_but_override_flag(but); ED_region_tag_redraw(ar); - + if (but->active) { activebut = but; } @@ -8200,7 +8200,7 @@ static uiBut *ui_but_find_open_event(ARegion *ar, const wmEvent *event) { uiBlock *block; uiBut *but; - + for (block = ar->uiblocks.first; block; block = block->next) { for (but = block->buttons.first; but; but = but->next) if (but == event->customdata) @@ -8240,15 +8240,15 @@ void ui_but_activate_event(bContext *C, ARegion *ar, uiBut *but) { wmWindow *win = CTX_wm_window(C); wmEvent event; - + button_activate_init(C, ar, but, BUTTON_ACTIVATE_OVER); - + wm_event_init_from_window(win, &event); event.type = EVT_BUT_OPEN; event.val = KM_PRESS; event.customdata = but; event.customdatafree = false; - + ui_do_button(C, but->block, but, &event); } @@ -8346,7 +8346,7 @@ static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but) ar = data->region; retval = WM_UI_HANDLER_CONTINUE; - + if (data->state == BUTTON_STATE_HIGHLIGHT) { switch (event->type) { case WINDEACTIVATE: @@ -8524,7 +8524,7 @@ static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but) } bt = ui_but_find_mouse_over(ar, event); - + if (bt && bt->active != data) { if (but->type != UI_BTYPE_COLOR) { /* exception */ data->cancel = true; @@ -8753,7 +8753,7 @@ static void ui_handle_button_return_submenu(bContext *C, const wmEvent *event, u menu->menuretval = 0; } - + /* now change button state or exit, which will close the submenu */ if ((menu->menuretval & UI_RETURN_OK) || (menu->menuretval & UI_RETURN_CANCEL)) { if (menu->menuretval != UI_RETURN_OK) @@ -8864,7 +8864,7 @@ static bool ui_mouse_motion_towards_check( p2[0] = rect_px.xmax + margin; p2[1] = rect_px.ymin - margin; - + p3[0] = rect_px.xmax + margin; p3[1] = rect_px.ymax + margin; @@ -8922,7 +8922,7 @@ static bool ui_mouse_motion_keynav_test(struct uiKeyNavLock *keynav, const wmEve static char ui_menu_scroll_test(uiBlock *block, int my) { if (block->flag & (UI_BLOCK_CLIPTOP | UI_BLOCK_CLIPBOTTOM)) { - if (block->flag & UI_BLOCK_CLIPTOP) + if (block->flag & UI_BLOCK_CLIPTOP) if (my > block->rect.ymax - UI_MENU_SCROLL_MOUSE) return 't'; if (block->flag & UI_BLOCK_CLIPBOTTOM) @@ -8991,12 +8991,12 @@ static int ui_menu_scroll(ARegion *ar, uiBlock *block, int my, uiBut *to_bt) /* set flags again */ ui_popup_block_scrolltest(block); - + ED_region_tag_redraw(ar); - + return 1; } - + return 0; } @@ -9161,14 +9161,14 @@ static int ui_handle_menu_event( if (block->flag & UI_BLOCK_MOVEMOUSE_QUIT) { ui_mouse_motion_towards_init(menu, &event->x); } - + /* add menu scroll timer, if needed */ if (ui_menu_scroll_test(block, my)) if (menu->scrolltimer == NULL) menu->scrolltimer = WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, MENU_SCROLL_INTERVAL); } - + /* first block own event func */ if (block->block_event_func && block->block_event_func(C, block, event)) { /* pass */ @@ -9208,7 +9208,7 @@ static int ui_handle_menu_event( retval = WM_UI_HANDLER_BREAK; break; - + case UPARROWKEY: case DOWNARROWKEY: case WHEELUPMOUSE: @@ -9221,11 +9221,11 @@ static int ui_handle_menu_event( else if (inside || (block->flag & UI_BLOCK_LOOP)) { int type = event->type; int val = event->val; - + /* convert pan to scrollwheel */ if (type == MOUSEPAN) ui_pan_to_scroll(event, &type, &val); - + if (val == KM_PRESS) { const bool is_next = (ELEM(type, DOWNARROWKEY, WHEELDOWNMOUSE) == @@ -9296,10 +9296,10 @@ static int ui_handle_menu_event( count = 0; for (but = block->buttons.first; but; but = but->next) { bool doit = false; - + if (!ELEM(but->type, UI_BTYPE_LABEL, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE)) count++; - + /* exception for rna layer buts */ if (but->rnapoin.data && but->rnaprop && ELEM(RNA_property_subtype(but->rnaprop), PROP_LAYER, PROP_LAYER_MEMBER)) @@ -9399,7 +9399,7 @@ static int ui_handle_menu_event( } } } - + /* here we check return conditions for menus */ if (block->flag & UI_BLOCK_LOOP) { /* if we click outside the block, verify if we clicked on the @@ -9479,7 +9479,7 @@ static int ui_handle_menu_event( uiSafetyRct *saferct; ui_mouse_motion_towards_check(block, menu, &event->x, is_parent_inside == false); - + /* check for all parent rects, enables arrowkeys to be used */ for (saferct = block->saferct.first; saferct; saferct = saferct->next) { /* for mouse move we only check our own rect, for other @@ -10075,7 +10075,7 @@ static int ui_region_handler(bContext *C, const wmEvent *event, void *UNUSED(use /* re-enable tooltips */ if (event->type == MOUSEMOVE && (event->x != event->prevx || event->y != event->prevy)) ui_blocks_set_tooltips(ar, true); - + /* delayed apply callbacks */ ui_apply_but_funcs_after(C); @@ -10091,7 +10091,7 @@ static void ui_region_handler_remove(bContext *C, void *UNUSED(userdata)) if (ar == NULL) return; UI_blocklist_free(C, &ar->uiblocks); - + sc = CTX_wm_screen(C); if (sc == NULL) return; @@ -10227,7 +10227,7 @@ static int ui_popup_handler(bContext *C, const wmEvent *event, void *userdata) win->last_pie_event = block->pie_data.event; reset_pie = true; } - + ui_popup_block_free(C, menu); UI_popup_handlers_remove(&win->modalhandlers, menu); CTX_wm_menu_set(C, NULL); @@ -10337,7 +10337,7 @@ bool UI_textbutton_activate_rna( { uiBlock *block; uiBut *but = NULL; - + for (block = ar->uiblocks.first; block; block = block->next) { for (but = block->buttons.first; but; but = but->next) { if (but->type == UI_BTYPE_TEXT) { @@ -10351,7 +10351,7 @@ bool UI_textbutton_activate_rna( if (but) break; } - + if (but) { UI_but_active_only(C, ar, block, but); return true; @@ -10366,7 +10366,7 @@ bool UI_textbutton_activate_but(const bContext *C, uiBut *actbut) ARegion *ar = CTX_wm_region(C); uiBlock *block; uiBut *but = NULL; - + for (block = ar->uiblocks.first; block; block = block->next) { for (but = block->buttons.first; but; but = but->next) if (but == actbut && but->type == UI_BTYPE_TEXT) @@ -10375,7 +10375,7 @@ bool UI_textbutton_activate_but(const bContext *C, uiBut *actbut) if (but) break; } - + if (but) { UI_but_active_only(C, ar, block, but); return true; diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c index df3846b7c6b..51c3cff721a 100644 --- a/source/blender/editors/interface/interface_icons.c +++ b/source/blender/editors/interface/interface_icons.c @@ -133,7 +133,7 @@ typedef struct IconTexture { } IconTexture; /* ******************* STATIC LOCAL VARS ******************* */ -/* static here to cache results of icon directory scan, so it's not +/* static here to cache results of icon directory scan, so it's not * scanning the filesystem each time the menu is drawn */ static struct ListBase iconfilelist = {NULL, NULL}; static IconTexture icongltex = {0, 0, 0, 0.0f, 0.0f}; @@ -170,9 +170,9 @@ static DrawInfo *def_internal_icon(ImBuf *bbuf, int icon_id, int xofs, int yofs, /* icon buffers can get initialized runtime now, via datatoc */ if (bbuf) { int y, imgsize; - + iimg->rect = MEM_mallocN(size * size * sizeof(unsigned int), "icon_rect"); - + /* Here we store the rect in the icon - same as before */ if (size == bbuf->x && size == bbuf->y && xofs == 0 && yofs == 0) memcpy(iimg->rect, bbuf->rect, size * size * sizeof(int)); @@ -191,7 +191,7 @@ static DrawInfo *def_internal_icon(ImBuf *bbuf, int icon_id, int xofs, int yofs, new_icon->drawinfo = di; BKE_icon_set(icon_id, new_icon); - + return di; } @@ -255,10 +255,10 @@ static void vicon_keytype_draw_wrapper(int x, int y, int w, int h, float alpha, * (since we're doing this offscreen, free from any particular space_id) */ struct bThemeState theme_state; - + UI_Theme_Store(&theme_state); UI_SetTheme(SPACE_ACTION, RGN_TYPE_WINDOW); - + /* the "x" and "y" given are the bottom-left coordinates of the icon, * while the draw_keyframe_shape() function needs the midpoint for * the keyframe @@ -353,7 +353,7 @@ static void vicon_colorset_draw(int index, int x, int y, int w, int h, float UNU { \ vicon_colorset_draw(index, x, y, w, h, alpha); \ } - + DEF_VICON_COLORSET_DRAW_NTH(01, 0) DEF_VICON_COLORSET_DRAW_NTH(02, 1) DEF_VICON_COLORSET_DRAW_NTH(03, 2) @@ -437,14 +437,14 @@ static void icon_verify_datatoc(IconImage *iimg) /* if it has own rect, things are all OK */ if (iimg->rect) return; - + if (iimg->datatoc_rect) { ImBuf *bbuf = IMB_ibImageFromMemory(iimg->datatoc_rect, iimg->datatoc_size, IB_rect, NULL, "<matcap icon>"); /* w and h were set on initialize */ if (bbuf->x != iimg->h && bbuf->y != iimg->w) IMB_scaleImBuf(bbuf, iimg->w, iimg->h); - + iimg->rect = bbuf->rect; bbuf->rect = NULL; IMB_freeImBuf(bbuf); @@ -504,7 +504,7 @@ static void init_internal_icons(void) if ((btheme != NULL) && btheme->tui.iconfile[0]) { char *icondir = BKE_appdir_folder_id(BLENDER_DATAFILES, "icons"); char iconfilestr[FILE_MAX]; - + if (icondir) { BLI_join_dirfile(iconfilestr, sizeof(iconfilestr), icondir, btheme->tui.iconfile); bbuf = IMB_loadiffname(iconfilestr, IB_rect, NULL); /* if the image is missing bbuf will just be NULL */ @@ -530,7 +530,7 @@ static void init_internal_icons(void) datatoc_blender_icons32_png_size, IB_rect, NULL, "<blender icons>"); if (b32buf) IMB_premultiply_alpha(b32buf); - + if (b16buf && b32buf) { /* free existing texture if any */ if (icongltex.id) { @@ -548,17 +548,17 @@ static void init_internal_icons(void) if (icongltex.id) { int level = 2; - + icongltex.w = b32buf->x; icongltex.h = b32buf->y; icongltex.invw = 1.0f / b32buf->x; icongltex.invh = 1.0f / b32buf->y; glBindTexture(GL_TEXTURE_2D, icongltex.id); - + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, b32buf->x, b32buf->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, b32buf->rect); glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA8, b16buf->x, b16buf->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, b16buf->rect); - + while (b16buf->x > 1) { ImBuf *nbuf = IMB_onehalf(b16buf); glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA8, nbuf->x, nbuf->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, nbuf->rect); @@ -566,10 +566,10 @@ static void init_internal_icons(void) IMB_freeImBuf(b16buf); b16buf = nbuf; } - + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - + glBindTexture(GL_TEXTURE_2D, 0); } } @@ -579,7 +579,7 @@ static void init_internal_icons(void) icontype = ICON_TYPE_TEXTURE; else icontype = ICON_TYPE_BUFFER; - + if (b32buf) { for (y = 0; y < ICON_GRID_ROWS; y++) { for (x = 0; x < ICON_GRID_COLS; x++) { @@ -592,13 +592,13 @@ static void init_internal_icons(void) } def_internal_vicon(VICO_SMALL_TRI_RIGHT_VEC, vicon_small_tri_right_draw); - + def_internal_vicon(VICO_KEYTYPE_KEYFRAME_VEC, vicon_keytype_keyframe_draw); def_internal_vicon(VICO_KEYTYPE_BREAKDOWN_VEC, vicon_keytype_breakdown_draw); def_internal_vicon(VICO_KEYTYPE_EXTREME_VEC, vicon_keytype_extreme_draw); def_internal_vicon(VICO_KEYTYPE_JITTER_VEC, vicon_keytype_jitter_draw); def_internal_vicon(VICO_KEYTYPE_MOVING_HOLD_VEC, vicon_keytype_moving_hold_draw); - + def_internal_vicon(VICO_COLORSET_01_VEC, vicon_colorset_draw_01); def_internal_vicon(VICO_COLORSET_02_VEC, vicon_colorset_draw_02); def_internal_vicon(VICO_COLORSET_03_VEC, vicon_colorset_draw_03); @@ -622,7 +622,7 @@ static void init_internal_icons(void) IMB_freeImBuf(b16buf); IMB_freeImBuf(b32buf); - + } #endif /* WITH_HEADLESS */ @@ -638,13 +638,13 @@ static void init_iconfile_list(struct ListBase *list) if (icondir == NULL) return; - + totfile = BLI_filelist_dir_contents(icondir, &dir); for (i = 0; i < totfile; i++) { if ((dir[i].type & S_IFREG)) { const char *filename = dir[i].relname; - + if (BLI_testextensie(filename, ".png")) { /* loading all icons on file start is overkill & slows startup * its possible they change size after blender load anyway. */ @@ -666,7 +666,7 @@ static void init_iconfile_list(struct ListBase *list) else { ifilex = ifiley = 0; } - + /* bad size or failed to load */ if ((ifilex != ICON_IMAGE_W) || (ifiley != ICON_IMAGE_H)) { printf("icon '%s' is wrong size %dx%d\n", iconfilestr, ifilex, ifiley); @@ -676,12 +676,12 @@ static void init_iconfile_list(struct ListBase *list) /* found a potential icon file, so make an entry for it in the cache list */ ifile = MEM_callocN(sizeof(IconFile), "IconFile"); - + BLI_strncpy(ifile->filename, filename, sizeof(ifile->filename)); ifile->index = index; BLI_addtail(list, ifile); - + index++; } } @@ -694,7 +694,7 @@ static void init_iconfile_list(struct ListBase *list) static void free_iconfile_list(struct ListBase *list) { IconFile *ifile = NULL, *next_ifile = NULL; - + for (ifile = list->first; ifile; ifile = next_ifile) { next_ifile = ifile->next; BLI_freelinkN(list, ifile); @@ -707,20 +707,20 @@ int UI_iconfile_get_index(const char *filename) { IconFile *ifile; ListBase *list = &(iconfilelist); - + for (ifile = list->first; ifile; ifile = ifile->next) { if (BLI_path_cmp(filename, ifile->filename) == 0) { return ifile->index; } } - + return 0; } ListBase *UI_iconfile_list(void) { ListBase *list = &(iconfilelist); - + return list; } @@ -811,13 +811,13 @@ int UI_icon_get_width(int icon_id) DrawInfo *di = NULL; icon = BKE_icon_get(icon_id); - + if (icon == NULL) { if (G.debug & G_DEBUG) printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id); return 0; } - + di = icon_ensure_drawinfo(icon); if (di) { return ICON_DEFAULT_WIDTH; @@ -955,7 +955,7 @@ static void icon_set_image( PreviewImage *UI_icon_to_preview(int icon_id) { Icon *icon = BKE_icon_get(icon_id); - + if (icon) { DrawInfo *di = (DrawInfo *)icon->drawinfo; if (di) { @@ -1225,10 +1225,10 @@ static void icon_draw_size( IconImage *iimg; const float fdraw_size = (float)draw_size; int w, h; - + icon = BKE_icon_get(icon_id); alpha *= btheme->tui.icon_alpha; - + if (icon == NULL) { if (G.debug & G_DEBUG) printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id); @@ -1304,7 +1304,7 @@ static void icon_draw_size( if (pi) { /* no create icon on this level in code */ if (!pi->rect[size]) return; /* something has gone wrong! */ - + /* preview images use premul alpha ... */ glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); @@ -1341,10 +1341,10 @@ static void ui_id_icon_render(const bContext *C, ID *id, bool use_jobs) { PreviewImage *pi = BKE_previewimg_id_ensure(id); enum eIconSizes i; - + if (!pi) return; - + for (i = 0; i < NUM_ICON_SIZES; i++) { /* check if rect needs to be created; changed * only set by dynamic icons */ @@ -1435,7 +1435,7 @@ static int ui_id_screen_get_icon(const bContext *C, ID *id) int ui_id_icon_get(const bContext *C, ID *id, const bool big) { int iconid = 0; - + /* icon */ switch (GS(id->name)) { case ID_BR: diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index e1fe64c1e35..b851d1d8c5b 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -75,19 +75,19 @@ typedef enum { UI_WTYPE_TOOLBAR_ITEM, UI_WTYPE_TAB, UI_WTYPE_TOOLTIP, - + /* strings */ UI_WTYPE_NAME, UI_WTYPE_NAME_LINK, UI_WTYPE_POINTER_LINK, UI_WTYPE_FILENAME, - + /* menus */ UI_WTYPE_MENU_RADIO, UI_WTYPE_MENU_ICON_RADIO, UI_WTYPE_MENU_POINTER_LINK, UI_WTYPE_MENU_NODE_LINK, - + UI_WTYPE_PULLDOWN, UI_WTYPE_MENU_ITEM, UI_WTYPE_MENU_ITEM_RADIAL, @@ -245,7 +245,7 @@ struct uiBut { uiButCompleteFunc autocomplete_func; void *autofunc_arg; - + uiButSearchCreateFunc search_create_func; uiButSearchFunc search_func; bool free_search_arg; @@ -302,7 +302,7 @@ struct uiBut { void *dragpoin; struct ImBuf *imb; float imb_scale; - + /* active button data */ struct uiHandleButtonData *active; @@ -314,7 +314,7 @@ struct uiBut { float *editvec; void *editcoba; void *editcumap; - + /* pointer back */ uiBlock *block; }; @@ -362,9 +362,9 @@ struct uiBlock { struct uiLayout *curlayout; ListBase contexts; - + char name[UI_MAX_NAME_STR]; - + float winmat[4][4]; rctf rect; @@ -384,10 +384,10 @@ struct uiBlock { uiBlockHandleFunc handle_func; void *handle_func_arg; - + /* custom extra handling */ int (*block_event_func)(const struct bContext *C, struct uiBlock *, const struct wmEvent *); - + /* extra draw function for custom blocks */ void (*drawextra)(const struct bContext *C, void *idv, void *arg1, void *arg2, rcti *rect); void *drawextra_arg1; @@ -545,7 +545,7 @@ struct uiPopupBlockHandle { void (*popup_func)(struct bContext *C, void *arg, int event); void (*cancel_func)(struct bContext *C, void *arg); void *popup_arg; - + /* store data for refreshing popups */ struct uiPopupBlockCreate popup_create_vars; /* true if we can re-create the popup using 'popup_create_vars' */ @@ -563,7 +563,7 @@ struct uiPopupBlockHandle { ScrArea *ctx_area; ARegion *ctx_region; int opcontext; - + /* return values */ int butretval; int menuretval; diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index d9db5c930fc..58e654cb3c8 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -301,7 +301,7 @@ static void ui_item_position(uiItem *item, int x, int y, int w, int h) bitem->but->rect.ymin = y; bitem->but->rect.xmax = x + w; bitem->but->rect.ymax = y + h; - + ui_but_update(bitem->but); /* for strlen */ } else { @@ -321,7 +321,7 @@ static void ui_item_move(uiItem *item, int delta_xmin, int delta_xmax) bitem->but->rect.xmin += delta_xmin; bitem->but->rect.xmax += delta_xmax; - + ui_but_update(bitem->but); /* for strlen */ } else { @@ -361,7 +361,7 @@ static uiLayout *ui_item_local_sublayout(uiLayout *test, uiLayout *layout, int a sub = uiLayoutRow(layout, align); else sub = uiLayoutColumn(layout, align); - + sub->space = 0; return sub; } @@ -431,9 +431,9 @@ static void ui_item_array( if (ptr->type == &RNA_Armature) { bArmature *arm = (bArmature *)ptr->data; - + layer_used = arm->layer_used; - + if (arm->edbo) { if (arm->act_edbone) { layer_active |= arm->act_edbone->layer; @@ -452,7 +452,7 @@ static void ui_item_array( for (a = 0; a < colbuts; a++) { const int layer_num = a + b * colbuts; const unsigned int layer_flag = (1u << layer_num); - + if (layer_used & layer_flag) { if (layer_active & layer_flag) icon = ICON_LAYER_ACTIVE; @@ -470,7 +470,7 @@ static void ui_item_array( for (a = 0; a < colbuts; a++) { const int layer_num = a + len / 2 + b * colbuts; const unsigned int layer_flag = (1u << layer_num); - + if (layer_used & layer_flag) { if (layer_active & layer_flag) icon = ICON_LAYER_ACTIVE; @@ -498,7 +498,7 @@ static void ui_item_array( totdim = RNA_property_array_dimension(ptr, prop, dim_size); if (totdim != 2) return; /* only 2D matrices supported in UI so far */ - + w /= dim_size[0]; /* h /= dim_size[1]; */ /* UNUSED */ @@ -1451,7 +1451,7 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index if (icon == ICON_NONE) icon = RNA_property_ui_icon(prop); - + if (flag & UI_ITEM_R_ICON_ONLY) { /* pass */ } @@ -1504,7 +1504,7 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index if (no_bg) { layout->emboss = UI_EMBOSS_NONE; } - + /* array property */ if (index == RNA_NO_INDEX && is_array) ui_item_array( @@ -1526,7 +1526,7 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index else if (type == PROP_ENUM || type == PROP_STRING || type == PROP_POINTER) { but = ui_item_with_label(layout, block, name, icon, ptr, prop, index, 0, 0, w, h, flag); ui_but_add_search(but, ptr, prop, NULL, NULL); - + if (layout->redalert) UI_but_flag_enable(but, UI_BUT_REDALERT); } @@ -1539,7 +1539,7 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index if (toggle && but->type == UI_BTYPE_CHECKBOX) but->type = UI_BTYPE_TOGGLE; - + if (layout->redalert) UI_but_flag_enable(but, UI_BUT_REDALERT); } @@ -1783,7 +1783,7 @@ void uiItemPointerR(uiLayout *layout, struct PointerRNA *ptr, const char *propna StructRNA *icontype; int w, h; char namestr[UI_MAX_NAME_STR]; - + /* validate arguments */ prop = RNA_struct_find_property(ptr, propname); @@ -1792,7 +1792,7 @@ void uiItemPointerR(uiLayout *layout, struct PointerRNA *ptr, const char *propna RNA_struct_identifier(ptr->type), propname); return; } - + type = RNA_property_type(prop); if (!ELEM(type, PROP_POINTER, PROP_STRING, PROP_ENUM)) { RNA_warning("Property %s must be a pointer, string or enum", propname); @@ -2296,7 +2296,7 @@ static void ui_litem_layout_row(uiLayout *litem) if (totw == 0) return; - + if (w != 0) w -= (tot - 1) * litem->space; fixedw = 0; @@ -2327,7 +2327,7 @@ static void ui_litem_layout_row(uiLayout *litem) /* ignore min flag for rows with right or center alignment */ if (item->type != ITEM_BUTTON && ELEM(((uiLayout *)item)->alignment, UI_LAYOUT_ALIGN_RIGHT, UI_LAYOUT_ALIGN_CENTER) && - litem->alignment == UI_LAYOUT_ALIGN_EXPAND && + litem->alignment == UI_LAYOUT_ALIGN_EXPAND && ((uiItem *)litem)->flag & UI_ITEM_MIN) { min_flag = false; @@ -2435,7 +2435,7 @@ static void ui_litem_estimate_column(uiLayout *litem, bool is_box) if (item->next && (!is_box || item != litem->items.first)) litem->h += litem->space; } - + if (min_size_flag) { litem->item.flag |= UI_ITEM_MIN; } @@ -2825,7 +2825,7 @@ static void ui_litem_layout_absolute(uiLayout *litem) scalex = (float)litem->w / (float)totw; if (litem->h && toth > 0) scaley = (float)litem->h / (float)toth; - + x = litem->x; y = litem->y - scaley * toth; @@ -2876,7 +2876,7 @@ static void ui_litem_layout_split(uiLayout *litem) y = litem->y; percentage = (split->percentage == 0.0f) ? 1.0f / (float)tot : split->percentage; - + w = (litem->w - (tot - 1) * litem->space); colw = w * percentage; colw = MAX2(colw, 0); @@ -3509,7 +3509,7 @@ uiLayout *UI_block_layout(uiBlock *block, int dir, int type, int x, int y, int s BLI_addtail(&block->layouts, root); ui_layout_add_padding_button(root); - + return layout; } @@ -3532,7 +3532,7 @@ void UI_block_layout_set_current(uiBlock *block, uiLayout *layout) void ui_layout_add_but(uiLayout *layout, uiBut *but) { uiButtonItem *bitem; - + bitem = MEM_callocN(sizeof(uiButtonItem), "uiButtonItem"); bitem->item.type = ITEM_BUTTON; bitem->but = but; diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c index 3c65f727133..5c2fb0e7aaa 100644 --- a/source/blender/editors/interface/interface_ops.c +++ b/source/blender/editors/interface/interface_ops.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +17,7 @@ * * The Original Code is Copyright (C) 2009 Blender Foundation. * All rights reserved. - * + * * Contributor(s): Blender Foundation, Joshua Leung * * ***** END GPL LICENSE BLOCK ***** @@ -78,7 +78,7 @@ static int reset_default_theme_exec(bContext *C, wmOperator *UNUSED(op)) ui_theme_init_default(); ui_style_init_default(); WM_event_add_notifier(C, NC_WINDOW, NULL); - + return OPERATOR_FINISHED; } @@ -88,10 +88,10 @@ static void UI_OT_reset_default_theme(wmOperatorType *ot) ot->name = "Reset to Default Theme"; ot->idname = "UI_OT_reset_default_theme"; ot->description = "Reset to the default theme colors"; - + /* callbacks */ ot->exec = reset_default_theme_exec; - + /* flags */ ot->flag = OPTYPE_REGISTER; } @@ -109,7 +109,7 @@ static int copy_data_path_button_poll(bContext *C) if (ptr.id.data && ptr.data && prop) { path = RNA_path_from_ID_to_property(&ptr, prop); - + if (path) { MEM_freeN(path); return 1; @@ -255,7 +255,7 @@ static int reset_default_button_poll(bContext *C) int index; UI_context_active_but_prop_get(C, &ptr, &prop, &index); - + return (ptr.data && prop && RNA_property_editable(&ptr, prop)); } @@ -268,7 +268,7 @@ static int reset_default_button_exec(bContext *C, wmOperator *op) /* try to reset the nominated setting to its default value */ UI_context_active_but_prop_get(C, &ptr, &prop, &index); - + /* if there is a valid property that is editable... */ if (ptr.data && prop && RNA_property_editable(&ptr, prop)) { if (RNA_property_reset(&ptr, prop, (all) ? -1 : index)) @@ -291,7 +291,7 @@ static void UI_OT_reset_default_button(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_UNDO; - + /* properties */ RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array"); } @@ -800,7 +800,7 @@ static void UI_OT_copy_to_selected_button(wmOperatorType *ot) /* Reports to Textblock Operator ------------------------ */ -/* FIXME: this is just a temporary operator so that we can see all the reports somewhere +/* FIXME: this is just a temporary operator so that we can see all the reports somewhere * when there are too many to display... */ @@ -815,10 +815,10 @@ static int reports_to_text_exec(bContext *C, wmOperator *UNUSED(op)) Main *bmain = CTX_data_main(C); Text *txt; char *str; - + /* create new text-block to write to */ txt = BKE_text_add(bmain, "Recent Reports"); - + /* convert entire list to a display string, and add this to the text-block * - if commandline debug option enabled, show debug reports too * - otherwise, up to info (which is what users normally see) @@ -843,7 +843,7 @@ static void UI_OT_reports_to_textblock(wmOperatorType *ot) ot->name = "Reports to Text Block"; ot->idname = "UI_OT_reports_to_textblock"; ot->description = "Write the reports "; - + /* callbacks */ ot->poll = reports_to_text_poll; ot->exec = reports_to_text_exec; diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index f621a906789..121fdeb053d 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -29,7 +29,7 @@ /* a full doc with API notes can be found in bf-blender/trunk/blender/doc/guides/interface_API.txt */ - + #include <math.h> #include <stdlib.h> #include <string.h> @@ -129,7 +129,7 @@ static int panel_aligned(ScrArea *sa, ARegion *ar) return BUT_VERTICAL; else if (ELEM(ar->regiontype, RGN_TYPE_UI, RGN_TYPE_TOOLS, RGN_TYPE_TOOL_PROPS)) return BUT_VERTICAL; - + return 0; } @@ -170,7 +170,7 @@ static int panels_re_align(ScrArea *sa, ARegion *ar, Panel **r_pa) return 1; } } - + return 0; } @@ -270,7 +270,7 @@ Panel *UI_panel_begin(ScrArea *sa, ARegion *ar, uiBlock *block, PanelType *pt, P else pa->flag |= PNL_CLOSEDX; } - + pa->ofsx = 0; pa->ofsy = 0; pa->sizex = 0; @@ -318,7 +318,7 @@ Panel *UI_panel_begin(ScrArea *sa, ARegion *ar, uiBlock *block, PanelType *pt, P for (palast = ar->panels.first; palast; palast = palast->next) if (palast->runtime_flag & PNL_LAST_ADDED) break; - + if (newpanel) { pa->sortorder = (palast) ? palast->sortorder + 1 : 0; @@ -340,7 +340,7 @@ Panel *UI_panel_begin(ScrArea *sa, ARegion *ar, uiBlock *block, PanelType *pt, P if (pa->flag & PNL_CLOSED) return pa; *r_open = true; - + return pa; } @@ -398,7 +398,7 @@ void UI_draw_icon_tri(float x, float y, char dir, const float color[4]) float f3 = 0.15 * U.widget_unit; float f5 = 0.25 * U.widget_unit; float f7 = 0.35 * U.widget_unit; - + if (dir == 'h') { UI_draw_anti_tria(x - f3, y - f5, x - f3, y + f5, x + f7, y, color); } @@ -445,10 +445,10 @@ static void ui_draw_anti_x(unsigned int pos, float x1, float y1, float x2, float immVertex2f(pos, x2, y1); immEnd(); - + glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); - + } /* x 'icon' for panel header */ @@ -465,15 +465,15 @@ static void ui_draw_panel_scalewidget(unsigned int pos, const rcti *rect) { float xmin, xmax, dx; float ymin, ymax, dy; - + xmin = rect->xmax - PNL_HEADER + 2; xmax = rect->xmax - 3; ymin = rect->ymin + 3; ymax = rect->ymin + PNL_HEADER - 2; - + dx = 0.5f * (xmax - xmin); dy = 0.5f * (ymax - ymin); - + glEnable(GL_BLEND); immUniformColor4ub(255, 255, 255, 50); @@ -486,7 +486,7 @@ static void ui_draw_panel_scalewidget(unsigned int pos, const rcti *rect) immVertex2f(pos, xmax, ymax - dy); immEnd(); - + immUniformColor4ub(0, 0, 0, 50); immBegin(GWN_PRIM_LINES, 4); @@ -583,7 +583,7 @@ static void ui_draw_aligned_panel_header(uiStyle *style, uiBlock *block, const r UI_fontstyle_draw(&style->paneltitle, &hrect, activename, col_title); } else { - /* ignore 'pnl_icons', otherwise the text gets offset horizontally + /* ignore 'pnl_icons', otherwise the text gets offset horizontally * + 0.001f to avoid flirting with float inaccuracy */ hrect.xmin = rect->xmin + (PNL_ICON + 5) / block->aspect + 0.001f; @@ -818,7 +818,7 @@ typedef struct PanelSort { static int find_leftmost_panel(const void *a1, const void *a2) { const PanelSort *ps1 = a1, *ps2 = a2; - + if (ps1->pa->ofsx > ps2->pa->ofsx) return 1; else if (ps1->pa->ofsx < ps2->pa->ofsx) return -1; else if (ps1->pa->sortorder > ps2->pa->sortorder) return 1; @@ -831,7 +831,7 @@ static int find_leftmost_panel(const void *a1, const void *a2) static int find_highest_panel(const void *a1, const void *a2) { const PanelSort *ps1 = a1, *ps2 = a2; - + /* stick uppermost header-less panels to the top of the region - * prevent them from being sorted (multiple header-less panels have to be sorted though) */ if (ps1->pa->type->flag & PNL_NO_HEADER && ps2->pa->type->flag & PNL_NO_HEADER) { @@ -844,17 +844,17 @@ static int find_highest_panel(const void *a1, const void *a2) else if (ps1->pa->ofsy + ps1->pa->sizey > ps2->pa->ofsy + ps2->pa->sizey) return -1; else if (ps1->pa->sortorder > ps2->pa->sortorder) return 1; else if (ps1->pa->sortorder < ps2->pa->sortorder) return -1; - + return 0; } static int compare_panel(const void *a1, const void *a2) { const PanelSort *ps1 = a1, *ps2 = a2; - + if (ps1->pa->sortorder > ps2->pa->sortorder) return 1; else if (ps1->pa->sortorder < ps2->pa->sortorder) return -1; - + return 0; } @@ -868,7 +868,7 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo bool done; int align = panel_aligned(sa, ar); bool has_category_tabs = UI_panel_category_is_visible(ar); - + /* count active, not tabbed panels */ for (pa = ar->panels.first; pa; pa = pa->next) if ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab == NULL) @@ -888,7 +888,7 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo /* sort panels */ panelsort = MEM_callocN(tot * sizeof(PanelSort), "panelsort"); - + ps = panelsort; for (pa = ar->panels.first; pa; pa = pa->next) { if ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab == NULL) { @@ -897,7 +897,7 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo ps++; } } - + if (drag) { /* while we are dragging, we sort on location and update sortorder */ if (align == BUT_VERTICAL) @@ -911,7 +911,7 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo else /* otherwise use sortorder */ qsort(panelsort, tot, sizeof(PanelSort), compare_panel); - + /* no smart other default start loc! this keeps switching f5/f6/etc compatible */ ps = panelsort; ps->pa->ofsx = 0; @@ -935,7 +935,7 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo psnext->pa->ofsy = ps->pa->ofsy + get_panel_size_y(ps->pa) - get_panel_size_y(psnext->pa); } } - + /* we interpolate */ done = false; ps = panelsort; @@ -959,7 +959,7 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo MEM_freeN(ps->pa); } MEM_freeN(panelsort); - + return done; } @@ -993,7 +993,7 @@ static void ui_panels_size(ScrArea *sa, ARegion *ar, int *x, int *y) sizex = UI_PANEL_WIDTH; if (sizey == 0) sizey = -UI_PANEL_WIDTH; - + *x = sizex; *y = sizey; } @@ -1042,7 +1042,7 @@ void UI_panels_end(const bContext *C, ARegion *ar, int *x, int *y) ScrArea *sa = CTX_wm_area(C); uiBlock *block; Panel *panot, *panew, *patest, *pa, *firstpa; - + /* offset contents */ for (block = ar->uiblocks.first; block; block = block->next) if (block->active && block->panel) @@ -1088,10 +1088,10 @@ void UI_panels_end(const bContext *C, ARegion *ar, int *x, int *y) if (block->active && block->panel) if (!firstpa || block->panel->sortorder < firstpa->sortorder) firstpa = block->panel; - + if (firstpa) firstpa->runtime_flag |= PNL_FIRST; - + /* compute size taken up by panel */ ui_panels_size(sa, ar, x, y); } @@ -1101,7 +1101,7 @@ void UI_panels_draw(const bContext *C, ARegion *ar) uiBlock *block; UI_ThemeClearColor(TH_BACK); - + /* draw panels, selected on top */ for (block = ar->uiblocks.first; block; block = block->next) { if (block->active && block->panel && !(block->panel->flag & PNL_SELECT)) { @@ -1120,12 +1120,12 @@ void UI_panels_scale(ARegion *ar, float new_width) { uiBlock *block; uiBut *but; - + for (block = ar->uiblocks.first; block; block = block->next) { if (block->panel) { float fac = new_width / (float)block->panel->sizex; block->panel->sizex = new_width; - + for (but = block->buttons.first; but; but = but->next) { but->rect.xmin *= fac; but->rect.xmax *= fac; @@ -1141,13 +1141,13 @@ static void check_panel_overlap(ARegion *ar, Panel *panel) Panel *pa; /* also called with (panel == NULL) for clear */ - + for (pa = ar->panels.first; pa; pa = pa->next) { pa->flag &= ~PNL_OVERLAP; if (panel && (pa != panel)) { if (pa->paneltab == NULL && (pa->runtime_flag & PNL_ACTIVE)) { float safex = 0.2, safey = 0.2; - + if (pa->flag & PNL_CLOSEDX) safex = 0.05; else if (pa->flag & PNL_CLOSEDY) safey = 0.05; else if (panel->flag & PNL_CLOSEDX) safex = 0.05; @@ -1171,7 +1171,7 @@ static void ui_do_drag(const bContext *C, const wmEvent *event, Panel *panel) ScrArea *sa = CTX_wm_area(C); ARegion *ar = CTX_wm_region(C); short align = panel_aligned(sa, ar), dx = 0, dy = 0; - + /* first clip for window, no dragging outside */ if (!BLI_rcti_isect_pt_v(&ar->winrct, &event->x)) return; @@ -1181,10 +1181,10 @@ static void ui_do_drag(const bContext *C, const wmEvent *event, Panel *panel) dx *= (float)BLI_rctf_size_x(&ar->v2d.cur) / (float)BLI_rcti_size_x(&ar->winrct); dy *= (float)BLI_rctf_size_y(&ar->v2d.cur) / (float)BLI_rcti_size_y(&ar->winrct); - + if (data->state == PANEL_STATE_DRAG_SCALE) { panel->sizex = MAX2(data->startsizex + dx, UI_PANEL_MINX); - + if (data->startsizey - dy < UI_PANEL_MINY) dy = -UI_PANEL_MINY + data->startsizey; @@ -1194,11 +1194,11 @@ static void ui_do_drag(const bContext *C, const wmEvent *event, Panel *panel) else { /* reset the panel snapping, to allow dragging away from snapped edges */ panel->snap = PNL_SNAP_NONE; - + panel->ofsx = data->startofsx + dx; panel->ofsy = data->startofsy + dy; check_panel_overlap(ar, panel); - + if (align) uiAlignPanelStep(sa, ar, 0.2, true); } @@ -1388,9 +1388,9 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in rect_leftmost = rect_pin.xmin; /* mouse coordinates in panel space! */ - + /* XXX weak code, currently it assumes layout style for location of widgets */ - + /* check open/collapsed button */ if (event == RETKEY) button = 1; @@ -1411,7 +1411,7 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in else if (mx < rect_leftmost) { button = 1; } - + if (button) { if (button == 2) { /* close */ ED_region_tag_redraw(ar); @@ -1427,7 +1427,7 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in if (block->panel->flag & PNL_CLOSED) { block->panel->flag &= ~PNL_CLOSED; /* snap back up so full panel aligns with screen edge */ - if (block->panel->snap & PNL_SNAP_BOTTOM) + if (block->panel->snap & PNL_SNAP_BOTTOM) block->panel->ofsy = 0; if (event == LEFTMOUSE) { @@ -1444,14 +1444,14 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in else { /* snap down to bottom screen edge */ block->panel->flag |= PNL_CLOSEDY; - if (block->panel->snap & PNL_SNAP_BOTTOM) + if (block->panel->snap & PNL_SNAP_BOTTOM) block->panel->ofsy = -block->panel->sizey; if (event == LEFTMOUSE) { ui_panel_drag_collapse_handler_add(C, true); } } - + for (pa = ar->panels.first; pa; pa = pa->next) { if (pa->paneltab == block->panel) { if (block->panel->flag & PNL_CLOSED) pa->flag |= PNL_CLOSED; @@ -2068,27 +2068,27 @@ int ui_handler_panel_region(bContext *C, const wmEvent *event, ARegion *ar, cons /* XXX hardcoded key warning */ if (ELEM(mouse_state, PANEL_MOUSE_INSIDE_CONTENT, PANEL_MOUSE_INSIDE_HEADER) && event->val == KM_PRESS) { if (event->type == AKEY && ((event->ctrl + event->oskey + event->shift + event->alt) == 0)) { - + if (pa->flag & PNL_CLOSEDY) { if ((block->rect.ymax <= my) && (block->rect.ymax + PNL_HEADER >= my)) ui_handle_panel_header(C, block, mx, my, event->type, event->ctrl, event->shift); } else ui_handle_panel_header(C, block, mx, my, event->type, event->ctrl, event->shift); - + retval = WM_UI_HANDLER_BREAK; continue; } } - + /* on active button, do not handle panels */ if (ui_but_is_active(ar)) continue; - + if (ELEM(mouse_state, PANEL_MOUSE_INSIDE_CONTENT, PANEL_MOUSE_INSIDE_HEADER)) { if (event->val == KM_PRESS) { - + /* open close on header */ if (ELEM(event->type, RETKEY, PADENTER)) { if (mouse_state == PANEL_MOUSE_INSIDE_HEADER) { @@ -2100,7 +2100,7 @@ int ui_handler_panel_region(bContext *C, const wmEvent *event, ARegion *ar, cons else if (event->type == LEFTMOUSE) { /* all inside clicks should return in break - overlapping/float panels */ retval = WM_UI_HANDLER_BREAK; - + if (mouse_state == PANEL_MOUSE_INSIDE_HEADER) { ui_handle_panel_header(C, block, mx, my, event->type, event->ctrl, event->shift); retval = WM_UI_HANDLER_BREAK; @@ -2133,7 +2133,7 @@ int ui_handler_panel_region(bContext *C, const wmEvent *event, ARegion *ar, cons else if (event->type == PADPLUSKEY || event->type == PADMINUS) { #if 0 /* XXX make float panel exception? */ int zoom = 0; - + /* if panel is closed, only zoom if mouse is over the header */ if (pa->flag & (PNL_CLOSEDX | PNL_CLOSEDY)) { if (inside_header) @@ -2216,7 +2216,7 @@ static void panel_activate_state(const bContext *C, Panel *pa, uiHandlePanelStat uiHandlePanelData *data = pa->activedata; wmWindow *win = CTX_wm_window(C); ARegion *ar = CTX_wm_region(C); - + if (data && data->state == state) return; diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index fa25a119ada..0decc937e19 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +17,7 @@ * * The Original Code is Copyright (C) 2008 Blender Foundation. * All rights reserved. - * + * * Contributor(s): Blender Foundation * * ***** END GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 01456e2e122..adc3a24d1a9 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +17,7 @@ * * The Original Code is Copyright (C) 2009 Blender Foundation. * All rights reserved. - * + * * Contributor(s): Blender Foundation * * ***** END GPL LICENSE BLOCK ***** @@ -65,10 +65,10 @@ /* style + theme + layout-engine = UI */ /** - * This is a complete set of layout rules, the 'state' of the Layout - * Engine. Multiple styles are possible, defined via C or Python. Styles - * get a name, and will typically get activated per region type, like - * "Header", or "Listview" or "Toolbar". Properties of Style definitions + * This is a complete set of layout rules, the 'state' of the Layout + * Engine. Multiple styles are possible, defined via C or Python. Styles + * get a name, and will typically get activated per region type, like + * "Header", or "Listview" or "Toolbar". Properties of Style definitions * are: * * - default column properties, internal spacing, aligning, min/max width @@ -85,10 +85,10 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name, short uifont_id) { uiStyle *style = MEM_callocN(sizeof(uiStyle), "new style"); - + BLI_addtail(styles, style); BLI_strncpy(style->name, name, MAX_STYLE_NAME); - + style->panelzoom = 1.0; /* unused */ style->paneltitle.uifont_id = uifont_id; @@ -129,14 +129,14 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name, short uifont_id style->buttonspacey = 2; style->panelspace = 8; style->panelouter = 4; - + return style; } static uiFont *uifont_to_blfont(int id) { uiFont *font = U.uifonts.first; - + for (; font; font = font->next) { if (font->uifont_id == id) { return font; @@ -154,7 +154,7 @@ void UI_fontstyle_draw_ex( { int xofs = 0, yofs; int font_flag = BLF_CLIPPING; - + UI_fontstyle_set(fs); /* set the flag */ @@ -192,7 +192,7 @@ void UI_fontstyle_draw_ex( else if (fs->align == UI_STYLE_TEXT_RIGHT) { xofs = BLI_rcti_size_x(rect) - BLF_width(fs->uifont_id, str, len) - 0.1f * U.widget_unit; } - + /* clip is very strict, so we give it some space */ BLF_clipping(fs->uifont_id, rect->xmin - 2, rect->ymin - 4, rect->xmax + 1, rect->ymax + 4); BLF_position(fs->uifont_id, rect->xmin + xofs, rect->ymin + yofs, 0.0f); @@ -349,16 +349,16 @@ uiStyle *UI_style_get_dpi(void) { uiStyle *style = UI_style_get(); static uiStyle _style; - + _style = *style; - + _style.paneltitle.shadx = (short)(UI_DPI_FAC * _style.paneltitle.shadx); _style.paneltitle.shady = (short)(UI_DPI_FAC * _style.paneltitle.shady); _style.grouplabel.shadx = (short)(UI_DPI_FAC * _style.grouplabel.shadx); _style.grouplabel.shady = (short)(UI_DPI_FAC * _style.grouplabel.shady); _style.widgetlabel.shadx = (short)(UI_DPI_FAC * _style.widgetlabel.shadx); _style.widgetlabel.shady = (short)(UI_DPI_FAC * _style.widgetlabel.shady); - + _style.columnspace = (short)(UI_DPI_FAC * _style.columnspace); _style.templatespace = (short)(UI_DPI_FAC * _style.templatespace); _style.boxspace = (short)(UI_DPI_FAC * _style.boxspace); @@ -366,23 +366,23 @@ uiStyle *UI_style_get_dpi(void) _style.buttonspacey = (short)(UI_DPI_FAC * _style.buttonspacey); _style.panelspace = (short)(UI_DPI_FAC * _style.panelspace); _style.panelouter = (short)(UI_DPI_FAC * _style.panelouter); - + return &_style; } int UI_fontstyle_string_width(const uiFontStyle *fs, const char *str) { int width; - + if (fs->kerning == 1) /* for BLF_width */ BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT); - + UI_fontstyle_set(fs); width = BLF_width(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX); - + if (fs->kerning == 1) BLF_disable(fs->uifont_id, BLF_KERNING_DEFAULT); - + return width; } @@ -403,12 +403,12 @@ void uiStyleInit(void) uiStyle *style = U.uistyles.first; int monofont_size = datatoc_bmonofont_ttf_size; unsigned char *monofont_ttf = (unsigned char *)datatoc_bmonofont_ttf; - + /* recover from uninitialized dpi */ if (U.dpi == 0) U.dpi = 72; CLAMP(U.dpi, 48, 144); - + for (font = U.uifonts.first; font; font = font->next) { BLF_unload_id(font->blf_id); } @@ -439,9 +439,9 @@ void uiStyleInit(void) BLI_strncpy(font->filename, "default", sizeof(font->filename)); font->uifont_id = UIFONT_DEFAULT; } - + for (font = U.uifonts.first; font; font = font->next) { - + if (font->uifont_id == UIFONT_DEFAULT) { #ifdef WITH_INTERNATIONAL int font_size = datatoc_bfont_ttf_size; @@ -493,11 +493,11 @@ void uiStyleInit(void) BLF_size(font->blf_id, 14 * U.pixelsize, U.dpi); } } - + if (style == NULL) { ui_style_new(&U.uistyles, "Default Style", UIFONT_DEFAULT); } - + #ifdef WITH_INTERNATIONAL /* use unicode font for text editor and interactive console */ if (U.transopts & USER_DOTRANSLATE) { @@ -521,7 +521,7 @@ void uiStyleInit(void) } BLF_size(blf_mono_font, 12 * U.pixelsize, 72); - + /** * Second for rendering else we get threading problems, * @@ -537,7 +537,7 @@ void uiStyleInit(void) void UI_fontstyle_set(const uiFontStyle *fs) { uiFont *font = uifont_to_blfont(fs->uifont_id); - + BLF_size(font->blf_id, fs->points * U.pixelsize, U.dpi); } diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index ca00fb325da..d934d4dd1e4 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -426,7 +426,7 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event) PointerRNA idptr = RNA_property_pointer_get(&template_ui->ptr, template_ui->prop); ID *id = idptr.data; int event = GET_INT_FROM_POINTER(arg_event); - + switch (event) { case UI_ID_BROWSE: case UI_ID_PIN: @@ -727,14 +727,14 @@ static void template_ID( UI_but_flag_enable(but, UI_BUT_DISABLED); } } - + if (user_alert) UI_but_flag_enable(but, UI_BUT_REDALERT); - + if (id->lib == NULL && !(ELEM(GS(id->name), ID_GR, ID_SCE, ID_SCR, ID_TXT, ID_OB, ID_WS))) { uiDefButR(block, UI_BTYPE_TOGGLE, 0, "F", 0, 0, UI_UNIT_X, UI_UNIT_Y, &idptr, "use_fake_user", -1, 0, 0, -1, -1, NULL); } } - + if (flag & UI_ID_ADD_NEW) { template_id_def_new_but(block, id, template_ui, type, newop, editable, flag & UI_ID_OPEN, false, UI_UNIT_X); } @@ -745,14 +745,14 @@ static void template_ID( but = uiDefIconButO(block, UI_BTYPE_BUT, "FILE_OT_unpack_item", WM_OP_INVOKE_REGION_WIN, ICON_PACKAGE, 0, 0, UI_UNIT_X, UI_UNIT_Y, TIP_("Packed File, click to unpack")); UI_but_operator_ptr_get(but); - + RNA_string_set(but->opptr, "id_name", id->name + 2); RNA_int_set(but->opptr, "id_type", GS(id->name)); - + } else if (flag & UI_ID_OPEN) { int w = id ? UI_UNIT_X : (flag & UI_ID_ADD_NEW) ? UI_UNIT_X * 3 : UI_UNIT_X * 6; - + if (openop) { but = uiDefIconTextButO(block, UI_BTYPE_BUT, openop, WM_OP_INVOKE_DEFAULT, ICON_FILESEL, (id) ? "" : IFACE_("Open"), 0, 0, w, UI_UNIT_Y, NULL); @@ -767,7 +767,7 @@ static void template_ID( if ((idfrom && idfrom->lib) || !editable) UI_but_flag_enable(but, UI_BUT_DISABLED); } - + /* delete button */ /* don't use RNA_property_is_unlink here */ if (id && (flag & UI_ID_DELETE)) { @@ -973,7 +973,7 @@ void uiTemplateAnyID( { PropertyRNA *propID, *propType; uiLayout *split, *row, *sub; - + /* get properties... */ propID = RNA_struct_find_property(ptr, propname); propType = RNA_struct_find_property(ptr, proptypename); @@ -986,13 +986,13 @@ void uiTemplateAnyID( RNA_warning("pointer-type property not found: %s.%s", RNA_struct_identifier(ptr->type), proptypename); return; } - + /* Start drawing UI Elements using standard defines */ split = uiLayoutSplit(layout, 0.33f, false); /* NOTE: split amount here needs to be synced with normal labels */ - + /* FIRST PART ................................................ */ row = uiLayoutRow(split, false); - + /* Label - either use the provided text, or will become "ID-Block:" */ if (text) { if (text[0]) @@ -1001,20 +1001,20 @@ void uiTemplateAnyID( else { uiItemL(row, IFACE_("ID-Block:"), ICON_NONE); } - + /* SECOND PART ................................................ */ row = uiLayoutRow(split, true); - + /* ID-Type Selector - just have a menu of icons */ sub = uiLayoutRow(row, true); /* HACK: special group just for the enum, otherwise we */ uiLayoutSetAlignment(sub, UI_LAYOUT_ALIGN_LEFT); /* we get ugly layout with text included too... */ - + uiItemFullR(sub, ptr, propType, 0, 0, UI_ITEM_R_ICON_ONLY, "", ICON_NONE); - + /* ID-Block Selector - just use pointer widget... */ sub = uiLayoutRow(row, true); /* HACK: special group to counteract the effects of the previous */ uiLayoutSetAlignment(sub, UI_LAYOUT_ALIGN_EXPAND); /* enum, which now pushes everything too far right */ - + uiItemFullR(sub, ptr, propID, 0, 0, 0, "", ICON_NONE); } @@ -1236,20 +1236,20 @@ void uiTemplatePathBuilder(uiLayout *layout, PointerRNA *ptr, const char *propna { PropertyRNA *propPath; uiLayout *row; - + /* check that properties are valid */ propPath = RNA_struct_find_property(ptr, propname); if (!propPath || RNA_property_type(propPath) != PROP_STRING) { RNA_warning("path property not found: %s.%s", RNA_struct_identifier(ptr->type), propname); return; } - + /* Start drawing UI Elements using standard defines */ row = uiLayoutRow(layout, true); - + /* Path (existing string) Widget */ uiItemR(row, ptr, propname, 0, text, ICON_RNA); - + /* TODO: attach something to this to make allow searching of nested properties to 'build' the path */ } @@ -1267,7 +1267,7 @@ static void modifiers_convertToReal(bContext *C, void *ob_v, void *md_v) nmd->mode &= ~eModifierMode_Virtual; BLI_addhead(&ob->modifiers, nmd); - + modifier_unique_name(&ob->modifiers, nmd); ob->partype = PAROBJECT; @@ -1327,7 +1327,7 @@ static uiLayout *draw_modifier( /* rounded header ------------------------------------------------------------------- */ box = uiLayoutBox(column); - + if (isVirtual) { row = uiLayoutRow(box, false); uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_EXPAND); @@ -1336,7 +1336,7 @@ static uiLayout *draw_modifier( /* XXX this is not used now, since these cannot be accessed via RNA */ BLI_snprintf(str, sizeof(str), IFACE_("%s parent deform"), md->name); uiDefBut(block, UI_BTYPE_LABEL, 0, str, 0, 0, 185, UI_UNIT_Y, NULL, 0.0, 0.0, 0.0, 0.0, TIP_("Modifier name")); - + but = uiDefBut(block, UI_BTYPE_BUT, 0, IFACE_("Make Real"), 0, 0, 80, 16, NULL, 0.0, 0.0, 0.0, 0.0, TIP_("Convert virtual modifier to a real modifier")); UI_but_func_set(but, modifiers_convertToReal, ob, md); @@ -1345,15 +1345,15 @@ static uiLayout *draw_modifier( /* REAL MODIFIER */ row = uiLayoutRow(box, false); block = uiLayoutGetBlock(row); - + UI_block_emboss_set(block, UI_EMBOSS_NONE); /* Open/Close ................................. */ uiItemR(row, &ptr, "show_expanded", 0, "", ICON_NONE); - + /* modifier-type icon */ uiItemL(row, "", RNA_struct_ui_icon(ptr.type)); UI_block_emboss_set(block, UI_EMBOSS); - + /* modifier name */ md->scene = scene; if (mti->isDisabled && mti->isDisabled(md, 0)) { @@ -1361,7 +1361,7 @@ static uiLayout *draw_modifier( } uiItemR(row, &ptr, "name", 0, "", ICON_NONE); uiLayoutSetRedAlert(row, false); - + /* mode enabling buttons */ UI_block_align_begin(block); /* Collision and Surface are always enabled, hide buttons! */ @@ -1370,7 +1370,7 @@ static uiLayout *draw_modifier( { uiItemR(row, &ptr, "show_render", 0, "", ICON_NONE); uiItemR(row, &ptr, "show_viewport", 0, "", ICON_NONE); - + if (mti->flags & eModifierTypeFlag_SupportsEditmode) { sub = uiLayoutRow(row, true); if (!(md->mode & eModifierMode_Realtime)) { @@ -1406,13 +1406,13 @@ static uiLayout *draw_modifier( } UI_block_align_end(block); - + /* Up/Down + Delete ........................... */ UI_block_align_begin(block); uiItemO(row, "", ICON_TRIA_UP, "OBJECT_OT_modifier_move_up"); uiItemO(row, "", ICON_TRIA_DOWN, "OBJECT_OT_modifier_move_down"); UI_block_align_end(block); - + UI_block_emboss_set(block, UI_EMBOSS_NONE); /* When Modifier is a simulation, show button to switch to context rather than the delete button. */ if (modifier_can_delete(md) && @@ -1429,20 +1429,20 @@ static uiLayout *draw_modifier( UI_block_emboss_set(block, UI_EMBOSS); } - + /* modifier settings (under the header) --------------------------------------------------- */ if (!isVirtual && (md->mode & eModifierMode_Expanded)) { /* apply/convert/copy */ box = uiLayoutBox(column); row = uiLayoutRow(box, false); - + if (!ELEM(md->type, eModifierType_Collision, eModifierType_Surface)) { /* only here obdata, the rest of modifiers is ob level */ UI_block_lock_set(block, BKE_object_obdata_is_libdata(ob), ERROR_LIBDATA_MESSAGE); - + if (md->type == eModifierType_ParticleSystem) { ParticleSystem *psys = ((ParticleSystemModifierData *)md)->psys; - + if (!(ob->mode & OB_MODE_PARTICLE_EDIT)) { if (ELEM(psys->part->ren_as, PART_DRAW_GR, PART_DRAW_OB)) uiItemO(row, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Convert"), ICON_NONE, @@ -1456,17 +1456,17 @@ static uiLayout *draw_modifier( uiLayoutSetOperatorContext(row, WM_OP_INVOKE_DEFAULT); uiItemEnumO(row, "OBJECT_OT_modifier_apply", CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Apply"), 0, "apply_as", MODIFIER_APPLY_DATA); - + if (modifier_isSameTopology(md) && !modifier_isNonGeometrical(md)) { uiItemEnumO(row, "OBJECT_OT_modifier_apply", CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Apply as Shape Key"), 0, "apply_as", MODIFIER_APPLY_SHAPE); } } - + UI_block_lock_clear(block); UI_block_lock_set(block, ob && ID_IS_LINKED(ob), ERROR_LIBDATA_MESSAGE); - + if (!ELEM(md->type, eModifierType_Fluidsim, eModifierType_Softbody, eModifierType_ParticleSystem, eModifierType_Cloth, eModifierType_Smoke)) { @@ -1474,19 +1474,19 @@ static uiLayout *draw_modifier( "OBJECT_OT_modifier_copy"); } } - + /* result is the layout block inside the box, that we return so that modifier settings can be drawn */ result = uiLayoutColumn(box, false); block = uiLayoutAbsoluteBlock(box); } - + /* error messages */ if (md->error) { box = uiLayoutBox(column); row = uiLayoutRow(box, false); uiItemL(row, md->error, ICON_ERROR); } - + return result; } @@ -1511,9 +1511,9 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr) RNA_warning("Expected modifier on object"); return NULL; } - + UI_block_lock_set(uiLayoutGetBlock(layout), (ob && ID_IS_LINKED(ob)), ERROR_LIBDATA_MESSAGE); - + /* find modifier and draw it */ cageIndex = modifiers_getCageIndex(scene, ob, &lastCageIndex, 0); @@ -1630,7 +1630,7 @@ static void do_constraint_panels(bContext *C, void *ob_pt, int event) * * object_test_constraints(ob); * if (ob->pose) BKE_pose_update_constraint_flags(ob->pose); */ - + if (ob->type == OB_ARMATURE) DEG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB); else DEG_id_tag_update(&ob->id, OB_RECALC_OB); @@ -1662,7 +1662,7 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con) } else BLI_strncpy(typestr, IFACE_(cti->name), sizeof(typestr)); - + /* determine whether constraint is proxy protected or not */ if (BKE_constraints_proxylocked_owner(ob, pchan)) proxy_protected = (con->flag & CONSTRAINT_PROXY_LOCAL) == 0; @@ -1696,34 +1696,34 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con) if (con->flag & CONSTRAINT_DISABLE) uiLayoutSetRedAlert(row, true); - + if (proxy_protected == 0) { uiItemR(row, &ptr, "name", 0, "", ICON_NONE); } else uiItemL(row, con->name, ICON_NONE); - + uiLayoutSetRedAlert(row, false); - + /* proxy-protected constraints cannot be edited, so hide up/down + close buttons */ if (proxy_protected) { UI_block_emboss_set(block, UI_EMBOSS_NONE); - + /* draw a ghost icon (for proxy) and also a lock beside it, to show that constraint is "proxy locked" */ uiDefIconBut(block, UI_BTYPE_BUT, B_CONSTRAINT_TEST, ICON_GHOST, xco + 12.2f * UI_UNIT_X, yco, 0.95f * UI_UNIT_X, 0.95f * UI_UNIT_Y, NULL, 0.0, 0.0, 0.0, 0.0, TIP_("Proxy Protected")); uiDefIconBut(block, UI_BTYPE_BUT, B_CONSTRAINT_TEST, ICON_LOCKED, xco + 13.1f * UI_UNIT_X, yco, 0.95f * UI_UNIT_X, 0.95f * UI_UNIT_Y, NULL, 0.0, 0.0, 0.0, 0.0, TIP_("Proxy Protected")); - + UI_block_emboss_set(block, UI_EMBOSS); } else { short prev_proxylock, show_upbut, show_downbut; - - /* Up/Down buttons: + + /* Up/Down buttons: * Proxy-constraints are not allowed to occur after local (non-proxy) constraints * as that poses problems when restoring them, so disable the "up" button where - * it may cause this situation. + * it may cause this situation. * * Up/Down buttons should only be shown (or not grayed - todo) if they serve some purpose. */ @@ -1736,29 +1736,29 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con) } else prev_proxylock = 0; - + show_upbut = ((prev_proxylock == 0) && (con->prev)); show_downbut = (con->next) ? 1 : 0; - + /* enabled */ UI_block_emboss_set(block, UI_EMBOSS_NONE); uiItemR(row, &ptr, "mute", 0, "", (con->flag & CONSTRAINT_OFF) ? ICON_RESTRICT_VIEW_ON : ICON_RESTRICT_VIEW_OFF); UI_block_emboss_set(block, UI_EMBOSS); - + uiLayoutSetOperatorContext(row, WM_OP_INVOKE_DEFAULT); - + /* up/down */ if (show_upbut || show_downbut) { UI_block_align_begin(block); if (show_upbut) uiItemO(row, "", ICON_TRIA_UP, "CONSTRAINT_OT_move_up"); - + if (show_downbut) uiItemO(row, "", ICON_TRIA_DOWN, "CONSTRAINT_OT_move_down"); UI_block_align_end(block); } - + /* Close 'button' - emboss calls here disable drawing of 'button' behind X */ UI_block_emboss_set(block, UI_EMBOSS_NONE); uiItemO(row, "", ICON_X, "CONSTRAINT_OT_delete"); @@ -1803,7 +1803,7 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr) RNA_warning("Expected constraint on object"); return NULL; } - + UI_block_lock_set(uiLayoutGetBlock(layout), (ob && ID_IS_LINKED(ob)), ERROR_LIBDATA_MESSAGE); /* hrms, the temporal constraint should not draw! */ @@ -1922,7 +1922,7 @@ void uiTemplatePreview( if (GS(pid->name) == ID_MA || (pparent && GS(pparent->name) == ID_MA)) { if (GS(pid->name) == ID_MA) ma = (Material *)pid; else ma = (Material *)pparent; - + /* Create RNA Pointer */ RNA_pointer_create(&ma->id, &RNA_Material, ma, &material_ptr); @@ -1934,7 +1934,7 @@ void uiTemplatePreview( if (pr_texture) { /* Create RNA Pointer */ RNA_pointer_create(id, &RNA_Texture, tex, &texture_ptr); - + uiLayoutRow(layout, true); uiDefButS(block, UI_BTYPE_ROW, B_MATPRV, IFACE_("Texture"), 0, 0, UI_UNIT_X * 10, UI_UNIT_Y, pr_texture, 10, TEX_PR_TEXTURE, 0, 0, ""); @@ -1956,7 +1956,7 @@ void uiTemplatePreview( } uiDefButS(block, UI_BTYPE_ROW, B_MATPRV, IFACE_("Both"), 0, 0, UI_UNIT_X * 10, UI_UNIT_Y, pr_texture, 10, TEX_PR_BOTH, 0, 0, ""); - + /* Alpha button for texture preview */ if (*pr_texture != TEX_PR_OTHER) { row = uiLayoutRow(layout, false); @@ -2238,7 +2238,7 @@ static uiBlock *ui_icon_view_menu_cb(bContext *C, ARegion *ar, void *arg_litem) if (free) { MEM_freeN((void *)item); } - + return block; } @@ -2416,26 +2416,26 @@ static void curvemap_buttons_zoom_out(bContext *C, void *cumap_v, void *UNUSED(u if (BLI_rctf_size_x(&cumap->curr) < 20.0f * BLI_rctf_size_x(&cumap->clipr)) { d = d1 = 0.15f * BLI_rctf_size_x(&cumap->curr); - if (cumap->flag & CUMA_DO_CLIP) + if (cumap->flag & CUMA_DO_CLIP) if (cumap->curr.xmin - d < cumap->clipr.xmin) d1 = cumap->curr.xmin - cumap->clipr.xmin; cumap->curr.xmin -= d1; d1 = d; - if (cumap->flag & CUMA_DO_CLIP) + if (cumap->flag & CUMA_DO_CLIP) if (cumap->curr.xmax + d > cumap->clipr.xmax) d1 = -cumap->curr.xmax + cumap->clipr.xmax; cumap->curr.xmax += d1; d = d1 = 0.15f * BLI_rctf_size_y(&cumap->curr); - if (cumap->flag & CUMA_DO_CLIP) + if (cumap->flag & CUMA_DO_CLIP) if (cumap->curr.ymin - d < cumap->clipr.ymin) d1 = cumap->curr.ymin - cumap->clipr.ymin; cumap->curr.ymin -= d1; d1 = d; - if (cumap->flag & CUMA_DO_CLIP) + if (cumap->flag & CUMA_DO_CLIP) if (cumap->curr.ymax + d > cumap->clipr.ymax) d1 = -cumap->curr.ymax + cumap->clipr.ymax; cumap->curr.ymax += d1; @@ -2449,7 +2449,7 @@ static void curvemap_buttons_setclip(bContext *UNUSED(C), void *cumap_v, void *U CurveMapping *cumap = cumap_v; curvemapping_changed(cumap, false); -} +} static void curvemap_buttons_delete(bContext *C, void *cb_v, void *cumap_v) { @@ -2622,15 +2622,15 @@ static void curvemap_buttons_reset(bContext *C, void *cb_v, void *cumap_v) { CurveMapping *cumap = cumap_v; int a; - + cumap->preset = CURVE_PRESET_LINE; for (a = 0; a < CM_TOT; a++) curvemap_reset(cumap->cm + a, &cumap->clipr, cumap->preset, CURVEMAP_SLOPE_POSITIVE); - + cumap->black[0] = cumap->black[1] = cumap->black[2] = 0.0f; cumap->white[0] = cumap->white[1] = cumap->white[2] = 1.0f; curvemapping_set_black_white(cumap, NULL, NULL); - + curvemapping_changed(cumap, false); rna_update_cb(C, cb_v, NULL); @@ -2700,7 +2700,7 @@ static void curvemap_buttons_layout( /* HSV */ sub = uiLayoutRow(row, true); uiLayoutSetAlignment(sub, UI_LAYOUT_ALIGN_LEFT); - + if (cumap->cm[0].curve) { bt = uiDefButI(block, UI_BTYPE_ROW, 0, "H", 0, 0, dx, dx, &cumap->cur, 0.0, 0.0, 0.0, 0.0, ""); UI_but_func_set(bt, curvemap_buttons_redraw, NULL, NULL); @@ -2716,7 +2716,7 @@ static void curvemap_buttons_layout( } else uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_RIGHT); - + if (labeltype == 'h') bg = UI_GRAD_H; @@ -2906,7 +2906,7 @@ void uiTemplateColorPicker( if (cubic) but->flag |= UI_BUT_COLOR_CUBIC; - + if (value_slider) { switch (U.color_picker_type) { case USER_CP_CIRCLE_HSL: @@ -3005,7 +3005,7 @@ static void handle_layer_buttons(bContext *C, void *arg1, void *arg2) if (!shift) { tot = RNA_property_array_length(&but->rnapoin, but->rnaprop); - + /* Normally clicking only selects one layer */ RNA_property_boolean_set_index(&but->rnapoin, but->rnaprop, cur, true); for (i = 0; i < tot; ++i) { @@ -3037,8 +3037,8 @@ void uiTemplateLayers( RNA_warning("layers property not found: %s.%s", RNA_struct_identifier(ptr->type), propname); return; } - - /* the number of layers determines the way we group them + + /* the number of layers determines the way we group them * - we want 2 rows only (for now) * - the number of columns (cols) is the total number of buttons per row * the 'remainder' is added to this, as it will be ok to have first row slightly wider if need be @@ -3058,12 +3058,12 @@ void uiTemplateLayers( if (RNA_property_array_length(used_ptr, used_prop) < layers) used_prop = NULL; } - + /* layers are laid out going across rows, with the columns being divided into groups */ - + for (group = 0; group < groups; group++) { uCol = uiLayoutColumn(layout, true); - + for (row = 0; row < 2; row++) { uiBlock *block; uiBut *but; @@ -3071,7 +3071,7 @@ void uiTemplateLayers( uRow = uiLayoutRow(uCol, true); block = uiLayoutGetBlock(uRow); layer = groups * cols_per_group * row + cols_per_group * group; - + /* add layers as toggle buts */ for (col = 0; (col < cols_per_group) && (layer < layers); col++, layer++) { int icon = 0; @@ -3081,7 +3081,7 @@ void uiTemplateLayers( icon = ICON_LAYER_ACTIVE; else if (used_prop && RNA_property_boolean_get_index(used_ptr, used_prop, layer)) icon = ICON_LAYER_USED; - + but = uiDefAutoButR(block, ptr, prop, layer, "", icon, 0, 0, UI_UNIT_X / 2, UI_UNIT_Y / 2); UI_but_func_set(but, handle_layer_buttons, but, SET_INT_IN_POINTER(layer)); but->type = UI_BTYPE_TOGGLE; @@ -3778,7 +3778,7 @@ void uiTemplateList( static void operator_call_cb(bContext *C, void *UNUSED(arg1), void *arg2) { wmOperatorType *ot = arg2; - + if (ot) WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, NULL); } @@ -3827,10 +3827,10 @@ static void operator_search_cb(const bContext *C, void *UNUSED(arg), const char if (WM_operator_poll((bContext *)C, ot)) { char name[256]; int len = strlen(ot_ui_name); - + /* display name for menu, can hold hotkey */ BLI_strncpy(name, ot_ui_name, sizeof(name)); - + /* check for hotkey */ if (len < sizeof(name) - 6) { if (WM_key_event_operator_string( @@ -3840,7 +3840,7 @@ static void operator_search_cb(const bContext *C, void *UNUSED(arg), const char name[len] = UI_SEP_CHAR; } } - + if (false == UI_search_item_add(items, name, ot, 0)) break; } @@ -3860,7 +3860,7 @@ void uiTemplateOperatorSearch(uiLayout *layout) uiBlock *block; uiBut *but; static char search[256] = ""; - + block = uiLayoutGetBlock(layout); UI_block_layout_set_current(block, layout); @@ -4073,7 +4073,7 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C) uiBlock *block; void *owner = NULL; int handle_event, icon = 0; - + block = uiLayoutGetBlock(layout); UI_block_layout_set_current(block, layout); @@ -4157,7 +4157,7 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C) if (owner) { const uiFontStyle *fstyle = UI_FSTYLE_WIDGET; bool active = !(G.is_break || WM_jobs_is_stopped(wm, owner)); - + uiLayout *row = uiLayoutRow(layout, false); block = uiLayoutGetBlock(row); @@ -4209,29 +4209,29 @@ void uiTemplateReportsBanner(uiLayout *layout, bContext *C) ReportList *reports = CTX_wm_reports(C); Report *report = BKE_reports_last_displayable(reports); ReportTimerInfo *rti; - + uiLayout *ui_abs; uiBlock *block; uiBut *but; uiStyle *style = UI_style_get(); int width; int icon; - + /* if the report display has timed out, don't show */ if (!reports->reporttimer) return; - + rti = (ReportTimerInfo *)reports->reporttimer->customdata; - + if (!rti || rti->widthfac == 0.0f || !report) return; - + ui_abs = uiLayoutAbsolute(layout, false); block = uiLayoutGetBlock(ui_abs); - + UI_fontstyle_set(&style->widgetlabel); width = BLF_width(style->widgetlabel.uifont_id, report->message, report->len); width = min_ii((int)(rti->widthfac * width), width); width = max_ii(width, 10); - + /* make a box around the report to make it stand out */ UI_block_align_begin(block); but = uiDefBut(block, UI_BTYPE_ROUNDBOX, 0, "", 0, 0, UI_UNIT_X + 10, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, ""); @@ -4245,12 +4245,12 @@ void uiTemplateReportsBanner(uiLayout *layout, bContext *C) but->col[3] = 255; UI_block_align_end(block); - - + + /* icon and report message on top */ icon = UI_icon_from_report_type(report->type); - - /* XXX: temporary operator to dump all reports to a text block, but only if more than 1 report + + /* XXX: temporary operator to dump all reports to a text block, but only if more than 1 report * to be shown instead of icon when appropriate... */ UI_block_emboss_set(block, UI_EMBOSS_NONE); @@ -4262,7 +4262,7 @@ void uiTemplateReportsBanner(uiLayout *layout, bContext *C) uiDefIconBut(block, UI_BTYPE_LABEL, 0, icon, 2, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, ""); UI_block_emboss_set(block, UI_EMBOSS); - + uiDefBut(block, UI_BTYPE_LABEL, 0, report->message, UI_UNIT_X + 10, 0, UI_UNIT_X + width, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, ""); } @@ -4283,7 +4283,7 @@ static void template_keymap_item_properties(uiLayout *layout, const char *title, if (title) uiItemL(layout, title, ICON_NONE); - + flow = uiLayoutColumnFlow(layout, 2, false); RNA_STRUCT_BEGIN (ptr, prop) @@ -4413,17 +4413,17 @@ static uiBlock *component_menu(bContext *C, ARegion *ar, void *args_v) ComponentMenuArgs *args = (ComponentMenuArgs *)args_v; uiBlock *block; uiLayout *layout; - + block = UI_block_begin(C, ar, __func__, UI_EMBOSS); UI_block_flag_enable(block, UI_BLOCK_KEEP_OPEN); - + layout = uiLayoutColumn(UI_block_layout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 0, UI_UNIT_X * 6, UI_UNIT_Y, 0, UI_style_get()), 0); - + uiItemR(layout, &args->ptr, args->propname, UI_ITEM_R_EXPAND, "", ICON_NONE); - + UI_block_bounds_set_normal(block, 6); UI_block_direction_set(block, UI_DIR_DOWN); - + return block; } void uiTemplateComponentMenu(uiLayout *layout, PointerRNA *ptr, const char *propname, const char *name) @@ -4431,10 +4431,10 @@ void uiTemplateComponentMenu(uiLayout *layout, PointerRNA *ptr, const char *prop ComponentMenuArgs *args = MEM_callocN(sizeof(ComponentMenuArgs), "component menu template args"); uiBlock *block; uiBut *but; - + args->ptr = *ptr; BLI_strncpy(args->propname, propname, sizeof(args->propname)); - + block = uiLayoutGetBlock(layout); UI_block_align_begin(block); @@ -4443,7 +4443,7 @@ void uiTemplateComponentMenu(uiLayout *layout, PointerRNA *ptr, const char *prop but->rnapoin = *ptr; but->rnaprop = RNA_struct_find_property(ptr, propname); but->rnaindex = 0; - + UI_block_align_end(block); } @@ -4453,17 +4453,17 @@ void uiTemplateNodeSocket(uiLayout *layout, bContext *UNUSED(C), float *color) { uiBlock *block; uiBut *but; - + block = uiLayoutGetBlock(layout); UI_block_align_begin(block); - + /* XXX using explicit socket colors is not quite ideal. * Eventually it should be possible to use theme colors for this purpose, * but this requires a better design for extendable color palettes in user prefs. */ but = uiDefBut(block, UI_BTYPE_NODE_SOCKET, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0, 0, 0, 0, ""); rgba_float_to_uchar(but->col, color); - + UI_block_align_end(block); } diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 5841a61acc5..e049416ce07 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +17,7 @@ * * The Original Code is Copyright (C) 2009 Blender Foundation. * All rights reserved. - * + * * Contributor(s): Blender Foundation * * ***** END GPL LICENSE BLOCK ***** @@ -71,7 +71,7 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind if (arraylen && index == -1) return NULL; - + if (icon && name && name[0] == '\0') but = uiDefIconButR_prop(block, UI_BTYPE_ICON_TOGGLE, 0, icon, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL); else if (icon) @@ -309,7 +309,7 @@ void ui_rna_collection_search_cb(const struct bContext *C, void *arg, const char } -/***************************** ID Utilities *******************************/ +/***************************** ID Utilities *******************************/ int UI_icon_from_id(ID *id) { Object *ob; @@ -318,7 +318,7 @@ int UI_icon_from_id(ID *id) if (id == NULL) return ICON_NONE; - + idcode = GS(id->name); /* exception for objects */ diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index cdc95d4fb32..0cea9824249 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +17,7 @@ * * The Original Code is Copyright (C) 2009 Blender Foundation. * All rights reserved. - * + * * Contributor(s): Blender Foundation * * ***** END GPL LICENSE BLOCK ***** @@ -106,10 +106,10 @@ typedef struct uiWidgetTrias { unsigned int tot; int type; float size, center[2]; - + float vec[16][2]; const unsigned int (*index)[3]; - + } uiWidgetTrias; /* max as used by round_box__edges */ @@ -123,9 +123,9 @@ typedef struct uiWidgetBase { float outer_v[WIDGET_SIZE_MAX][2]; float inner_v[WIDGET_SIZE_MAX][2]; float inner_uv[WIDGET_SIZE_MAX][2]; - + bool draw_inner, draw_outline, draw_emboss; - + uiWidgetTrias tria1; uiWidgetTrias tria2; @@ -134,22 +134,22 @@ typedef struct uiWidgetBase { } uiWidgetBase; /** uiWidgetType: for time being only for visual appearance, - * later, a handling callback can be added too + * later, a handling callback can be added too */ typedef struct uiWidgetType { - + /* pointer to theme color definition */ uiWidgetColors *wcol_theme; uiWidgetStateColors *wcol_state; - + /* converted colors for state */ uiWidgetColors wcol; - + void (*state)(struct uiWidgetType *, int state); void (*draw)(uiWidgetColors *, rcti *, int state, int roundboxalign); void (*custom)(uiBut *, uiWidgetColors *, rcti *, int state, int roundboxalign); void (*text)(uiFontStyle *, uiWidgetColors *, uiBut *, rcti *); - + } uiWidgetType; @@ -589,9 +589,9 @@ static int round_box_shadow_edges(float (*vert)[2], const rcti *rect, float rad, float vec[WIDGET_CURVE_RESOLU][2]; float minx, miny, maxx, maxy; int a, tot = 0; - + rad += step; - + if (2.0f * rad > BLI_rcti_size_y(rect)) rad = 0.5f * BLI_rcti_size_y(rect); @@ -599,13 +599,13 @@ static int round_box_shadow_edges(float (*vert)[2], const rcti *rect, float rad, miny = rect->ymin - step; maxx = rect->xmax + step; maxy = rect->ymax + step; - + /* mult */ for (a = 0; a < WIDGET_CURVE_RESOLU; a++) { vec[a][0] = rad * cornervec[a][0]; vec[a][1] = rad * cornervec[a][1]; } - + /* start with left-top, anti clockwise */ if (roundboxalign & UI_CNR_TOP_LEFT) { for (a = 0; a < WIDGET_CURVE_RESOLU; a++, tot++) { @@ -619,7 +619,7 @@ static int round_box_shadow_edges(float (*vert)[2], const rcti *rect, float rad, vert[tot][1] = maxy; } } - + if (roundboxalign & UI_CNR_BOTTOM_LEFT) { for (a = 0; a < WIDGET_CURVE_RESOLU; a++, tot++) { vert[tot][0] = minx + vec[a][1]; @@ -632,7 +632,7 @@ static int round_box_shadow_edges(float (*vert)[2], const rcti *rect, float rad, vert[tot][1] = miny; } } - + if (roundboxalign & UI_CNR_BOTTOM_RIGHT) { for (a = 0; a < WIDGET_CURVE_RESOLU; a++, tot++) { vert[tot][0] = maxx - rad + vec[a][0]; @@ -645,7 +645,7 @@ static int round_box_shadow_edges(float (*vert)[2], const rcti *rect, float rad, vert[tot][1] = miny; } } - + if (roundboxalign & UI_CNR_TOP_RIGHT) { for (a = 0; a < WIDGET_CURVE_RESOLU; a++, tot++) { vert[tot][0] = maxx - vec[a][1]; @@ -680,7 +680,7 @@ static void round_box__edges(uiWidgetBase *wt, int roundboxalign, const rcti *re minsize = min_ii(BLI_rcti_size_x(rect) * hnum, BLI_rcti_size_y(rect) * vnum); - + if (2.0f * rad > minsize) rad = 0.5f * minsize; @@ -705,17 +705,17 @@ static void round_box__edges(uiWidgetBase *wt, int roundboxalign, const rcti *re vec[a][0] = rad * cornervec[a][0]; vec[a][1] = rad * cornervec[a][1]; } - + /* corner left-bottom */ if (roundboxalign & UI_CNR_BOTTOM_LEFT) { - + for (a = 0; a < WIDGET_CURVE_RESOLU; a++, tot++) { wt->inner_v[tot][0] = minxi + veci[a][1]; wt->inner_v[tot][1] = minyi + radi - veci[a][0]; - + wt->outer_v[tot][0] = minx + vec[a][1]; wt->outer_v[tot][1] = miny + rad - vec[a][0]; - + wt->inner_uv[tot][0] = facxi * (wt->inner_v[tot][0] - minxi); wt->inner_uv[tot][1] = facyi * (wt->inner_v[tot][1] - minyi); } @@ -723,26 +723,26 @@ static void round_box__edges(uiWidgetBase *wt, int roundboxalign, const rcti *re else { wt->inner_v[tot][0] = minxi; wt->inner_v[tot][1] = minyi; - + wt->outer_v[tot][0] = minx; wt->outer_v[tot][1] = miny; wt->inner_uv[tot][0] = 0.0f; wt->inner_uv[tot][1] = 0.0f; - + tot++; } - + /* corner right-bottom */ if (roundboxalign & UI_CNR_BOTTOM_RIGHT) { - + for (a = 0; a < WIDGET_CURVE_RESOLU; a++, tot++) { wt->inner_v[tot][0] = maxxi - radi + veci[a][0]; wt->inner_v[tot][1] = minyi + veci[a][1]; - + wt->outer_v[tot][0] = maxx - rad + vec[a][0]; wt->outer_v[tot][1] = miny + vec[a][1]; - + wt->inner_uv[tot][0] = facxi * (wt->inner_v[tot][0] - minxi); wt->inner_uv[tot][1] = facyi * (wt->inner_v[tot][1] - minyi); } @@ -750,28 +750,28 @@ static void round_box__edges(uiWidgetBase *wt, int roundboxalign, const rcti *re else { wt->inner_v[tot][0] = maxxi; wt->inner_v[tot][1] = minyi; - + wt->outer_v[tot][0] = maxx; wt->outer_v[tot][1] = miny; wt->inner_uv[tot][0] = 1.0f; wt->inner_uv[tot][1] = 0.0f; - + tot++; } - + wt->halfwayvert = tot; - + /* corner right-top */ if (roundboxalign & UI_CNR_TOP_RIGHT) { - + for (a = 0; a < WIDGET_CURVE_RESOLU; a++, tot++) { wt->inner_v[tot][0] = maxxi - veci[a][1]; wt->inner_v[tot][1] = maxyi - radi + veci[a][0]; - + wt->outer_v[tot][0] = maxx - vec[a][1]; wt->outer_v[tot][1] = maxy - rad + vec[a][0]; - + wt->inner_uv[tot][0] = facxi * (wt->inner_v[tot][0] - minxi); wt->inner_uv[tot][1] = facyi * (wt->inner_v[tot][1] - minyi); } @@ -779,42 +779,42 @@ static void round_box__edges(uiWidgetBase *wt, int roundboxalign, const rcti *re else { wt->inner_v[tot][0] = maxxi; wt->inner_v[tot][1] = maxyi; - + wt->outer_v[tot][0] = maxx; wt->outer_v[tot][1] = maxy; - + wt->inner_uv[tot][0] = 1.0f; wt->inner_uv[tot][1] = 1.0f; - + tot++; } - + /* corner left-top */ if (roundboxalign & UI_CNR_TOP_LEFT) { - + for (a = 0; a < WIDGET_CURVE_RESOLU; a++, tot++) { wt->inner_v[tot][0] = minxi + radi - veci[a][0]; wt->inner_v[tot][1] = maxyi - veci[a][1]; - + wt->outer_v[tot][0] = minx + rad - vec[a][0]; wt->outer_v[tot][1] = maxy - vec[a][1]; - + wt->inner_uv[tot][0] = facxi * (wt->inner_v[tot][0] - minxi); wt->inner_uv[tot][1] = facyi * (wt->inner_v[tot][1] - minyi); } - + } else { - + wt->inner_v[tot][0] = minxi; wt->inner_v[tot][1] = maxyi; - + wt->outer_v[tot][0] = minx; wt->outer_v[tot][1] = maxy; - + wt->inner_uv[tot][0] = 0.0f; wt->inner_uv[tot][1] = 1.0f; - + tot++; } @@ -953,17 +953,17 @@ static void shape_preset_trias_from_rect_checkmark(uiWidgetTrias *tria, const rc float centx, centy, size; int a; tria->type = ROUNDBOX_TRIA_CHECK; - + /* center position and size */ tria->center[0] = centx = rect->xmin + 0.5f * BLI_rcti_size_y(rect); tria->center[1] = centy = rect->ymin + 0.5f * BLI_rcti_size_y(rect); tria->size = size = 0.5f * BLI_rcti_size_y(rect); - + for (a = 0; a < 6; a++) { tria->vec[a][0] = size * g_shape_preset_checkmark_vert[a][0] + centx; tria->vec[a][1] = size * g_shape_preset_checkmark_vert[a][1] + centy; } - + tria->tot = 4; tria->index = g_shape_preset_checkmark_face; } @@ -1256,17 +1256,17 @@ static void widget_draw_icon_ex( { float xs = 0.0f, ys = 0.0f; float aspect, height; - + if (but->flag & UI_BUT_ICON_PREVIEW) { glEnable(GL_BLEND); widget_draw_preview(icon, alpha, rect); glDisable(GL_BLEND); return; } - + /* this icon doesn't need draw... */ if (icon == ICON_BLANK1 && (but->flag & UI_BUT_ICON_SUBMENU) == 0) return; - + aspect = but->block->aspect / UI_DPI_FAC; height = icon_size / aspect; @@ -1287,12 +1287,12 @@ static void widget_draw_icon_ex( alpha *= 0.5f; } } - + glEnable(GL_BLEND); - + if (icon && icon != ICON_BLANK1) { float ofs = 1.0f / aspect; - + if (but->drawflag & UI_BUT_ICON_LEFT) { /* special case - icon_only pie buttons */ if (ui_block_is_pie_menu(but->block) && !ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_POPOVER) && but->str && but->str[0] == '\0') @@ -1330,10 +1330,10 @@ static void widget_draw_icon_ex( if (show_menu_icon) { xs = rect->xmax - UI_DPI_ICON_SIZE - aspect; ys = (rect->ymin + rect->ymax - height) / 2.0f; - + UI_icon_draw_aspect(xs, ys, ICON_RIGHTARROW_THIN, aspect, alpha); } - + glDisable(GL_BLEND); } @@ -1606,16 +1606,16 @@ static void ui_text_clip_right_label(uiFontStyle *fstyle, uiBut *but, const rcti char *cpoin = NULL; int drawstr_len = strlen(but->drawstr); const char *cpend = but->drawstr + drawstr_len; - + /* need to set this first */ UI_fontstyle_set(fstyle); - + if (fstyle->kerning == 1) /* for BLF_width */ BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT); - + but->strwidth = BLF_width(fstyle->uifont_id, but->drawstr, sizeof(but->drawstr)); but->ofs = 0; - + /* First shorten num-buttons eg, * Translucency: 0.000 @@ -1625,10 +1625,10 @@ static void ui_text_clip_right_label(uiFontStyle *fstyle, uiBut *but, const rcti /* find the space after ':' separator */ cpoin = strrchr(but->drawstr, ':'); - + if (cpoin && (cpoin < cpend - 2)) { char *cp2 = cpoin; - + /* chop off the leading text, starting from the right */ while (but->strwidth > okwidth && cp2 > but->drawstr) { const char *prev_utf8 = BLI_str_find_prev_char_utf8(but->drawstr, cp2); @@ -1640,12 +1640,12 @@ static void ui_text_clip_right_label(uiFontStyle *fstyle, uiBut *but, const rcti drawstr_len -= bytes; // BLI_assert(strlen(but->drawstr) == drawstr_len); - + but->strwidth = BLF_width(fstyle->uifont_id, but->drawstr + but->ofs, sizeof(but->drawstr) - but->ofs); if (but->strwidth < 10) break; } - - + + /* after the leading text is gone, chop off the : and following space, with ofs */ while ((but->strwidth > okwidth) && (but->ofs < 2)) { ui_text_clip_give_next_off(but, but->drawstr); @@ -1664,7 +1664,7 @@ static void ui_text_clip_right_label(uiFontStyle *fstyle, uiBut *but, const rcti but->strwidth = strwidth; but->drawstr[drawstr_len] = 0; } - + if (fstyle->kerning == 1) BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT); } @@ -1726,17 +1726,17 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b #endif UI_fontstyle_set(fstyle); - + if (but->editstr || (but->drawflag & UI_BUT_TEXT_LEFT)) fstyle->align = UI_STYLE_TEXT_LEFT; else if (but->drawflag & UI_BUT_TEXT_RIGHT) fstyle->align = UI_STYLE_TEXT_RIGHT; else fstyle->align = UI_STYLE_TEXT_CENTER; - + if (fstyle->kerning == 1) /* for BLF_width */ BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT); - + /* Special case: when we're entering text for multiple buttons, * don't draw the text for any of the multi-editing buttons */ @@ -1780,7 +1780,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b /* text button selection */ if ((but->selend - but->selsta) > 0) { int selsta_draw, selwidth_draw; - + if (drawstr[0] != 0) { /* We are drawing on top of widget bases. Flush cache. */ glEnable(GL_BLEND); @@ -1858,7 +1858,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b } #endif } - + if (fstyle->kerning == 1) BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT); @@ -1879,7 +1879,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b } } } - + #ifdef USE_NUMBUTS_LR_ALIGN if (!drawstr_right && ELEM(but->type, UI_BTYPE_NUM, UI_BTYPE_NUM_SLIDER) && /* if we're editing or multi-drag (fake editing), then use left alignment */ @@ -2116,10 +2116,10 @@ static struct uiWidgetColors wcol_num = { {180, 180, 180, 255}, {153, 153, 153, 255}, {90, 90, 90, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 1, -20, 0, 0, @@ -2131,10 +2131,10 @@ static struct uiWidgetColors wcol_numslider = { {180, 180, 180, 255}, {153, 153, 153, 255}, {128, 128, 128, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 1, -20, 0, 0, @@ -2146,10 +2146,10 @@ static struct uiWidgetColors wcol_text = { {153, 153, 153, 255}, {153, 153, 153, 255}, {90, 90, 90, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 1, 0, 25, 0, @@ -2161,10 +2161,10 @@ static struct uiWidgetColors wcol_option = { {70, 70, 70, 255}, {70, 70, 70, 255}, {255, 255, 255, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 1, 15, -15, 0, @@ -2177,10 +2177,10 @@ static struct uiWidgetColors wcol_menu = { {70, 70, 70, 255}, {70, 70, 70, 255}, {255, 255, 255, 255}, - + {255, 255, 255, 255}, {204, 204, 204, 255}, - + 1, 15, -15, 0, @@ -2193,10 +2193,10 @@ static struct uiWidgetColors wcol_pulldown = { {63, 63, 63, 255}, {86, 128, 194, 255}, {255, 255, 255, 255}, - + {0, 0, 0, 255}, {0, 0, 0, 255}, - + 0, 25, -20, 0, @@ -2209,10 +2209,10 @@ static struct uiWidgetColors wcol_menu_item = { {0, 0, 0, 0}, {86, 128, 194, 255}, {172, 172, 172, 128}, - + {255, 255, 255, 255}, {0, 0, 0, 255}, - + 1, 38, 0, 0, @@ -2225,10 +2225,10 @@ static struct uiWidgetColors wcol_menu_back = { {25, 25, 25, 230}, {45, 45, 45, 230}, {100, 100, 100, 255}, - + {160, 160, 160, 255}, {255, 255, 255, 255}, - + 0, 25, -20, 0, @@ -2273,10 +2273,10 @@ static struct uiWidgetColors wcol_radio = { {70, 70, 70, 255}, {86, 128, 194, 255}, {255, 255, 255, 255}, - + {255, 255, 255, 255}, {0, 0, 0, 255}, - + 1, 15, -15, 0, @@ -2288,10 +2288,10 @@ static struct uiWidgetColors wcol_regular = { {153, 153, 153, 255}, {100, 100, 100, 255}, {25, 25, 25, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 0, 0, 0, 0, @@ -2303,10 +2303,10 @@ static struct uiWidgetColors wcol_tool = { {153, 153, 153, 255}, {100, 100, 100, 255}, {25, 25, 25, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 1, 15, -15, 0, @@ -2334,10 +2334,10 @@ static struct uiWidgetColors wcol_box = { {128, 128, 128, 255}, {100, 100, 100, 255}, {25, 25, 25, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 0, 0, 0, 0, @@ -2349,10 +2349,10 @@ static struct uiWidgetColors wcol_toggle = { {153, 153, 153, 255}, {100, 100, 100, 255}, {25, 25, 25, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 0, 0, 0, 0, @@ -2364,10 +2364,10 @@ static struct uiWidgetColors wcol_scroll = { {80, 80, 80, 180}, {100, 100, 100, 180}, {128, 128, 128, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 1, 5, -5, 0, @@ -2379,10 +2379,10 @@ static struct uiWidgetColors wcol_progress = { {190, 190, 190, 255}, {100, 100, 100, 180}, {128, 128, 128, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 0, 0, 0, 0, @@ -2394,10 +2394,10 @@ static struct uiWidgetColors wcol_list_item = { {0, 0, 0, 0}, {86, 128, 194, 255}, {90, 90, 90, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 0, 0, 0, 0, @@ -2425,10 +2425,10 @@ static struct uiWidgetColors wcol_tmp = { {128, 128, 128, 255}, {100, 100, 100, 255}, {25, 25, 25, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 0, 0, 0, 0, @@ -2528,7 +2528,7 @@ static void widget_state(uiWidgetType *wt, int state) widget_state_blend(wt->wcol.inner, wcol_state->inner_overridden_sel, wcol_state->blend); copy_v3_v3_char(wt->wcol.text, wt->wcol.text_sel); - + if (state & UI_SELECT) SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown); } @@ -2573,11 +2573,11 @@ static void widget_state_numslider(uiWidgetType *wt, int state) /* call this for option button */ widget_state(wt, state); - + /* now, set the inner-part so that it reflects state settings too */ /* TODO: maybe we should have separate settings for the blending colors used for this case? */ if (state & UI_SELECT) { - + if (state & UI_BUT_ANIMATED_KEY) widget_state_blend(wt->wcol.item, wcol_state->inner_key_sel, blend); else if (state & UI_BUT_ANIMATED) @@ -2606,10 +2606,10 @@ static void widget_state_numslider(uiWidgetType *wt, int state) static void widget_state_option_menu(uiWidgetType *wt, int state) { bTheme *btheme = UI_GetTheme(); /* XXX */ - + /* call this for option button */ widget_state(wt, state); - + /* if not selected we get theme from menu back */ if (state & UI_SELECT) copy_v3_v3_char(wt->wcol.text, btheme->tui.wcol_menu_back.text_sel); @@ -2621,13 +2621,13 @@ static void widget_state_option_menu(uiWidgetType *wt, int state) static void widget_state_nothing(uiWidgetType *wt, int UNUSED(state)) { wt->wcol = *(wt->wcol_theme); -} +} /* special case, button that calls pulldown */ static void widget_state_pulldown(uiWidgetType *wt, int state) { wt->wcol = *(wt->wcol_theme); - + copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel); copy_v3_v3_char(wt->wcol.outline, wt->wcol.inner); @@ -2667,7 +2667,7 @@ static void widget_state_pie_menu_item(uiWidgetType *wt, int state) static void widget_state_menu_item(uiWidgetType *wt, int state) { wt->wcol = *(wt->wcol_theme); - + /* active and disabled (not so common) */ if ((state & UI_BUT_DISABLED) && (state & UI_ACTIVE)) { widget_state_blend(wt->wcol.text, wt->wcol.text_sel, 0.5f); @@ -2700,17 +2700,17 @@ static void widget_softshadow(const rcti *rect, int roundboxalign, const float r int step, totvert; float triangle_strip[WIDGET_SIZE_MAX * 2 + 2][2]; const float radout = UI_ThemeMenuShadowWidth(); - + /* disabled shadow */ if (radout == 0.0f) return; - + /* prevent tooltips to not show round shadow */ if (radout > 0.2f * BLI_rcti_size_y(&rect1)) rect1.ymax -= 0.2f * BLI_rcti_size_y(&rect1); else rect1.ymax -= radout; - + /* inner part */ totvert = round_box_shadow_edges(wtb.inner_v, &rect1, radin, roundboxalign & (UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT), 0.0f); @@ -2723,9 +2723,9 @@ static void widget_softshadow(const rcti *rect, int roundboxalign, const float r for (step = 1; step <= (int)radout; step++) { float expfac = sqrtf(step / radout); - + round_box_shadow_edges(wtb.outer_v, &rect1, radin, UI_CNR_ALL, (float)step); - + immUniformColor4f(0.0f, 0.0f, 0.0f, alphastep * (1.0f - expfac)); widget_verts_to_triangle_strip(&wtb, totvert, triangle_strip); @@ -2740,9 +2740,9 @@ static void widget_menu_back(uiWidgetColors *wcol, rcti *rect, int flag, int dir { uiWidgetBase wtb; int roundboxalign = UI_CNR_ALL; - + widget_init(&wtb); - + /* menu is 2nd level or deeper */ if (flag & UI_BLOCK_POPUP) { //rect->ymin -= 4.0; @@ -2756,14 +2756,14 @@ static void widget_menu_back(uiWidgetColors *wcol, rcti *rect, int flag, int dir roundboxalign = UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT; rect->ymax += 0.1f * U.widget_unit; } - + glEnable(GL_BLEND); widget_softshadow(rect, roundboxalign, wcol->roundness * U.widget_unit); - + round_box_edges(&wtb, roundboxalign, rect, wcol->roundness * U.widget_unit); wtb.draw_emboss = false; widgetbase_draw(&wtb, wcol); - + glDisable(GL_BLEND); } @@ -2775,7 +2775,7 @@ static void ui_hsv_cursor(float x, float y) immUniformColor3f(1.0f, 1.0f, 1.0f); imm_draw_circle_fill_2d(pos, x, y, 3.0f * U.pixelsize, 8); - + glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH); immUniformColor3f(0.0f, 0.0f, 0.0f); @@ -2808,14 +2808,14 @@ void ui_hsvcircle_pos_from_vals(uiBut *but, const rcti *rect, float *hsv, float const float centy = BLI_rcti_cent_y_fl(rect); float radius = (float)min_ii(BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)) / 2.0f; float ang, radius_t; - + ang = 2.0f * (float)M_PI * hsv[0] + (float)M_PI_2; - + if ((but->flag & UI_BUT_COLOR_CUBIC) && (U.color_picker_type == USER_CP_CIRCLE_HSV)) radius_t = (1.0f - pow3f(1.0f - hsv[1])); else radius_t = hsv[1]; - + radius = CLAMPIS(radius_t, 0.0f, 1.0f) * radius; *xpos = centx + cosf(-ang) * radius; *ypos = centy + sinf(-ang) * radius; @@ -2835,7 +2835,7 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, const rcti * const float *hsv_ptr = cpicker->color_data; float rgb[3], hsvo[3], hsv[3], col[3], colcent[3]; bool color_profile = ui_but_is_colorpicker_display_space(but); - + /* color */ ui_but_v3_get(but, rgb); @@ -2861,7 +2861,7 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, const rcti * else hsv[2] = 0.5f; } - + ui_color_picker_to_rgb(0.0f, 0.0f, hsv[2], colcent, colcent + 1, colcent + 2); Gwn_VertFormat *format = immVertexFormat(); @@ -2873,12 +2873,12 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, const rcti * immBegin(GWN_PRIM_TRI_FAN, tot + 2); immAttrib3fv(color, colcent); immVertex2f(pos, centx, centy); - + float ang = 0.0f; for (int a = 0; a <= tot; a++, ang += radstep) { float si = sinf(ang); float co = cosf(ang); - + ui_hsvcircle_vals_from_pos(hsv, hsv + 1, rect, centx + co * radius, centy + si * radius); ui_color_picker_to_rgb_v(hsv, col); @@ -2927,7 +2927,7 @@ void ui_draw_gradient(const rcti *rect, const float hsv[3], const int type, cons float col1[4][3]; /* right half, rect bottom to top */ /* draw series of gouraud rects */ - + switch (type) { case UI_GRAD_SV: hsv_to_rgb(h, 0.0, 0.0, &col1[0][0], &col1[0][1], &col1[0][2]); @@ -2979,7 +2979,7 @@ void ui_draw_gradient(const rcti *rect, const float hsv[3], const int type, cons unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT); unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT); immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR); - + immBegin(GWN_PRIM_TRIS, steps * 3 * 6); for (dx = 0.0f; dx < 0.999f; dx += color_step) { /* 0.999 = prevent float inaccuracy for steps */ const float dx_next = dx + color_step; @@ -2989,7 +2989,7 @@ void ui_draw_gradient(const rcti *rect, const float hsv[3], const int type, cons copy_v3_v3(col0[1], col1[1]); copy_v3_v3(col0[2], col1[2]); copy_v3_v3(col0[3], col1[3]); - + /* new color */ switch (type) { case UI_GRAD_SV: @@ -3031,17 +3031,17 @@ void ui_draw_gradient(const rcti *rect, const float hsv[3], const int type, cons copy_v3_v3(col1[3], col1[2]); break; } - + /* rect */ sx1 = rect->xmin + dx * BLI_rcti_size_x(rect); sx2 = rect->xmin + dx_next * BLI_rcti_size_x(rect); sy = rect->ymin; dy = (float)BLI_rcti_size_y(rect) / 3.0f; - + for (a = 0; a < 3; a++, sy += dy) { immAttrib4f(col, col0[a][0], col0[a][1], col0[a][2], alpha); immVertex2f(pos, sx1, sy); - + immAttrib4f(col, col1[a][0], col1[a][1], col1[a][2], alpha); immVertex2f(pos, sx2, sy); @@ -3053,7 +3053,7 @@ void ui_draw_gradient(const rcti *rect, const float hsv[3], const int type, cons immAttrib4f(col, col1[a + 1][0], col1[a + 1][1], col1[a + 1][2], alpha); immVertex2f(pos, sx2, sy + dy); - + immAttrib4f(col, col0[a + 1][0], col0[a + 1][1], col0[a + 1][2], alpha); immVertex2f(pos, sx1, sy + dy); } @@ -3117,24 +3117,24 @@ static void ui_draw_but_HSVCUBE(uiBut *but, const rcti *rect) float *hsv = cpicker->color_data; float hsv_n[3]; bool use_display_colorspace = ui_but_is_colorpicker_display_space(but); - + copy_v3_v3(hsv_n, hsv); - + ui_but_v3_get(but, rgb); - + if (use_display_colorspace) ui_block_cm_to_display_space_v3(but->block, rgb); - + rgb_to_hsv_compat_v(rgb, hsv_n); - + ui_draw_gradient(rect, hsv_n, but->a1, 1.0f); ui_hsvcube_pos_from_vals(but, rect, hsv_n, &x, &y); CLAMP(x, rect->xmin + 3.0f, rect->xmax - 3.0f); CLAMP(y, rect->ymin + 3.0f, rect->ymax - 3.0f); - + ui_hsv_cursor(x, y); - + /* outline */ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT); immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); @@ -3153,7 +3153,7 @@ static void ui_draw_but_HSV_v(uiBut *but, const rcti *rect) float x, y; float rgb[3], hsv[3], v; bool color_profile = but->block->color_profile; - + if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA) color_profile = false; @@ -3167,7 +3167,7 @@ static void ui_draw_but_HSV_v(uiBut *but, const rcti *rect) else rgb_to_hsv_v(rgb, hsv); v = hsv[2]; - + /* map v from property range to [0,1] */ if (but->a1 == UI_GRAD_V_ALT) { float min = but->softmin, max = but->softmax; @@ -3178,17 +3178,17 @@ static void ui_draw_but_HSV_v(uiBut *but, const rcti *rect) } widget_init(&wtb); - + /* fully rounded */ round_box_edges(&wtb, UI_CNR_ALL, rect, rad); - + /* setup temp colors */ wcol_tmp.outline[0] = wcol_tmp.outline[1] = wcol_tmp.outline[2] = 0; wcol_tmp.inner[0] = wcol_tmp.inner[1] = wcol_tmp.inner[2] = 128; wcol_tmp.shadetop = 127; wcol_tmp.shadedown = -128; wcol_tmp.shaded = 1; - + widgetbase_draw(&wtb, &wcol_tmp); /* We are drawing on top of widget bases. Flush cache. */ @@ -3256,9 +3256,9 @@ static void widget_numbut_draw(uiWidgetColors *wcol, rcti *rect, int state, int if (state & UI_SELECT) SWAP(short, wcol->shadetop, wcol->shadedown); - + widget_init(&wtb); - + if (!emboss) { round_box_edges(&wtb, roundboxalign, rect, rad); } @@ -3338,7 +3338,7 @@ static void widget_numbut_draw(uiWidgetColors *wcol, rcti *rect, int state, int /* inner and outline */ widgetbase_draw(&wtb, wcol); } - + if (!(state & UI_STATE_TEXT_INPUT)) { const float textofs = 0.425f * BLI_rcti_size_y(rect); @@ -3378,29 +3378,29 @@ void UI_draw_widget_scroll(uiWidgetColors *wcol, const rcti *rect, const rcti *s rad = wcol->roundness * BLI_rcti_size_y(rect); else rad = wcol->roundness * BLI_rcti_size_x(rect); - + wtb.uniform_params.shade_dir = (horizontal) ? 1.0f : 0.0; - + /* draw back part, colors swapped and shading inverted */ if (horizontal) SWAP(short, wcol->shadetop, wcol->shadedown); - + round_box_edges(&wtb, UI_CNR_ALL, rect, rad); widgetbase_draw(&wtb, wcol); - + /* slider */ if ((BLI_rcti_size_x(slider) < 2) || (BLI_rcti_size_y(slider) < 2)) { /* pass */ } else { SWAP(short, wcol->shadetop, wcol->shadedown); - + copy_v4_v4_char(wcol->inner, wcol->item); - + if (wcol->shadetop > wcol->shadedown) wcol->shadetop += 20; /* XXX violates themes... */ else wcol->shadedown += 20; - + if (state & UI_SCROLL_PRESSED) { wcol->inner[0] = wcol->inner[0] >= 250 ? 255 : wcol->inner[0] + 5; wcol->inner[1] = wcol->inner[1] >= 250 ? 255 : wcol->inner[1] + 5; @@ -3409,20 +3409,20 @@ void UI_draw_widget_scroll(uiWidgetColors *wcol, const rcti *rect, const rcti *s /* draw */ wtb.draw_emboss = false; /* only emboss once */ - + /* exception for progress bar */ if (state & UI_SCROLL_NO_OUTLINE) { SWAP(bool, outline, wtb.draw_outline); } - + round_box_edges(&wtb, UI_CNR_ALL, slider, rad); - + if (state & UI_SCROLL_ARROWS) { if (wcol->item[0] > 48) wcol->item[0] -= 48; if (wcol->item[1] > 48) wcol->item[1] -= 48; if (wcol->item[2] > 48) wcol->item[2] -= 48; wcol->item[3] = 255; - + if (horizontal) { shape_preset_init_scroll_circle(&wtb.tria1, slider, 0.6f, 'l'); shape_preset_init_scroll_circle(&wtb.tria2, slider, 0.6f, 'r'); @@ -3433,7 +3433,7 @@ void UI_draw_widget_scroll(uiWidgetColors *wcol, const rcti *rect, const rcti *s } } widgetbase_draw(&wtb, wcol); - + if (state & UI_SCROLL_NO_OUTLINE) { SWAP(bool, outline, wtb.draw_outline); } @@ -3452,13 +3452,13 @@ static void widget_scroll(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat size = (but->softmax + but->a1 - but->softmin); size = max_ff(size, 2.0f); - + /* position */ rect1 = *rect; /* determine horizontal/vertical */ horizontal = (BLI_rcti_size_x(rect) > BLI_rcti_size_y(rect)); - + if (horizontal) { fac = BLI_rcti_size_x(rect) / size; rect1.xmin = rect1.xmin + ceilf(fac * ((float)value - but->softmin)); @@ -3627,7 +3627,7 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat uiWidgetBase wtb; float rad, col[4]; bool color_profile = but->block->color_profile; - + col[3] = 1.0f; if (but->rnaprop) { @@ -3640,12 +3640,12 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat col[3] = RNA_property_float_get_index(&but->rnapoin, but->rnaprop, 3); } } - + widget_init(&wtb); - + rad = wcol->roundness * U.widget_unit; round_box_edges(&wtb, roundboxalign, rect, rad); - + ui_but_v3_get(but, col); if (state & (UI_BUT_ANIMATED | UI_BUT_ANIMATED_KEY | UI_BUT_DRIVEN | UI_BUT_OVERRIDEN | UI_BUT_REDALERT)) { @@ -3657,18 +3657,18 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat rect->xmax -= SWATCH_KEYED_BORDER; rect->ymin += SWATCH_KEYED_BORDER; rect->ymax -= SWATCH_KEYED_BORDER; - + round_box_edges(&wtb, roundboxalign, rect, rad); } - + if (color_profile) ui_block_cm_to_display_space_v3(but->block, col); - + rgba_float_to_uchar((unsigned char *)wcol->inner, col); wcol->shaded = 0; wcol->alpha_check = (wcol->inner[3] < 255); - + if (state & (UI_BUT_DISABLED | UI_BUT_INACTIVE)) { /* Now we reduce alpha of the inner color (i.e. the color shown) * so that this setting can look grayed out, while retaining @@ -3716,16 +3716,16 @@ static void widget_icon_has_anim(uiBut *but, uiWidgetColors *wcol, rcti *rect, i if (state & (UI_BUT_ANIMATED | UI_BUT_ANIMATED_KEY | UI_BUT_DRIVEN | UI_BUT_REDALERT)) { uiWidgetBase wtb; float rad; - + widget_init(&wtb); wtb.draw_outline = false; - + rad = wcol->roundness * BLI_rcti_size_y(rect); round_box_edges(&wtb, UI_CNR_ALL, rect, rad); widgetbase_draw(&wtb, wcol); } else if (but->type == UI_BTYPE_NUM) { - /* Draw number buttons still with left/right + /* Draw number buttons still with left/right * triangles when field is not embossed */ widget_numbut_embossn(but, wcol, rect, state, roundboxalign); } @@ -3736,15 +3736,15 @@ static void widget_textbut(uiWidgetColors *wcol, rcti *rect, int state, int roun { uiWidgetBase wtb; float rad; - + if (state & UI_SELECT) SWAP(short, wcol->shadetop, wcol->shadedown); - + widget_init(&wtb); - + rad = wcol->roundness * U.widget_unit; round_box_edges(&wtb, roundboxalign, rect, rad); - + widgetbase_draw(&wtb, wcol); } @@ -3753,19 +3753,19 @@ static void widget_menubut(uiWidgetColors *wcol, rcti *rect, int UNUSED(state), { uiWidgetBase wtb; float rad; - + widget_init(&wtb); - + rad = wcol->roundness * U.widget_unit; round_box_edges(&wtb, roundboxalign, rect, rad); - + /* decoration */ shape_preset_trias_from_rect_menu(&wtb.tria1, rect); /* copy size and center to 2nd tria */ wtb.tria2 = wtb.tria1; - + widgetbase_draw(&wtb, wcol); - + /* text space, arrows are about 0.6 height of button */ rect->xmax -= (6 * BLI_rcti_size_y(rect)) / 10; } @@ -3774,12 +3774,12 @@ static void widget_menuiconbut(uiWidgetColors *wcol, rcti *rect, int UNUSED(stat { uiWidgetBase wtb; float rad; - + widget_init(&wtb); - + rad = wcol->roundness * U.widget_unit; round_box_edges(&wtb, roundboxalign, rect, rad); - + /* decoration */ widgetbase_draw(&wtb, wcol); } @@ -3790,9 +3790,9 @@ static void widget_menunodebut(uiWidgetColors *wcol, rcti *rect, int UNUSED(stat uiWidgetBase wtb; uiWidgetColors wcol_backup = *wcol; float rad; - + widget_init(&wtb); - + rad = wcol->roundness * U.widget_unit; round_box_edges(&wtb, roundboxalign, rect, rad); @@ -3802,7 +3802,7 @@ static void widget_menunodebut(uiWidgetColors *wcol, rcti *rect, int UNUSED(stat wcol->outline[0] = min_ii(wcol->outline[0] + 15, 255); wcol->outline[1] = min_ii(wcol->outline[1] + 15, 255); wcol->outline[2] = min_ii(wcol->outline[2] + 15, 255); - + /* decoration */ widgetbase_draw(&wtb, wcol); *wcol = wcol_backup; @@ -3818,7 +3818,7 @@ static void widget_pulldownbut(uiWidgetColors *wcol, rcti *rect, int state, int /* half rounded */ round_box_edges(&wtb, roundboxalign, rect, rad); - + widgetbase_draw(&wtb, wcol); } } @@ -3826,13 +3826,13 @@ static void widget_pulldownbut(uiWidgetColors *wcol, rcti *rect, int state, int static void widget_menu_itembut(uiWidgetColors *wcol, rcti *rect, int UNUSED(state), int UNUSED(roundboxalign)) { uiWidgetBase wtb; - + widget_init(&wtb); - + /* not rounded, no outline */ wtb.draw_outline = false; round_box_edges(&wtb, 0, rect, 0.0f); - + widgetbase_draw(&wtb, wcol); } @@ -3863,14 +3863,14 @@ static void widget_list_itembut(uiWidgetColors *wcol, rcti *rect, int UNUSED(sta { uiWidgetBase wtb; float rad; - + widget_init(&wtb); - + /* no outline */ wtb.draw_outline = false; rad = wcol->roundness * U.widget_unit; round_box_edges(&wtb, UI_CNR_ALL, rect, rad); - + widgetbase_draw(&wtb, wcol); } @@ -3880,29 +3880,29 @@ static void widget_optionbut(uiWidgetColors *wcol, rcti *rect, int state, int UN rcti recttemp = *rect; float rad; int delta; - + widget_init(&wtb); - + /* square */ recttemp.xmax = recttemp.xmin + BLI_rcti_size_y(&recttemp); - + /* smaller */ delta = 1 + BLI_rcti_size_y(&recttemp) / 8; recttemp.xmin += delta; recttemp.ymin += delta; recttemp.xmax -= delta; recttemp.ymax -= delta; - + rad = wcol->roundness * BLI_rcti_size_y(&recttemp); round_box_edges(&wtb, UI_CNR_ALL, &recttemp, rad); - + /* decoration */ if (state & UI_SELECT) { shape_preset_trias_from_rect_checkmark(&wtb.tria1, &recttemp); } - + widgetbase_draw(&wtb, wcol); - + /* text space */ rect->xmin += BLI_rcti_size_y(rect) * 0.7 + delta; } @@ -3931,12 +3931,12 @@ static void widget_radiobut(uiWidgetColors *wcol, rcti *rect, int UNUSED(state), { uiWidgetBase wtb; float rad; - + widget_init(&wtb); - + rad = wcol->roundness * U.widget_unit; round_box_edges(&wtb, roundboxalign, rect, rad); - + widgetbase_draw(&wtb, wcol); } @@ -3945,23 +3945,23 @@ static void widget_box(uiBut *but, uiWidgetColors *wcol, rcti *rect, int UNUSED( uiWidgetBase wtb; float rad; char old_col[3]; - + widget_init(&wtb); - + copy_v3_v3_char(old_col, wcol->inner); - + /* abuse but->hsv - if it's non-zero, use this color as the box's background */ if (but->col[3]) { wcol->inner[0] = but->col[0]; wcol->inner[1] = but->col[1]; wcol->inner[2] = but->col[2]; } - + rad = wcol->roundness * U.widget_unit; round_box_edges(&wtb, roundboxalign, rect, rad); - + widgetbase_draw(&wtb, wcol); - + copy_v3_v3_char(wcol->inner, old_col); } @@ -3969,12 +3969,12 @@ static void widget_but(uiWidgetColors *wcol, rcti *rect, int UNUSED(state), int { uiWidgetBase wtb; float rad; - + widget_init(&wtb); - + rad = wcol->roundness * U.widget_unit; round_box_edges(&wtb, roundboxalign, rect, rad); - + widgetbase_draw(&wtb, wcol); } @@ -3983,9 +3983,9 @@ static void widget_roundbut(uiWidgetColors *wcol, rcti *rect, int UNUSED(state), { uiWidgetBase wtb; const float rad = wcol->roundness * U.widget_unit; - + widget_init(&wtb); - + /* half rounded */ round_box_edges(&wtb, roundboxalign, rect, rad); @@ -4077,13 +4077,13 @@ static void widget_draw_extra_mask(const bContext *C, uiBut *but, uiWidgetType * /* state copy! */ wt->wcol = *(wt->wcol_theme); - + widget_init(&wtb); - + if (but->block->drawextra) { /* note: drawextra can change rect +1 or -1, to match round errors of existing previews */ but->block->drawextra(C, but->poin, but->block->drawextra_arg1, but->block->drawextra_arg2, rect); - + unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT); immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); @@ -4096,7 +4096,7 @@ static void widget_draw_extra_mask(const bContext *C, uiBut *but, uiWidgetType * immUnbindProgram(); } - + /* outline */ round_box_edges(&wtb, UI_CNR_ALL, rect, rad); wtb.draw_outline = true; @@ -4108,7 +4108,7 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) { bTheme *btheme = UI_GetTheme(); static uiWidgetType wt; - + /* defaults */ wt.wcol_theme = &btheme->tui.wcol_regular; wt.wcol_state = &btheme->tui.wcol_state; @@ -4116,7 +4116,7 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.draw = widget_but; wt.custom = NULL; wt.text = widget_draw_text_icon; - + switch (type) { case UI_WTYPE_REGULAR: break; @@ -4125,16 +4125,16 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.draw = NULL; wt.state = widget_state_label; break; - + case UI_WTYPE_TOGGLE: wt.wcol_theme = &btheme->tui.wcol_toggle; break; - + case UI_WTYPE_CHECKBOX: wt.wcol_theme = &btheme->tui.wcol_option; wt.draw = widget_optionbut; break; - + case UI_WTYPE_RADIO: wt.wcol_theme = &btheme->tui.wcol_radio; wt.draw = widget_radiobut; @@ -4144,13 +4144,13 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.wcol_theme = &btheme->tui.wcol_num; wt.draw = widget_numbut; break; - + case UI_WTYPE_SLIDER: wt.wcol_theme = &btheme->tui.wcol_numslider; wt.custom = widget_numslider; wt.state = widget_state_numslider; break; - + case UI_WTYPE_EXEC: wt.wcol_theme = &btheme->tui.wcol_tool; wt.draw = widget_roundbut_exec; @@ -4160,7 +4160,7 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.wcol_theme = &btheme->tui.wcol_toolbar_item; wt.draw = widget_roundbut_exec; break; - + case UI_WTYPE_TAB: wt.wcol_theme = &btheme->tui.wcol_tab; wt.draw = widget_tab; @@ -4170,24 +4170,24 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.wcol_theme = &btheme->tui.wcol_tooltip; wt.draw = widget_menu_back; break; - - + + /* strings */ case UI_WTYPE_NAME: wt.wcol_theme = &btheme->tui.wcol_text; wt.draw = widget_textbut; break; - + case UI_WTYPE_NAME_LINK: break; - + case UI_WTYPE_POINTER_LINK: break; - + case UI_WTYPE_FILENAME: break; - - + + /* start menus */ case UI_WTYPE_MENU_RADIO: wt.wcol_theme = &btheme->tui.wcol_menu; @@ -4198,7 +4198,7 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.wcol_theme = &btheme->tui.wcol_menu; wt.draw = widget_menuiconbut; break; - + case UI_WTYPE_MENU_POINTER_LINK: wt.wcol_theme = &btheme->tui.wcol_menu; wt.draw = widget_menubut; @@ -4208,20 +4208,20 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.wcol_theme = &btheme->tui.wcol_menu; wt.draw = widget_menunodebut; break; - + case UI_WTYPE_PULLDOWN: wt.wcol_theme = &btheme->tui.wcol_pulldown; wt.draw = widget_pulldownbut; wt.state = widget_state_pulldown; break; - + /* in menus */ case UI_WTYPE_MENU_ITEM: wt.wcol_theme = &btheme->tui.wcol_menu_item; wt.draw = widget_menu_itembut; wt.state = widget_state_menu_item; break; - + case UI_WTYPE_MENU_BACK: wt.wcol_theme = &btheme->tui.wcol_menu_back; wt.draw = widget_menu_back; @@ -4237,19 +4237,19 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.state = widget_state_label; wt.custom = widget_icon_has_anim; break; - + case UI_WTYPE_SWATCH: wt.custom = widget_swatch; break; - + case UI_WTYPE_BOX: wt.custom = widget_box; wt.wcol_theme = &btheme->tui.wcol_box; break; - + case UI_WTYPE_RGB_PICKER: break; - + case UI_WTYPE_UNITVEC: wt.custom = widget_unitvec; break; @@ -4264,7 +4264,7 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.wcol_theme = &btheme->tui.wcol_list_item; wt.draw = widget_list_itembut; break; - + case UI_WTYPE_PROGRESSBAR: wt.wcol_theme = &btheme->tui.wcol_progress; wt.custom = widget_progressbar; @@ -4276,7 +4276,7 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) wt.state = widget_state_pie_menu_item; break; } - + return &wt; } @@ -4287,13 +4287,13 @@ static int widget_roundbox_set(uiBut *but, rcti *rect) /* alignment */ if ((but->drawflag & UI_BUT_ALIGN) && but->type != UI_BTYPE_PULLDOWN) { - + /* ui_popup_block_position has this correction too, keep in sync */ if (but->drawflag & (UI_BUT_ALIGN_TOP | UI_BUT_ALIGN_STITCH_TOP)) rect->ymax += U.pixelsize; if (but->drawflag & (UI_BUT_ALIGN_LEFT | UI_BUT_ALIGN_STITCH_LEFT)) rect->xmin -= U.pixelsize; - + switch (but->drawflag & UI_BUT_ALIGN) { case UI_BUT_ALIGN_TOP: roundbox = UI_CNR_BOTTOM_LEFT | UI_CNR_BOTTOM_RIGHT; @@ -4402,7 +4402,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct case UI_BTYPE_SEPR: case UI_BTYPE_SEPR_LINE: break; - + case UI_BTYPE_BUT: #ifdef USE_TOOLBAR_HACK if (UI_but_is_tool(but)) { @@ -4419,11 +4419,11 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct case UI_BTYPE_NUM: wt = widget_type(UI_WTYPE_NUMBER); break; - + case UI_BTYPE_NUM_SLIDER: wt = widget_type(UI_WTYPE_SLIDER); break; - + case UI_BTYPE_ROW: wt = widget_type(UI_WTYPE_RADIO); break; @@ -4431,7 +4431,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct case UI_BTYPE_LISTROW: wt = widget_type(UI_WTYPE_LISTITEM); break; - + case UI_BTYPE_TEXT: wt = widget_type(UI_WTYPE_NAME); break; @@ -4451,7 +4451,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct case UI_BTYPE_TOGGLE_N: wt = widget_type(UI_WTYPE_TOGGLE); break; - + case UI_BTYPE_CHECKBOX: case UI_BTYPE_CHECKBOX_N: if (!(but->flag & UI_HAS_ICON)) { @@ -4460,13 +4460,13 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct } else wt = widget_type(UI_WTYPE_TOGGLE); - + /* option buttons have strings outside, on menus use different colors */ if (but->block->flag & UI_BLOCK_LOOP) wt->state = widget_state_option_menu; - + break; - + case UI_BTYPE_MENU: case UI_BTYPE_BLOCK: case UI_BTYPE_POPOVER: @@ -4495,15 +4495,15 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct case UI_BTYPE_PULLDOWN: wt = widget_type(UI_WTYPE_PULLDOWN); break; - + case UI_BTYPE_BUT_MENU: wt = widget_type(UI_WTYPE_MENU_ITEM); break; - + case UI_BTYPE_COLOR: wt = widget_type(UI_WTYPE_SWATCH); break; - + case UI_BTYPE_ROUNDBOX: case UI_BTYPE_LISTBOX: wt = widget_type(UI_WTYPE_BOX); @@ -4512,7 +4512,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct case UI_BTYPE_EXTRA: widget_draw_extra_mask(C, but, widget_type(UI_WTYPE_BOX), rect); break; - + case UI_BTYPE_HSVCUBE: if (ELEM(but->a1, UI_GRAD_V_ALT, UI_GRAD_L_ALT)) { /* vertical V slider, uses new widget draw now */ ui_draw_but_HSV_v(but, rect); @@ -4521,39 +4521,39 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct ui_draw_but_HSVCUBE(but, rect); } break; - + case UI_BTYPE_HSVCIRCLE: ui_draw_but_HSVCIRCLE(but, &tui->wcol_regular, rect); break; - + case UI_BTYPE_COLORBAND: ui_draw_but_COLORBAND(but, &tui->wcol_regular, rect); break; - + case UI_BTYPE_UNITVEC: wt = widget_type(UI_WTYPE_UNITVEC); break; - + case UI_BTYPE_IMAGE: ui_draw_but_IMAGE(ar, but, &tui->wcol_regular, rect); break; - + case UI_BTYPE_HISTOGRAM: ui_draw_but_HISTOGRAM(ar, but, &tui->wcol_regular, rect); break; - + case UI_BTYPE_WAVEFORM: ui_draw_but_WAVEFORM(ar, but, &tui->wcol_regular, rect); break; - + case UI_BTYPE_VECTORSCOPE: ui_draw_but_VECTORSCOPE(ar, but, &tui->wcol_regular, rect); break; - + case UI_BTYPE_CURVE: ui_draw_but_CURVE(ar, but, &tui->wcol_regular, rect); break; - + case UI_BTYPE_PROGRESS_BAR: wt = widget_type(UI_WTYPE_PROGRESSBAR); fstyle = &style->widgetlabel; @@ -4580,12 +4580,12 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct break; } } - + if (wt) { //rcti disablerect = *rect; /* rect gets clipped smaller for text */ int roundboxalign, state; bool disabled = false; - + roundboxalign = widget_roundbox_set(but, rect); /* Mask out flags re-used for local state. */ @@ -4617,7 +4617,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct if (state & (UI_BUT_DISABLED | UI_BUT_INACTIVE)) if (but->dt != UI_EMBOSS_PULLDOWN) disabled = true; - + if (disabled) ui_widget_color_disabled(wt); @@ -4651,7 +4651,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct wt->text(fstyle, &wt->wcol, but, rect); if (disabled) glDisable(GL_BLEND); - + // if (state & (UI_BUT_DISABLED | UI_BUT_INACTIVE)) // if (but->dt != UI_EMBOSS_PULLDOWN) // widget_disabled(&disablerect); @@ -4904,7 +4904,7 @@ void ui_draw_tooltip_background(uiStyle *UNUSED(style), uiBlock *UNUSED(block), void ui_draw_search_back(uiStyle *UNUSED(style), uiBlock *block, rcti *rect) { uiWidgetType *wt = widget_type(UI_WTYPE_BOX); - + glEnable(GL_BLEND); widget_softshadow(rect, UI_CNR_ALL, 0.25f * U.widget_unit); glDisable(GL_BLEND); @@ -4927,10 +4927,10 @@ void ui_draw_menu_item(uiFontStyle *fstyle, rcti *rect, const char *name, int ic wt->state(wt, state); wt->draw(&wt->wcol, rect, 0, 0); - + UI_fontstyle_set(fstyle); fstyle->align = UI_STYLE_TEXT_LEFT; - + /* text location offset */ rect->xmin += 0.25f * UI_UNIT_X; if (iconid) rect->xmin += UI_DPI_ICON_SIZE; @@ -4979,7 +4979,7 @@ void ui_draw_menu_item(uiFontStyle *fstyle, rcti *rect, const char *name, int ic *cpoin = UI_SEP_CHAR; } } - + /* restore rect, was messed with */ *rect = _rect; @@ -4990,7 +4990,7 @@ void ui_draw_menu_item(uiFontStyle *fstyle, rcti *rect, const char *name, int ic height = ICON_SIZE_FROM_BUTRECT(rect); aspect = ICON_DEFAULT_HEIGHT / height; - + glEnable(GL_BLEND); UI_icon_draw_aspect(xs, ys, iconid, aspect, 1.0f); /* XXX scale weak get from fstyle? */ glDisable(GL_BLEND); @@ -5003,17 +5003,17 @@ void ui_draw_preview_item(uiFontStyle *fstyle, rcti *rect, const char *name, int const float text_size = UI_UNIT_Y; float font_dims[2] = {0.0f, 0.0f}; uiWidgetType *wt = widget_type(UI_WTYPE_MENU_ITEM); - + /* drawing button background */ wt->state(wt, state); wt->draw(&wt->wcol, rect, 0, 0); - + /* draw icon in rect above the space reserved for the label */ rect->ymin += text_size; glEnable(GL_BLEND); widget_draw_preview(iconid, 1.0f, rect); glDisable(GL_BLEND); - + BLF_width_and_height(fstyle->uifont_id, name, BLF_DRAW_STR_DUMMY_MAX, &font_dims[0], &font_dims[1]); /* text rect */ diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 95a7d0a0d06..acfae0a6f0a 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -98,16 +98,16 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo static char headerdesel[4] = {0, 0, 0, 255}; static char setting = 0; const char *cp = error; - + /* ensure we're not getting a color after running BKE_blender_userdef_free */ BLI_assert(BLI_findindex(&U.themes, theme_active) != -1); BLI_assert(colorid != TH_UNDEFINED); if (btheme) { - + /* first check for ui buttons theme */ if (colorid < TH_THEMEUI) { - + switch (colorid) { case TH_REDALERT: @@ -115,7 +115,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo } } else { - + switch (spacetype) { case SPACE_BUTS: ts = &btheme->tbuts; @@ -250,7 +250,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo cp = &setting; setting = ts->panelcolors.show_back; break; - + case TH_BUTBACK: cp = ts->button; break; case TH_BUTBACK_TEXT: @@ -273,7 +273,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo cp = ts->shade2; break; case TH_HILITE: cp = ts->hilite; break; - + case TH_GRID: cp = ts->grid; break; case TH_VIEW_OVERLAY: @@ -524,7 +524,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo case TH_HANDLE_VERTEX_SIZE: cp = &ts->handle_vertex_size; break; - + case TH_GP_VERTEX: cp = ts->gp_vertex; break; @@ -534,7 +534,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo case TH_GP_VERTEX_SIZE: cp = &ts->gp_vertex_size; break; - + case TH_DOPESHEET_CHANNELOB: cp = ts->ds_channel; break; @@ -622,21 +622,21 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo case TH_SKIN_ROOT: cp = ts->skin_root; break; - + case TH_ANIM_ACTIVE: cp = ts->anim_active; break; case TH_ANIM_INACTIVE: cp = ts->anim_non_active; break; - + case TH_NLA_TWEAK: cp = ts->nla_tweaking; break; case TH_NLA_TWEAK_DUPLI: cp = ts->nla_tweakdupli; break; - + case TH_NLA_TRANSITION: cp = ts->nla_transition; break; @@ -655,7 +655,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo case TH_NLA_SOUND_SEL: cp = ts->nla_sound_sel; break; - + case TH_WIDGET_EMBOSS: cp = btheme->tui.widget_emboss; break; @@ -716,7 +716,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo } } } - + return (const unsigned char *)cp; } @@ -724,7 +724,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo static void ui_theme_init_boneColorSets(bTheme *btheme) { int i; - + /* define default color sets - currently we only define 15 of these, though that should be ample */ /* set 1 */ rgba_char_args_set(btheme->tarm[0].solid, 0x9a, 0x00, 0x00, 255); @@ -786,7 +786,7 @@ static void ui_theme_init_boneColorSets(bTheme *btheme) rgba_char_args_set(btheme->tarm[14].solid, 0x08, 0x31, 0x0e, 255); rgba_char_args_set(btheme->tarm[14].select, 0x1c, 0x43, 0x0b, 255); rgba_char_args_set(btheme->tarm[14].active, 0x34, 0x62, 0x2b, 255); - + /* reset flags too */ for (i = 0; i < 20; i++) btheme->tarm[i].flag = 0; @@ -867,16 +867,16 @@ static void ui_theme_space_init_manipulator_colors(bTheme *btheme) void ui_theme_init_default(void) { bTheme *btheme; - + /* we search for the theme with name Default */ btheme = BLI_findstring(&U.themes, "Default", offsetof(bTheme, name)); - + if (btheme == NULL) { btheme = MEM_callocN(sizeof(bTheme), "theme"); BLI_addtail(&U.themes, btheme); strcpy(btheme->name, "Default"); } - + UI_SetTheme(0, 0); /* make sure the global used in this file is set */ /* UI buttons */ @@ -893,13 +893,13 @@ void ui_theme_init_default(void) btheme->tui.menu_shadow_fac = 0.5f; btheme->tui.menu_shadow_width = 12; - + /* Bone Color Sets */ ui_theme_init_boneColorSets(btheme); - + /* common (new) variables */ ui_theme_init_new(btheme); - + /* Manipulator. */ ui_theme_space_init_manipulator_colors(btheme); @@ -907,11 +907,11 @@ void ui_theme_init_default(void) rgba_char_args_set_fl(btheme->tv3d.back, 0.225, 0.225, 0.225, 1.0); rgba_char_args_set(btheme->tv3d.text, 0, 0, 0, 255); rgba_char_args_set(btheme->tv3d.text_hi, 255, 255, 255, 255); - + rgba_char_args_set_fl(btheme->tv3d.header, 0.45, 0.45, 0.45, 1.0); rgba_char_args_set_fl(btheme->tv3d.button, 0.45, 0.45, 0.45, 0.5); // rgba_char_args_set(btheme->tv3d.panel, 165, 165, 165, 127); - + rgba_char_args_set(btheme->tv3d.shade1, 160, 160, 160, 100); rgba_char_args_set(btheme->tv3d.shade2, 0x7f, 0x70, 0x70, 100); @@ -1024,7 +1024,7 @@ void ui_theme_init_default(void) rgba_char_args_set(btheme->tipo.handle_auto_clamped, 0x99, 0x40, 0x30, 255); rgba_char_args_set(btheme->tipo.handle_sel_auto_clamped, 0xf0, 0xaf, 0x90, 255); btheme->tipo.handle_vertex_size = 5; - + rgba_char_args_set(btheme->tipo.ds_channel, 82, 96, 110, 255); rgba_char_args_set(btheme->tipo.ds_subchannel, 124, 137, 150, 255); rgba_char_args_set(btheme->tipo.group, 79, 101, 73, 255); @@ -1034,9 +1034,9 @@ void ui_theme_init_default(void) btheme->tact = btheme->tipo; rgba_char_args_set(btheme->tact.strip, 12, 10, 10, 128); rgba_char_args_set(btheme->tact.strip_select, 255, 140, 0, 255); - + rgba_char_args_set(btheme->tact.anim_active, 204, 112, 26, 102); - + rgba_char_args_set(btheme->tact.keytype_keyframe, 232, 232, 232, 255); rgba_char_args_set(btheme->tact.keytype_keyframe_select, 255, 190, 50, 255); rgba_char_args_set(btheme->tact.keytype_extreme, 232, 179, 204, 255); @@ -1045,31 +1045,31 @@ void ui_theme_init_default(void) rgba_char_args_set(btheme->tact.keytype_breakdown_select, 84, 191, 237, 255); rgba_char_args_set(btheme->tact.keytype_jitter, 148, 229, 117, 255); rgba_char_args_set(btheme->tact.keytype_jitter_select, 97, 192, 66, 255); - + rgba_char_args_set(btheme->tact.keyborder, 0, 0, 0, 255); rgba_char_args_set(btheme->tact.keyborder_select, 0, 0, 0, 255); - + btheme->tact.keyframe_scale_fac = 1.0f; - + /* space nla */ btheme->tnla = btheme->tact; - + rgba_char_args_set(btheme->tnla.anim_active, 204, 112, 26, 102); /* same as for dopesheet; duplicate here for easier reference */ rgba_char_args_set(btheme->tnla.anim_non_active, 153, 135, 97, 77); - + rgba_char_args_set(btheme->tnla.nla_tweaking, 77, 243, 26, 77); rgba_char_args_set(btheme->tnla.nla_tweakdupli, 217, 0, 0, 255); - + rgba_char_args_set(btheme->tnla.nla_transition, 28, 38, 48, 255); rgba_char_args_set(btheme->tnla.nla_transition_sel, 46, 117, 219, 255); rgba_char_args_set(btheme->tnla.nla_meta, 51, 38, 66, 255); rgba_char_args_set(btheme->tnla.nla_meta_sel, 105, 33, 150, 255); rgba_char_args_set(btheme->tnla.nla_sound, 43, 61, 61, 255); rgba_char_args_set(btheme->tnla.nla_sound_sel, 31, 122, 122, 255); - + rgba_char_args_set(btheme->tnla.keyborder, 0, 0, 0, 255); rgba_char_args_set(btheme->tnla.keyborder_select, 0, 0, 0, 255); - + /* space file */ /* to have something initialized */ btheme->tfile = btheme->tv3d; @@ -1085,7 +1085,7 @@ void ui_theme_init_default(void) rgba_char_args_set(btheme->tfile.movie, 250, 250, 250, 255); rgba_char_args_set(btheme->tfile.scene, 250, 250, 250, 255); - + /* space seq */ btheme->tseq = btheme->tv3d; rgba_char_args_set(btheme->tseq.back, 116, 116, 116, 255); @@ -1134,7 +1134,7 @@ void ui_theme_init_default(void) rgba_char_args_set(btheme->text.shade1, 143, 143, 143, 255); rgba_char_args_set(btheme->text.shade2, 0xc6, 0x77, 0x77, 255); rgba_char_args_set(btheme->text.hilite, 255, 0, 0, 255); - + /* syntax highlighting */ rgba_char_args_set(btheme->text.syntaxn, 0, 0, 200, 255); /* Numbers Blue*/ rgba_char_args_set(btheme->text.syntaxl, 100, 0, 0, 255); /* Strings Red */ @@ -1144,11 +1144,11 @@ void ui_theme_init_default(void) rgba_char_args_set(btheme->text.syntaxr, 140, 60, 0, 255); /* Reserved Orange*/ rgba_char_args_set(btheme->text.syntaxb, 128, 0, 80, 255); /* Builtin Red-purple */ rgba_char_args_set(btheme->text.syntaxs, 76, 76, 76, 255); /* Gray (mix between fg/bg) */ - + /* space oops */ btheme->toops = btheme->tv3d; rgba_char_args_set_fl(btheme->toops.back, 0.45, 0.45, 0.45, 1.0); - + rgba_char_args_set_fl(btheme->toops.match, 0.2, 0.5, 0.2, 0.3); /* highlighting search match - soft green*/ rgba_char_args_set_fl(btheme->toops.selected_highlight, 0.51, 0.53, 0.55, 0.3); @@ -1169,7 +1169,7 @@ void ui_theme_init_default(void) /* space user preferences */ btheme->tuserpref = btheme->tv3d; rgba_char_args_set_fl(btheme->tuserpref.back, 0.45, 0.45, 0.45, 1.0); - + /* space console */ btheme->tconsole = btheme->tv3d; rgba_char_args_set(btheme->tconsole.back, 0, 0, 0, 255); @@ -1179,16 +1179,16 @@ void ui_theme_init_default(void) rgba_char_args_set(btheme->tconsole.console_error, 220, 96, 96, 255); rgba_char_args_set(btheme->tconsole.console_cursor, 220, 96, 96, 255); rgba_char_args_set(btheme->tconsole.console_select, 255, 255, 255, 48); - + /* space time */ btheme->ttime = btheme->tv3d; rgba_char_args_set_fl(btheme->ttime.back, 0.45, 0.45, 0.45, 1.0); rgba_char_args_set_fl(btheme->ttime.grid, 0.36, 0.36, 0.36, 1.0); rgba_char_args_set(btheme->ttime.shade1, 173, 173, 173, 255); /* sliders */ - + rgba_char_args_set(btheme->ttime.time_keyframe, 0xDD, 0xD7, 0x00, 0xFF); rgba_char_args_set(btheme->ttime.time_gp_keyframe, 0xB5, 0xE6, 0x1D, 0xFF); - + /* space node, re-uses syntax and console color storage */ btheme->tnode = btheme->tv3d; rgba_char_args_set(btheme->tnode.syntaxr, 115, 115, 115, 255); /* wire inner color */ @@ -1291,7 +1291,7 @@ void UI_Theme_Restore(struct bThemeState *theme_state) void UI_ThemeColor(int colorid) { const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); glColor3ubv(cp); @@ -1301,7 +1301,7 @@ void UI_ThemeColor(int colorid) void UI_ThemeColor4(int colorid) { const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); glColor4ubv(cp); } @@ -1318,7 +1318,7 @@ void UI_ThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset) { int r, g, b, a; const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); r = coloffset + (int) cp[0]; CLAMP(r, 0, 255); @@ -1336,7 +1336,7 @@ void UI_GetThemeColorShadeAlpha4ubv(int colorid, int coloffset, int alphaoffset, { int r, g, b, a; const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); r = coloffset + (int) cp[0]; CLAMP(r, 0, 255); @@ -1392,7 +1392,7 @@ void UI_ThemeColorBlendShade(int colorid1, int colorid2, float fac, int offset) { int r, g, b; const unsigned char *cp1, *cp2; - + cp1 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1); cp2 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2); @@ -1400,11 +1400,11 @@ void UI_ThemeColorBlendShade(int colorid1, int colorid2, float fac, int offset) r = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]); g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]); b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]); - + CLAMP(r, 0, 255); CLAMP(g, 0, 255); CLAMP(b, 0, 255); - + glColor3ub(r, g, b); } @@ -1413,7 +1413,7 @@ void UI_ThemeColorBlendShadeAlpha(int colorid1, int colorid2, float fac, int off { int r, g, b, a; const unsigned char *cp1, *cp2; - + cp1 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1); cp2 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2); @@ -1422,7 +1422,7 @@ void UI_ThemeColorBlendShadeAlpha(int colorid1, int colorid2, float fac, int off g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]); b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]); a = alphaoffset + floorf((1.0f - fac) * cp1[3] + fac * cp2[3]); - + CLAMP(r, 0, 255); CLAMP(g, 0, 255); CLAMP(b, 0, 255); @@ -1442,7 +1442,7 @@ void UI_FontThemeColor(int fontid, int colorid) float UI_GetThemeValuef(int colorid) { const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); return ((float)cp[0]); } @@ -1451,7 +1451,7 @@ float UI_GetThemeValuef(int colorid) int UI_GetThemeValue(int colorid) { const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); return ((int) cp[0]); } @@ -1478,7 +1478,7 @@ int UI_GetThemeValueType(int colorid, int spacetype) void UI_GetThemeColor3fv(int colorid, float col[3]) { const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); col[0] = ((float)cp[0]) / 255.0f; col[1] = ((float)cp[1]) / 255.0f; @@ -1488,7 +1488,7 @@ void UI_GetThemeColor3fv(int colorid, float col[3]) void UI_GetThemeColor4fv(int colorid, float col[4]) { const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); col[0] = ((float)cp[0]) / 255.0f; col[1] = ((float)cp[1]) / 255.0f; @@ -1501,16 +1501,16 @@ void UI_GetThemeColorShade3fv(int colorid, int offset, float col[3]) { int r, g, b; const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); - + r = offset + (int) cp[0]; CLAMP(r, 0, 255); g = offset + (int) cp[1]; CLAMP(g, 0, 255); b = offset + (int) cp[2]; CLAMP(b, 0, 255); - + col[0] = ((float)r) / 255.0f; col[1] = ((float)g) / 255.0f; col[2] = ((float)b) / 255.0f; @@ -1644,7 +1644,7 @@ void UI_GetThemeColorBlendShade4fv(int colorid1, int colorid2, float fac, int of void UI_GetThemeColor3ubv(int colorid, unsigned char col[3]) { const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); col[0] = cp[0]; col[1] = cp[1]; @@ -1656,19 +1656,19 @@ void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4]) { int r, g, b, a; const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); - + r = offset + (int) cp[0]; CLAMP(r, 0, 255); g = offset + (int) cp[1]; CLAMP(g, 0, 255); b = offset + (int) cp[2]; CLAMP(b, 0, 255); - + a = (int) cp[3]; /* no shading offset... */ CLAMP(a, 0, 255); - + col[0] = ((float)r) / 255.0f; col[1] = ((float)g) / 255.0f; col[2] = ((float)b) / 255.0f; @@ -1679,7 +1679,7 @@ void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4]) void UI_GetThemeColor4ubv(int colorid, unsigned char col[4]) { const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); col[0] = cp[0]; col[1] = cp[1]; @@ -1690,7 +1690,7 @@ void UI_GetThemeColor4ubv(int colorid, unsigned char col[4]) void UI_GetThemeColorType4ubv(int colorid, int spacetype, char col[4]) { const unsigned char *cp; - + cp = UI_ThemeGetColorPtr(theme_active, spacetype, colorid); col[0] = cp[0]; col[1] = cp[1]; @@ -1710,7 +1710,7 @@ void UI_ColorPtrBlendShade3ubv(const unsigned char cp1[3], const unsigned char c r = r < 0 ? 0 : (r > 255 ? 255 : r); g = g < 0 ? 0 : (g > 255 ? 255 : g); b = b < 0 ? 0 : (b > 255 ? 255 : b); - + glColor3ub(r, g, b); } @@ -1755,7 +1755,7 @@ void UI_GetColorPtrBlendShade3ubv( void UI_ThemeClearColor(int colorid) { float col[3]; - + UI_GetThemeColor3fv(colorid, col); glClearColor(col[0], col[1], col[2], 0.0f); } @@ -1777,7 +1777,7 @@ int UI_ThemeMenuShadowWidth(void) void UI_make_axis_color(const unsigned char src_col[3], unsigned char dst_col[3], const char axis) { unsigned char col[3]; - + switch (axis) { case 'X': UI_GetThemeColor3ubv(TH_AXIS_X, col); @@ -1803,7 +1803,7 @@ void UI_make_axis_color(const unsigned char src_col[3], unsigned char dst_col[3] void init_userdef_do_versions(void) { Main *bmain = G.main; - + #define USER_VERSION_ATLEAST(ver, subver) MAIN_VERSION_ATLEAST(bmain, ver, subver) /* the UserDef struct is not corrected with do_versions() .... ugh! */ @@ -1834,12 +1834,12 @@ void init_userdef_do_versions(void) } if (U.pad_rot_angle == 0.0f) U.pad_rot_angle = 15.0f; - + /* graph editor - unselected F-Curve visibility */ if (U.fcu_inactive_alpha == 0) { U.fcu_inactive_alpha = 0.25f; } - + /* signal for derivedmesh to use colorband */ /* run in case this was on and is now off in the user prefs [#28096] */ vDM_ColorBand_store((U.flag & USER_CUSTOM_RANGE) ? (&U.coba_weight) : NULL, UI_GetTheme()->tv3d.vertex_unreferenced); @@ -1847,19 +1847,19 @@ void init_userdef_do_versions(void) if (!USER_VERSION_ATLEAST(192, 0)) { strcpy(U.sounddir, "/"); } - + /* patch to set Dupli Armature */ if (!USER_VERSION_ATLEAST(220, 0)) { U.dupflag |= USER_DUP_ARM; } - + /* added seam, normal color, undo */ if (!USER_VERSION_ATLEAST(235, 0)) { bTheme *btheme; - + U.uiflag |= USER_GLOBALUNDO; if (U.undosteps == 0) U.undosteps = 32; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { /* check for (alpha == 0) is safe, then color was never set */ if (btheme->tv3d.edge_seam[3] == 0) { @@ -1879,7 +1879,7 @@ void init_userdef_do_versions(void) } if (!USER_VERSION_ATLEAST(236, 0)) { /* illegal combo... */ - if (U.flag & USER_LMOUSESELECT) + if (U.flag & USER_LMOUSESELECT) U.flag &= ~USER_TWOBUTTONMOUSE; } if (!USER_VERSION_ATLEAST(237, 0)) { @@ -1927,15 +1927,15 @@ void init_userdef_do_versions(void) } if (!USER_VERSION_ATLEAST(240, 0)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { /* Lamp theme, check for alpha==0 is safe, then color was never set */ if (btheme->tv3d.lamp[3] == 0) { rgba_char_args_set(btheme->tv3d.lamp, 0, 0, 0, 40); -/* TEMPORAL, remove me! (ton) */ +/* TEMPORAL, remove me! (ton) */ U.uiflag |= USER_PLAINMENUS; } - + } if (U.obcenter_dia == 0) U.obcenter_dia = 6; } @@ -1969,19 +1969,19 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tseq.meta, 109, 145, 131, 255); } } - - /* set defaults for 3D View rotating axis indicator */ + + /* set defaults for 3D View rotating axis indicator */ /* since size can't be set to 0, this indicates it's not saved in startup.blend */ if (U.rvisize == 0) { U.rvisize = 15; U.rvibright = 8; U.uiflag |= USER_SHOW_ROTVIEWICON; } - + } if (!USER_VERSION_ATLEAST(243, 0)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { /* long keyframe color */ /* check for alpha==0 is safe, then color was never set */ @@ -1990,7 +1990,7 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tact.strip_select, 0xff, 0xff, 0xaa, 204); rgba_char_args_set(btheme->tact.strip, 0xe4, 0x9c, 0xc6, 204); } - + /* IPO-Editor - Vertex Size*/ if (btheme->tipo.vertex_size == 0) { btheme->tipo.vertex_size = 3; @@ -2028,7 +2028,7 @@ void init_userdef_do_versions(void) /* action channel groups (recolor anyway) */ rgba_char_args_set(btheme->tact.group, 0x39, 0x7d, 0x1b, 255); rgba_char_args_set(btheme->tact.group_active, 0x7d, 0xe9, 0x60, 255); - + /* bone custom-color sets */ if (btheme->tarm[0].solid[3] == 0) ui_theme_init_boneColorSets(btheme); @@ -2039,18 +2039,18 @@ void init_userdef_do_versions(void) } if (!USER_VERSION_ATLEAST(245, 3)) { bTheme *btheme; - + /* adjust themes */ for (btheme = U.themes.first; btheme; btheme = btheme->next) { const char *col; - + /* IPO Editor: Handles/Vertices */ col = btheme->tipo.vertex; rgba_char_args_set(btheme->tipo.handle_vertex, col[0], col[1], col[2], 255); col = btheme->tipo.vertex_select; rgba_char_args_set(btheme->tipo.handle_vertex_select, col[0], col[1], col[2], 255); btheme->tipo.handle_vertex_size = btheme->tipo.vertex_size; - + /* Sequence/Image Editor: colors for GPencil text */ col = btheme->tv3d.bone_pose; rgba_char_args_set(btheme->tseq.bone_pose, col[0], col[1], col[2], 255); @@ -2061,7 +2061,7 @@ void init_userdef_do_versions(void) } if (!USER_VERSION_ATLEAST(250, 0)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { /* this was not properly initialized in 2.45 */ if (btheme->tima.face_dot[3] == 0) { @@ -2069,21 +2069,21 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tima.face_dot, 255, 133, 0, 255); btheme->tima.facedot_size = 2; } - + /* DopeSheet - (Object) Channel color */ rgba_char_args_set(btheme->tact.ds_channel, 82, 96, 110, 255); rgba_char_args_set(btheme->tact.ds_subchannel, 124, 137, 150, 255); /* DopeSheet - Group Channel color (saner version) */ rgba_char_args_set(btheme->tact.group, 79, 101, 73, 255); rgba_char_args_set(btheme->tact.group_active, 135, 177, 125, 255); - + /* Graph Editor - (Object) Channel color */ rgba_char_args_set(btheme->tipo.ds_channel, 82, 96, 110, 255); rgba_char_args_set(btheme->tipo.ds_subchannel, 124, 137, 150, 255); /* Graph Editor - Group Channel color */ rgba_char_args_set(btheme->tipo.group, 79, 101, 73, 255); rgba_char_args_set(btheme->tipo.group_active, 135, 177, 125, 255); - + /* Nla Editor - (Object) Channel color */ rgba_char_args_set(btheme->tnla.ds_channel, 82, 96, 110, 255); rgba_char_args_set(btheme->tnla.ds_subchannel, 124, 137, 150, 255); @@ -2091,20 +2091,20 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tnla.strip, 12, 10, 10, 128); rgba_char_args_set(btheme->tnla.strip_select, 255, 140, 0, 255); } - + /* adjust grease-pencil distances */ U.gp_manhattendist = 1; U.gp_euclideandist = 2; - + /* adjust default interpolation for new IPO-curves */ U.ipo_new = BEZT_IPO_BEZ; } - + if (!USER_VERSION_ATLEAST(250, 1)) { bTheme *btheme; for (btheme = U.themes.first; btheme; btheme = btheme->next) { - + /* common (new) variables, it checks for alpha==0 */ ui_theme_init_new(btheme); @@ -2133,10 +2133,10 @@ void init_userdef_do_versions(void) if (U.audiorate == 0) U.audiorate = 48000; } - + if (!USER_VERSION_ATLEAST(250, 8)) { wmKeyMap *km; - + for (km = U.user_keymaps.first; km; km = km->next) { if (STREQ(km->idname, "Armature_Sketch")) strcpy(km->idname, "Armature Sketch"); @@ -2172,17 +2172,17 @@ void init_userdef_do_versions(void) strcpy(km->idname, "Property Editor"); } } - + if (!USER_VERSION_ATLEAST(252, 3)) { - if (U.flag & USER_LMOUSESELECT) + if (U.flag & USER_LMOUSESELECT) U.flag &= ~USER_TWOBUTTONMOUSE; } if (!USER_VERSION_ATLEAST(252, 4)) { bTheme *btheme; - + /* default new handle type is auto handles */ U.keyhandles_new = HD_AUTO; - + /* init new curve colors */ for (btheme = U.themes.first; btheme; btheme = btheme->next) { ui_theme_space_init_handles_color(&btheme->tv3d); @@ -2203,21 +2203,21 @@ void init_userdef_do_versions(void) } if (!USER_VERSION_ATLEAST(252, 5)) { bTheme *btheme; - + /* interface_widgets.c */ struct uiWidgetColors wcol_progress = { {0, 0, 0, 255}, {190, 190, 190, 255}, {100, 100, 100, 180}, {128, 128, 128, 255}, - + {0, 0, 0, 255}, {255, 255, 255, 255}, - + 0, 5, -5 }; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { /* init progress bar theme */ btheme->tui.wcol_progress = wcol_progress; @@ -2232,7 +2232,7 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tv3d.extra_face_area, 0, 0, 128, 255); } } - + if (!USER_VERSION_ATLEAST(256, 4)) { bTheme *btheme; for (btheme = U.themes.first; btheme; btheme = btheme->next) { @@ -2255,7 +2255,7 @@ void init_userdef_do_versions(void) if (!USER_VERSION_ATLEAST(259, 1)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { btheme->tv3d.speaker[3] = 255; } @@ -2263,23 +2263,23 @@ void init_userdef_do_versions(void) if (!USER_VERSION_ATLEAST(260, 3)) { bTheme *btheme; - - /* if new keyframes handle default is stuff "auto", make it "auto-clamped" instead + + /* if new keyframes handle default is stuff "auto", make it "auto-clamped" instead * was changed in 260 as part of GSoC11, but version patch was wrong */ - if (U.keyhandles_new == HD_AUTO) + if (U.keyhandles_new == HD_AUTO) U.keyhandles_new = HD_AUTO_ANIM; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { if (btheme->tv3d.bundle_solid[3] == 0) rgba_char_args_set(btheme->tv3d.bundle_solid, 200, 200, 200, 255); - + if (btheme->tv3d.camera_path[3] == 0) rgba_char_args_set(btheme->tv3d.camera_path, 0x00, 0x00, 0x00, 255); - + if ((btheme->tclip.back[3]) == 0) { btheme->tclip = btheme->tv3d; - + rgba_char_args_set(btheme->tclip.marker_outline, 0x00, 0x00, 0x00, 255); rgba_char_args_set(btheme->tclip.marker, 0x7f, 0x7f, 0x00, 255); rgba_char_args_set(btheme->tclip.act_marker, 0xff, 0xff, 0xff, 255); @@ -2294,7 +2294,7 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tclip.handle_vertex_select, 0xff, 0xff, 0, 0xff); btheme->tclip.handle_vertex_size = 5; } - + /* auto-clamped handles -> based on auto */ if (btheme->tipo.handle_auto_clamped[3] == 0) rgba_char_args_set(btheme->tipo.handle_auto_clamped, 0x99, 0x40, 0x30, 255); @@ -2305,16 +2305,16 @@ void init_userdef_do_versions(void) /* enable (Cycles) addon by default */ BKE_addon_ensure(&U.addons, "cycles"); } - + if (!USER_VERSION_ATLEAST(260, 5)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { rgba_char_args_set(btheme->tui.panel.header, 0, 0, 0, 25); btheme->tui.icon_alpha = 1.0; } } - + if (!USER_VERSION_ATLEAST(261, 4)) { bTheme *btheme; for (btheme = U.themes.first; btheme; btheme = btheme->next) { @@ -2324,11 +2324,11 @@ void init_userdef_do_versions(void) rgba_char_args_set_fl(btheme->tima.preview_stitch_stitchable, 0.0, 1.0, 0.0, 1.0); rgba_char_args_set_fl(btheme->tima.preview_stitch_unstitchable, 1.0, 0.0, 0.0, 1.0); rgba_char_args_set_fl(btheme->tima.preview_stitch_active, 0.886, 0.824, 0.765, 0.140); - + rgba_char_args_set_fl(btheme->toops.match, 0.2, 0.5, 0.2, 0.3); rgba_char_args_set_fl(btheme->toops.selected_highlight, 0.51, 0.53, 0.55, 0.3); } - + U.use_16bit_textures = true; } @@ -2377,21 +2377,21 @@ void init_userdef_do_versions(void) for (btheme = U.themes.first; btheme; btheme = btheme->next) rgba_char_args_set(btheme->tv3d.skin_root, 180, 77, 77, 255); } - + if (!USER_VERSION_ATLEAST(263, 7)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { /* DopeSheet Summary */ - rgba_char_args_set(btheme->tact.anim_active, 204, 112, 26, 102); - + rgba_char_args_set(btheme->tact.anim_active, 204, 112, 26, 102); + /* NLA Colors */ rgba_char_args_set(btheme->tnla.anim_active, 204, 112, 26, 102); /* same as dopesheet above */ rgba_char_args_set(btheme->tnla.anim_non_active, 153, 135, 97, 77); - + rgba_char_args_set(btheme->tnla.nla_tweaking, 77, 243, 26, 77); rgba_char_args_set(btheme->tnla.nla_tweakdupli, 217, 0, 0, 255); - + rgba_char_args_set(btheme->tnla.nla_transition, 28, 38, 48, 255); rgba_char_args_set(btheme->tnla.nla_transition_sel, 46, 117, 219, 255); rgba_char_args_set(btheme->tnla.nla_meta, 51, 38, 66, 255); @@ -2440,10 +2440,10 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tv3d.skin_root, 180, 77, 77, 255); } } - + if (!USER_VERSION_ATLEAST(264, 9)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { rgba_char_args_set(btheme->tui.xaxis, 220, 0, 0, 255); rgba_char_args_set(btheme->tui.yaxis, 0, 220, 0, 255); @@ -2496,7 +2496,7 @@ void init_userdef_do_versions(void) U.ndof_sensitivity = 1.0f; U.ndof_flag = (NDOF_LOCK_HORIZON | NDOF_SHOULD_PAN | NDOF_SHOULD_ZOOM | NDOF_SHOULD_ROTATE); } - + if (U.ndof_orbit_sensitivity == 0.0f) { U.ndof_orbit_sensitivity = U.ndof_sensitivity; @@ -2509,7 +2509,7 @@ void init_userdef_do_versions(void) if (!USER_VERSION_ATLEAST(265, 1)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { /* note: the toggle operator for transparent backdrops limits to these spacetypes */ if (btheme->tnode.button[3] == 255) { @@ -2521,18 +2521,18 @@ void init_userdef_do_versions(void) } } } - + /* panel header/backdrop supported locally per editor now */ if (!USER_VERSION_ATLEAST(265, 2)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { ThemeSpace *ts; - + /* new color, panel backdrop. Not used anywhere yet, until you enable it */ copy_v3_v3_char(btheme->tui.panel.back, btheme->tbuts.button); btheme->tui.panel.back[3] = 128; - + for (ts = UI_THEMESPACE_START(btheme); ts != UI_THEMESPACE_END(btheme); ts++) { ts->panelcolors = btheme->tui.panel; } @@ -2545,7 +2545,7 @@ void init_userdef_do_versions(void) if (!USER_VERSION_ATLEAST(266, 0)) { bTheme *btheme; - + for (btheme = U.themes.first; btheme; btheme = btheme->next) { /* rna definition limits fac to 0.01 */ if (btheme->tui.menu_shadow_fac == 0.0f) { @@ -2645,7 +2645,7 @@ void init_userdef_do_versions(void) rgba_char_args_test_set(btheme->tinfo.info_debug_text, 0, 0, 0, 255); } } - + if (!USER_VERSION_ATLEAST(269, 9)) { bTheme *btheme; /* Action Editor (and NLA Editor) - Keyframe Colors */ @@ -2661,21 +2661,21 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tact.keytype_breakdown_select, 84, 191, 237, 255); rgba_char_args_set(btheme->tact.keytype_jitter, 148, 229, 117, 255); rgba_char_args_set(btheme->tact.keytype_jitter_select, 97, 192, 66, 255); - + /* key border */ rgba_char_args_set(btheme->tact.keyborder, 0, 0, 0, 255); rgba_char_args_set(btheme->tact.keyborder_select, 0, 0, 0, 255); - + /* NLA ............................ */ /* key border */ rgba_char_args_set(btheme->tnla.keyborder, 0, 0, 0, 255); rgba_char_args_set(btheme->tnla.keyborder_select, 0, 0, 0, 255); - + /* Graph Editor ................... */ btheme->tipo.vertex_size = 6; btheme->tipo.handle_vertex_size = 5; } - + /* grease pencil - new layer color */ if (U.gpencil_new_layer_col[3] < 0.1f) { /* defaults to black, but must at least be visible! */ @@ -2761,7 +2761,7 @@ void init_userdef_do_versions(void) rgba_char_args_set_fl(btheme->tui.widget_emboss, 1.0f, 1.0f, 1.0f, 0.02f); } } - + if (!USER_VERSION_ATLEAST(273, 1)) { bTheme *btheme; for (btheme = U.themes.first; btheme; btheme = btheme->next) { @@ -2769,15 +2769,15 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tv3d.gp_vertex, 0, 0, 0, 255); rgba_char_args_set(btheme->tv3d.gp_vertex_select, 255, 133, 0, 255); btheme->tv3d.gp_vertex_size = 3; - + rgba_char_args_set(btheme->tseq.gp_vertex, 0, 0, 0, 255); rgba_char_args_set(btheme->tseq.gp_vertex_select, 255, 133, 0, 255); btheme->tseq.gp_vertex_size = 3; - + rgba_char_args_set(btheme->tima.gp_vertex, 0, 0, 0, 255); rgba_char_args_set(btheme->tima.gp_vertex_select, 255, 133, 0, 255); btheme->tima.gp_vertex_size = 3; - + rgba_char_args_set(btheme->tnode.gp_vertex, 0, 0, 0, 255); rgba_char_args_set(btheme->tnode.gp_vertex_select, 255, 133, 0, 255); btheme->tnode.gp_vertex_size = 3; @@ -2874,7 +2874,7 @@ void init_userdef_do_versions(void) } } } - + if (!USER_VERSION_ATLEAST(277, 2)) { bTheme *btheme; for (btheme = U.themes.first; btheme; btheme = btheme->next) { @@ -2940,7 +2940,7 @@ void init_userdef_do_versions(void) copy_v4_v4_char(btheme->ttopbar.back, tmp); } } - + if (!USER_VERSION_ATLEAST(280, 9)) { /* Timeline removal */ for (bTheme *btheme = U.themes.first; btheme; btheme = btheme->next) { @@ -2948,7 +2948,7 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tipo.anim_active, 204, 112, 26, 102); } if (btheme->tseq.anim_active[3] == 0) { - rgba_char_args_set(btheme->tseq.anim_active, 204, 112, 26, 102); + rgba_char_args_set(btheme->tseq.anim_active, 204, 112, 26, 102); } } } @@ -3016,10 +3016,10 @@ void init_userdef_do_versions(void) if (U.pixelsize == 0.0f) U.pixelsize = 1.0f; - + if (U.image_draw_method == 0) U.image_draw_method = IMAGE_DRAW_METHOD_2DTEXTURE; - + // we default to the first audio device U.audiodevice = 0; diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index 012809910bf..530a6e28860 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +17,7 @@ * * The Original Code is Copyright (C) 2008 Blender Foundation. * All rights reserved. - * + * * Contributor(s): Blender Foundation, Joshua Leung * * ***** END GPL LICENSE BLOCK ***** @@ -119,7 +119,7 @@ static int view2d_scroll_mapped(int scroll) static void view2d_masks(View2D *v2d, bool check_scrollers) { int scroll; - + /* mask - view frame */ v2d->mask.xmin = v2d->mask.ymin = 0; v2d->mask.xmax = v2d->winx - 1; /* -1 yes! masks are pixels */ @@ -144,9 +144,9 @@ static void view2d_masks(View2D *v2d, bool check_scrollers) } } } - + scroll = view2d_scroll_mapped(v2d->scroll); - + /* scrollers are based off regionsize * - they can only be on one to two edges of the region they define * - if they overlap, they must not occupy the corners (which are reserved for other widgets) @@ -170,7 +170,7 @@ static void view2d_masks(View2D *v2d, bool check_scrollers) v2d->vert.xmax++; /* one pixel extra... was leaving a minor gap... */ v2d->vert.xmin = v2d->vert.xmax - scroll_width; } - + /* horizontal scroller */ if (scroll & (V2D_SCROLL_BOTTOM)) { /* on bottom edge of region */ @@ -182,7 +182,7 @@ static void view2d_masks(View2D *v2d, bool check_scrollers) v2d->hor = v2d->mask; v2d->hor.ymin = v2d->hor.ymax - scroll_height; } - + /* adjust vertical scroller if there's a horizontal scroller, to leave corner free */ if (scroll & V2D_SCROLL_VERTICAL) { if (scroll & (V2D_SCROLL_BOTTOM)) { @@ -225,20 +225,20 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) v2d->keepzoom = (V2D_KEEPASPECT | V2D_LIMITZOOM); v2d->minzoom = 0.01f; v2d->maxzoom = 1000.0f; - - /* tot rect and cur should be same size, and aligned using 'standard' OpenGL coordinates for now + + /* tot rect and cur should be same size, and aligned using 'standard' OpenGL coordinates for now * - region can resize 'tot' later to fit other data * - keeptot is only within bounds, as strict locking is not that critical * - view is aligned for (0,0) -> (winx-1, winy-1) setup */ v2d->align = (V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_NEG_Y); v2d->keeptot = V2D_KEEPTOT_BOUNDS; - + if (do_init) { v2d->tot.xmin = v2d->tot.ymin = 0.0f; v2d->tot.xmax = (float)(winx - 1); v2d->tot.ymax = (float)(winy - 1); - + v2d->cur = v2d->tot; } /* scrollers - should we have these by default? */ @@ -251,28 +251,28 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) /* zoom + aspect ratio are locked */ v2d->keepzoom = (V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y | V2D_LIMITZOOM | V2D_KEEPASPECT); v2d->minzoom = v2d->maxzoom = 1.0f; - + /* tot rect has strictly regulated placement, and must only occur in +/- quadrant */ v2d->align = (V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_POS_Y); v2d->keeptot = V2D_KEEPTOT_STRICT; tot_changed = do_init; - + /* scroller settings are currently not set here... that is left for regions... */ break; } - /* 'stack view' - practically the same as list/channel view, except is located in the pos y half instead. + /* 'stack view' - practically the same as list/channel view, except is located in the pos y half instead. * zoom, aspect ratio, and alignment restrictions are set here */ case V2D_COMMONVIEW_STACK: { /* zoom + aspect ratio are locked */ v2d->keepzoom = (V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y | V2D_LIMITZOOM | V2D_KEEPASPECT); v2d->minzoom = v2d->maxzoom = 1.0f; - + /* tot rect has strictly regulated placement, and must only occur in +/+ quadrant */ v2d->align = (V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_NEG_Y); v2d->keeptot = V2D_KEEPTOT_STRICT; tot_changed = do_init; - + /* scroller settings are currently not set here... that is left for regions... */ break; } @@ -282,14 +282,14 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) /* zoom + aspect ratio are locked */ v2d->keepzoom = (V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y | V2D_LIMITZOOM | V2D_KEEPASPECT); v2d->minzoom = v2d->maxzoom = 1.0f; - + if (do_init) { v2d->tot.xmin = 0.0f; v2d->tot.xmax = winx; v2d->tot.ymin = 0.0f; v2d->tot.ymax = winy; v2d->cur = v2d->tot; - + v2d->min[0] = v2d->max[0] = (float)(winx - 1); v2d->min[1] = v2d->max[1] = (float)(winy - 1); } @@ -297,10 +297,10 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) v2d->align = (V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_NEG_Y); v2d->keeptot = V2D_KEEPTOT_STRICT; tot_changed = do_init; - + /* panning in y-axis is prohibited */ v2d->keepofs = V2D_LOCKOFS_Y; - + /* absolutely no scrollers allowed */ v2d->scroll = 0; break; @@ -308,15 +308,15 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) /* panels view, with horizontal/vertical align */ case V2D_COMMONVIEW_PANELS_UI: { - + /* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */ v2d->keepzoom = (V2D_KEEPASPECT | V2D_LIMITZOOM | V2D_KEEPZOOM); v2d->minzoom = 0.5f; v2d->maxzoom = 2.0f; - + v2d->align = (V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_POS_Y); v2d->keeptot = V2D_KEEPTOT_BOUNDS; - + /* note, scroll is being flipped in ED_region_panels() drawing */ v2d->scroll |= (V2D_SCROLL_HORIZONTAL_HIDE | V2D_SCROLL_VERTICAL_HIDE); @@ -327,16 +327,16 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) if (do_init) { float panelzoom = (style) ? style->panelzoom : 1.0f; - + v2d->tot.xmin = 0.0f; v2d->tot.xmax = winx; - + v2d->tot.ymax = 0.0f; v2d->tot.ymin = -winy; - + v2d->cur.xmin = 0.0f; v2d->cur.xmax = (winx) * panelzoom; - + v2d->cur.ymax = 0.0f; v2d->cur.ymin = (-winy) * panelzoom; } @@ -347,29 +347,29 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) /* we don't do anything here, as settings should be fine, but just make sure that rect */ break; } - + /* set initialized flag so that View2D doesn't get reinitialised next time again */ v2d->flag |= V2D_IS_INITIALISED; /* store view size */ v2d->winx = winx; v2d->winy = winy; - + /* set masks (always do), but leave scroller scheck to totrect_set */ view2d_masks(v2d, 0); - + if (do_init) { /* Visible by default. */ v2d->alpha_hor = v2d->alpha_vert = 255; } - + /* set 'tot' rect before setting cur? */ /* XXX confusing stuff here still - I made this function not check scroller hide - that happens in totrect_set */ if (tot_changed) UI_view2d_totRect_set_resize(v2d, winx, winy, !do_init); else ui_view2d_curRect_validate_resize(v2d, !do_init, 0); - + } /** @@ -382,16 +382,16 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas float totwidth, totheight, curwidth, curheight, width, height; float winx, winy; rctf *cur, *tot; - + /* use mask as size of region that View2D resides in, as it takes into account * scrollbars already - keep in sync with zoomx/zoomy in view_zoomstep_apply_ex! */ winx = (float)(BLI_rcti_size_x(&v2d->mask) + 1); winy = (float)(BLI_rcti_size_y(&v2d->mask) + 1); - + /* get pointers to rcts for less typing */ cur = &v2d->cur; tot = &v2d->tot; - + /* we must satisfy the following constraints (in decreasing order of importance): * - alignment restrictions are respected * - cur must not fall outside of tot @@ -399,7 +399,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas * - zoom must not be excessive (check either sizes or zoom values) * - aspect ratio should be respected (NOTE: this is quite closely related to zoom too) */ - + /* Step 1: if keepzoom, adjust the sizes of the rects only * - firstly, we calculate the sizes of the rects * - curwidth and curheight are saved as reference... modify width and height values here @@ -409,14 +409,14 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas /* keep in sync with zoomx/zoomy in view_zoomstep_apply_ex! */ curwidth = width = BLI_rctf_size_x(cur); curheight = height = BLI_rctf_size_y(cur); - + /* if zoom is locked, size on the appropriate axis is reset to mask size */ if (v2d->keepzoom & V2D_LOCKZOOM_X) width = winx; if (v2d->keepzoom & V2D_LOCKZOOM_Y) height = winy; - - /* values used to divide, so make it safe + + /* values used to divide, so make it safe * NOTE: width and height must use FLT_MIN instead of 1, otherwise it is impossible to * get enough resolution in Graph Editor for editing some curves */ @@ -424,7 +424,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas if (height < FLT_MIN) height = 1; if (winx < 1) winx = 1; if (winy < 1) winy = 1; - + /* V2D_LIMITZOOM indicates that zoom level should be preserved when the window size changes */ if (resize && (v2d->keepzoom & V2D_KEEPZOOM)) { float zoom, oldzoom; @@ -445,11 +445,11 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas height *= zoom / oldzoom; } } - /* keepzoom (V2D_LIMITZOOM set), indicates that zoom level on each axis must not exceed limits + /* keepzoom (V2D_LIMITZOOM set), indicates that zoom level on each axis must not exceed limits * NOTE: in general, it is not expected that the lock-zoom will be used in conjunction with this */ else if (v2d->keepzoom & V2D_LIMITZOOM) { - + /* check if excessive zoom on x-axis */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) == 0) { const float zoom = winx / width; @@ -460,7 +460,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas width = winx / v2d->maxzoom; } } - + /* check if excessive zoom on y-axis */ if ((v2d->keepzoom & V2D_LOCKZOOM_Y) == 0) { const float zoom = winy / height; @@ -477,21 +477,21 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas CLAMP(width, v2d->min[0], v2d->max[0]); CLAMP(height, v2d->min[1], v2d->max[1]); } - + /* check if we should restore aspect ratio (if view size changed) */ if (v2d->keepzoom & V2D_KEEPASPECT) { bool do_x = false, do_y = false, do_cur /* , do_win */ /* UNUSED */; float curRatio, winRatio; - + /* when a window edge changes, the aspect ratio can't be used to - * find which is the best new 'cur' rect. thats why it stores 'old' + * find which is the best new 'cur' rect. thats why it stores 'old' */ if (winx != v2d->oldwinx) do_x = true; if (winy != v2d->oldwiny) do_y = true; - + curRatio = height / width; winRatio = winy / winx; - + /* both sizes change (area/region maximized) */ if (do_x == do_y) { if (do_x && do_y) { @@ -508,7 +508,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas } do_cur = do_x; /* do_win = do_y; */ /* UNUSED */ - + if (do_cur) { if ((v2d->keeptot == V2D_KEEPTOT_STRICT) && (winx != v2d->oldwinx)) { /* special exception for Outliner (and later channel-lists): @@ -518,12 +518,12 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas */ if (winx < v2d->oldwinx) { float temp = v2d->oldwinx - winx; - + cur->xmin -= temp; cur->xmax -= temp; - - /* width does not get modified, as keepaspect here is just set to make - * sure visible area adjusts to changing view shape! + + /* width does not get modified, as keepaspect here is just set to make + * sure visible area adjusts to changing view shape! */ } } @@ -540,7 +540,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas if (winy < v2d->oldwiny) { float temp = v2d->oldwiny - winy; - + if (v2d->align & V2D_ALIGN_NO_NEG_Y) { cur->ymin -= temp; cur->ymax -= temp; @@ -557,16 +557,16 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas height = width * winRatio; } } - + /* store region size for next time */ v2d->oldwinx = (short)winx; v2d->oldwiny = (short)winy; } - + /* Step 2: apply new sizes to cur rect, but need to take into account alignment settings here... */ if ((width != curwidth) || (height != curheight)) { float temp, dh; - + /* resize from centerpoint, unless otherwise specified */ if (width != curwidth) { if (v2d->keepofs & V2D_LOCKOFS_X) { @@ -581,7 +581,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas else { temp = BLI_rctf_cent_x(cur); dh = width * 0.5f; - + cur->xmin = temp - dh; cur->xmax = temp + dh; } @@ -599,21 +599,21 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas else { temp = BLI_rctf_cent_y(cur); dh = height * 0.5f; - + cur->ymin = temp - dh; cur->ymax = temp + dh; } } } - + /* Step 3: adjust so that it doesn't fall outside of bounds of 'tot' */ if (v2d->keeptot) { float temp, diff; - + /* recalculate extents of cur */ curwidth = BLI_rctf_size_x(cur); curheight = BLI_rctf_size_y(cur); - + /* width */ if ((curwidth > totwidth) && !(v2d->keepzoom & (V2D_KEEPZOOM | V2D_LOCKZOOM_X | V2D_LIMITZOOM))) { /* if zoom doesn't have to be maintained, just clamp edges */ @@ -621,28 +621,28 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas if (cur->xmax > tot->xmax) cur->xmax = tot->xmax; } else if (v2d->keeptot == V2D_KEEPTOT_STRICT) { - /* This is an exception for the outliner (and later channel-lists, headers) + /* This is an exception for the outliner (and later channel-lists, headers) * - must clamp within tot rect (absolutely no excuses) * --> therefore, cur->xmin must not be less than tot->xmin */ if (cur->xmin < tot->xmin) { /* move cur across so that it sits at minimum of tot */ temp = tot->xmin - cur->xmin; - + cur->xmin += temp; cur->xmax += temp; } else if (cur->xmax > tot->xmax) { - /* - only offset by difference of cur-xmax and tot-xmax if that would not move + /* - only offset by difference of cur-xmax and tot-xmax if that would not move * cur-xmin to lie past tot-xmin * - otherwise, simply shift to tot-xmin??? */ temp = cur->xmax - tot->xmax; - + if ((cur->xmin - temp) < tot->xmin) { /* only offset by difference from cur-min and tot-min */ temp = cur->xmin - tot->xmin; - + cur->xmin -= temp; cur->xmax -= temp; } @@ -656,7 +656,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas /* This here occurs when: * - width too big, but maintaining zoom (i.e. widths cannot be changed) * - width is OK, but need to check if outside of boundaries - * + * * So, resolution is to just shift view by the gap between the extremities. * We favour moving the 'minimum' across, as that's origin for most things * (XXX - in the past, max was favored... if there are bugs, swap!) @@ -665,28 +665,28 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas /* outside boundaries on both sides, so take middle-point of tot, and place in balanced way */ temp = BLI_rctf_cent_x(tot); diff = curwidth * 0.5f; - + cur->xmin = temp - diff; cur->xmax = temp + diff; } else if (cur->xmin < tot->xmin) { /* move cur across so that it sits at minimum of tot */ temp = tot->xmin - cur->xmin; - + cur->xmin += temp; cur->xmax += temp; } else if (cur->xmax > tot->xmax) { - /* - only offset by difference of cur-xmax and tot-xmax if that would not move + /* - only offset by difference of cur-xmax and tot-xmax if that would not move * cur-xmin to lie past tot-xmin * - otherwise, simply shift to tot-xmin??? */ temp = cur->xmax - tot->xmax; - + if ((cur->xmin - temp) < tot->xmin) { /* only offset by difference from cur-min and tot-min */ temp = cur->xmin - tot->xmin; - + cur->xmin -= temp; cur->xmax -= temp; } @@ -696,7 +696,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas } } } - + /* height */ if ((curheight > totheight) && !(v2d->keepzoom & (V2D_KEEPZOOM | V2D_LOCKZOOM_Y | V2D_LIMITZOOM))) { /* if zoom doesn't have to be maintained, just clamp edges */ @@ -707,7 +707,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas /* This here occurs when: * - height too big, but maintaining zoom (i.e. heights cannot be changed) * - height is OK, but need to check if outside of boundaries - * + * * So, resolution is to just shift view by the gap between the extremities. * We favour moving the 'minimum' across, as that's origin for most things */ @@ -715,37 +715,37 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas /* outside boundaries on both sides, so take middle-point of tot, and place in balanced way */ temp = BLI_rctf_cent_y(tot); diff = curheight * 0.5f; - + cur->ymin = temp - diff; cur->ymax = temp + diff; } else if (cur->ymin < tot->ymin) { /* there's still space remaining, so shift up */ temp = tot->ymin - cur->ymin; - + cur->ymin += temp; cur->ymax += temp; } else if (cur->ymax > tot->ymax) { /* there's still space remaining, so shift down */ temp = cur->ymax - tot->ymax; - + cur->ymin -= temp; cur->ymax -= temp; } } } - + /* Step 4: Make sure alignment restrictions are respected */ if (v2d->align) { /* If alignment flags are set (but keeptot is not), they must still be respected, as although - * they don't specify any particular bounds to stay within, they do define ranges which are + * they don't specify any particular bounds to stay within, they do define ranges which are * invalid. * - * Here, we only check to make sure that on each axis, the 'cur' rect doesn't stray into these + * Here, we only check to make sure that on each axis, the 'cur' rect doesn't stray into these * invalid zones, otherwise we offset. */ - + /* handle width - posx and negx flags are mutually exclusive, so watch out */ if ((v2d->align & V2D_ALIGN_NO_POS_X) && !(v2d->align & V2D_ALIGN_NO_NEG_X)) { /* width is in negative-x half */ @@ -761,7 +761,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas v2d->cur.xmin = 0.0f; } } - + /* handle height - posx and negx flags are mutually exclusive, so watch out */ if ((v2d->align & V2D_ALIGN_NO_POS_Y) && !(v2d->align & V2D_ALIGN_NO_NEG_Y)) { /* height is in negative-y half */ @@ -778,7 +778,7 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas } } } - + /* set masks */ view2d_masks(v2d, mask_scrollers); } @@ -795,11 +795,11 @@ void UI_view2d_sync(bScreen *screen, ScrArea *area, View2D *v2dcur, int flag) { ScrArea *sa; ARegion *ar; - + /* don't continue if no view syncing to be done */ if ((v2dcur->flag & (V2D_VIEWSYNC_SCREEN_TIME | V2D_VIEWSYNC_AREA_VERTICAL)) == 0) return; - + /* check if doing within area syncing (i.e. channels/vertical) */ if ((v2dcur->flag & V2D_VIEWSYNC_AREA_VERTICAL) && (area)) { for (ar = area->regionbase.first; ar; ar = ar->next) { @@ -817,14 +817,14 @@ void UI_view2d_sync(bScreen *screen, ScrArea *area, View2D *v2dcur, int flag) v2dcur->cur.ymin = ar->v2d.cur.ymin; v2dcur->cur.ymax = ar->v2d.cur.ymax; } - + /* region possibly changed, so refresh */ ED_region_tag_redraw_no_rebuild(ar); } } } } - + /* check if doing whole screen syncing (i.e. time/horizontal) */ if ((v2dcur->flag & V2D_VIEWSYNC_SCREEN_TIME) && (screen)) { for (sa = screen->areabase.first; sa; sa = sa->next) { @@ -843,7 +843,7 @@ void UI_view2d_sync(bScreen *screen, ScrArea *area, View2D *v2dcur, int flag) v2dcur->cur.xmin = ar->v2d.cur.xmin; v2dcur->cur.xmax = ar->v2d.cur.xmax; } - + /* region possibly changed, so refresh */ ED_region_tag_redraw_no_rebuild(ar); } @@ -861,11 +861,11 @@ void UI_view2d_sync(bScreen *screen, ScrArea *area, View2D *v2dcur, int flag) void UI_view2d_curRect_reset(View2D *v2d) { float width, height; - + /* assume width and height of 'cur' rect by default, should be same size as mask */ width = (float)(BLI_rcti_size_x(&v2d->mask) + 1); height = (float)(BLI_rcti_size_y(&v2d->mask) + 1); - + /* handle width - posx and negx flags are mutually exclusive, so watch out */ if ((v2d->align & V2D_ALIGN_NO_POS_X) && !(v2d->align & V2D_ALIGN_NO_NEG_X)) { /* width is in negative-x half */ @@ -880,11 +880,11 @@ void UI_view2d_curRect_reset(View2D *v2d) else { /* width is centered around (x == 0) */ const float dx = width / 2.0f; - + v2d->cur.xmin = -dx; v2d->cur.xmax = dx; } - + /* handle height - posx and negx flags are mutually exclusive, so watch out */ if ((v2d->align & V2D_ALIGN_NO_POS_Y) && !(v2d->align & V2D_ALIGN_NO_NEG_Y)) { /* height is in negative-y half */ @@ -899,7 +899,7 @@ void UI_view2d_curRect_reset(View2D *v2d) else { /* height is centered around (y == 0) */ const float dy = height / 2.0f; - + v2d->cur.ymin = -dy; v2d->cur.ymax = dy; } @@ -911,11 +911,11 @@ void UI_view2d_curRect_reset(View2D *v2d) void UI_view2d_totRect_set_resize(View2D *v2d, int width, int height, bool resize) { // int scroll = view2d_scroll_mapped(v2d->scroll); - + /* don't do anything if either value is 0 */ width = abs(width); height = abs(height); - + /* hrumf! */ /* XXX: there are work arounds for this in the panel and file browse code. */ /* round to int, because this is called with width + V2D_SCROLL_WIDTH */ @@ -923,13 +923,13 @@ void UI_view2d_totRect_set_resize(View2D *v2d, int width, int height, bool resiz // width -= (int)V2D_SCROLL_WIDTH; // if (scroll & V2D_SCROLL_VERTICAL) // height -= (int)V2D_SCROLL_HEIGHT; - + if (ELEM(0, width, height)) { if (G.debug & G_DEBUG) printf("Error: View2D totRect set exiting: v2d=%p width=%d height=%d\n", (void *)v2d, width, height); // XXX temp debug info return; } - + /* handle width - posx and negx flags are mutually exclusive, so watch out */ if ((v2d->align & V2D_ALIGN_NO_POS_X) && !(v2d->align & V2D_ALIGN_NO_NEG_X)) { /* width is in negative-x half */ @@ -944,11 +944,11 @@ void UI_view2d_totRect_set_resize(View2D *v2d, int width, int height, bool resiz else { /* width is centered around (x == 0) */ const float dx = (float)width / 2.0f; - + v2d->tot.xmin = -dx; v2d->tot.xmax = dx; } - + /* handle height - posx and negx flags are mutually exclusive, so watch out */ if ((v2d->align & V2D_ALIGN_NO_POS_Y) && !(v2d->align & V2D_ALIGN_NO_NEG_Y)) { /* height is in negative-y half */ @@ -963,14 +963,14 @@ void UI_view2d_totRect_set_resize(View2D *v2d, int width, int height, bool resiz else { /* height is centered around (y == 0) */ const float dy = (float)height / 2.0f; - + v2d->tot.ymin = -dy; v2d->tot.ymax = dy; } - + /* make sure that 'cur' rect is in a valid state as a result of these changes */ ui_view2d_curRect_validate_resize(v2d, resize, 1); - + } void UI_view2d_totRect_set(View2D *v2d, int width, int height) @@ -978,12 +978,12 @@ void UI_view2d_totRect_set(View2D *v2d, int width, int height) int scroll = view2d_scroll_mapped(v2d->scroll); UI_view2d_totRect_set_resize(v2d, width, height, 0); - + /* solve bad recursion... if scroller state changed, mask is different, so you get different rects */ if (scroll != view2d_scroll_mapped(v2d->scroll)) { UI_view2d_totRect_set_resize(v2d, width, height, 0); } - + } bool UI_view2d_tab_set(View2D *v2d, int tab) @@ -1054,21 +1054,21 @@ void UI_view2d_zoom_cache_reset(void) static void view2d_map_cur_using_mask(View2D *v2d, rctf *curmasked) { *curmasked = v2d->cur; - + if (view2d_scroll_mapped(v2d->scroll)) { float sizex = BLI_rcti_size_x(&v2d->mask); float sizey = BLI_rcti_size_y(&v2d->mask); - + /* prevent tiny or narrow regions to get invalid coordinates - mask can get negative even... */ if (sizex > 0.0f && sizey > 0.0f) { float dx = BLI_rctf_size_x(&v2d->cur) / (sizex + 1); float dy = BLI_rctf_size_y(&v2d->cur) / (sizey + 1); - + if (v2d->mask.xmin != 0) curmasked->xmin -= dx * (float)v2d->mask.xmin; if (v2d->mask.xmax + 1 != v2d->winx) curmasked->xmax += dx * (float)(v2d->winx - v2d->mask.xmax - 1); - + if (v2d->mask.ymin != 0) curmasked->ymin -= dy * (float)v2d->mask.ymin; if (v2d->mask.ymax + 1 != v2d->winy) @@ -1085,7 +1085,7 @@ void UI_view2d_view_ortho(View2D *v2d) const int sizey = BLI_rcti_size_y(&v2d->mask); const float eps = 0.001f; float xofs = 0.0f, yofs = 0.0f; - + /* pixel offsets (-GLA_PIXEL_OFS) are needed to get 1:1 correspondence with pixels for smooth UI drawing, * but only applied where requested */ @@ -1095,12 +1095,12 @@ void UI_view2d_view_ortho(View2D *v2d) xofs = eps * BLI_rctf_size_x(&v2d->cur) / sizex; if (sizey > 0) yofs = eps * BLI_rctf_size_y(&v2d->cur) / sizey; - + /* apply mask-based adjustments to cur rect (due to scrollers), to eliminate scaling artifacts */ view2d_map_cur_using_mask(v2d, &curmasked); BLI_rctf_translate(&curmasked, -xofs, -yofs); - + /* XXX ton: this flag set by outliner, for icons */ if (v2d->flag & V2D_PIXELOFS_X) { curmasked.xmin = floorf(curmasked.xmin) - (eps + xofs); @@ -1110,7 +1110,7 @@ void UI_view2d_view_ortho(View2D *v2d) curmasked.ymin = floorf(curmasked.ymin) - (eps + yofs); curmasked.ymax = floorf(curmasked.ymax) - (eps + yofs); } - + /* set matrix on all appropriate axes */ wmOrtho2(curmasked.xmin, curmasked.xmax, curmasked.ymin, curmasked.ymax); } @@ -1124,23 +1124,23 @@ void UI_view2d_view_orthoSpecial(ARegion *ar, View2D *v2d, const bool xaxis) { rctf curmasked; float xofs, yofs; - + /* pixel offsets (-GLA_PIXEL_OFS) are needed to get 1:1 correspondence with pixels for smooth UI drawing, * but only applied where requested */ /* XXX temp (ton) */ xofs = 0.0f; // (v2d->flag & V2D_PIXELOFS_X) ? GLA_PIXEL_OFS : 0.0f; yofs = 0.0f; // (v2d->flag & V2D_PIXELOFS_Y) ? GLA_PIXEL_OFS : 0.0f; - + /* apply mask-based adjustments to cur rect (due to scrollers), to eliminate scaling artifacts */ view2d_map_cur_using_mask(v2d, &curmasked); - + /* only set matrix with 'cur' coordinates on relevant axes */ if (xaxis) wmOrtho2(curmasked.xmin - xofs, curmasked.xmax - xofs, -yofs, ar->winy - yofs); else wmOrtho2(-xofs, ar->winx - xofs, curmasked.ymin - yofs, curmasked.ymax - yofs); -} +} /* Restore view matrices after drawing */ @@ -1149,10 +1149,10 @@ void UI_view2d_view_restore(const bContext *C) ARegion *ar = CTX_wm_region(C); int width = BLI_rcti_size_x(&ar->winrct) + 1; int height = BLI_rcti_size_y(&ar->winrct) + 1; - + wmOrtho2(0.0f, (float)width, 0.0f, (float)height); gpuLoadIdentity(); - + // ED_region_pixelspace(CTX_wm_region(C)); } @@ -1173,25 +1173,25 @@ static void step_to_grid(float *step, int *power, int unit) { const float loga = (float)log10(*step); float rem; - + *power = (int)(loga); - + rem = loga - (*power); rem = (float)pow(10.0, rem); - + if (loga < 0.0f) { if (rem < 0.2f) rem = 0.2f; else if (rem < 0.5f) rem = 0.5f; else rem = 1.0f; - + *step = rem * (float)pow(10.0, (*power)); - + /* for frames, we want 1.0 frame intervals only */ if (unit == V2D_UNIT_FRAMES) { rem = 1.0f; *step = 2.0f; /* use 2 since there are grid lines drawn in between, this way to get 1 line per frane */ } - + /* prevents printing 1.0 2.0 3.0 etc */ if (rem == 1.0f) (*power)++; } @@ -1199,9 +1199,9 @@ static void step_to_grid(float *step, int *power, int unit) if (rem < 2.0f) rem = 2.0f; else if (rem < 5.0f) rem = 5.0f; else rem = 10.0f; - + *step = rem * (float)pow(10.0, (*power)); - + (*power)++; /* prevents printing 1.0, 2.0, 3.0, etc. */ if (rem == 10.0f) (*power)++; @@ -1229,14 +1229,14 @@ View2DGrid *UI_view2d_grid_calc( View2DGrid *grid; float space, seconddiv; - + /* check that there are at least some workable args */ if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) && ELEM(V2D_ARG_DUMMY, yunits, yclamp)) return NULL; - + /* grid here is allocated... */ grid = MEM_callocN(sizeof(View2DGrid), "View2DGrid"); - + /* rule: gridstep is minimal GRIDSTEP pixels */ if (xunits == V2D_UNIT_SECONDS) { seconddiv = (float)(0.01 * FPS); @@ -1244,7 +1244,7 @@ View2DGrid *UI_view2d_grid_calc( else { seconddiv = 1.0f; } - + /* calculate x-axis grid scale (only if both args are valid) */ if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) == 0) { space = BLI_rctf_size_x(&v2d->cur); @@ -1257,14 +1257,14 @@ View2DGrid *UI_view2d_grid_calc( grid->dx *= seconddiv; } } - + if (xclamp == V2D_GRID_CLAMP) { CLAMP_MIN(grid->dx, 0.1f); CLAMP_MIN(grid->powerx, 0); grid->powerx -= 2; } } - + /* calculate y-axis grid scale (only if both args are valid) */ if (ELEM(V2D_ARG_DUMMY, yunits, yclamp) == 0) { space = BLI_rctf_size_y(&v2d->cur); @@ -1281,7 +1281,7 @@ View2DGrid *UI_view2d_grid_calc( CLAMP_MIN(grid->powery, 1); } } - + /* calculate start position */ if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) == 0) { grid->startx = seconddiv * (v2d->cur.xmin / seconddiv - (float)fmod(v2d->cur.xmin / seconddiv, grid->dx / seconddiv)); @@ -1289,14 +1289,14 @@ View2DGrid *UI_view2d_grid_calc( } else grid->startx = v2d->cur.xmin; - + if (ELEM(V2D_ARG_DUMMY, yunits, yclamp) == 0) { grid->starty = (v2d->cur.ymin - (float)fmod(v2d->cur.ymin, grid->dy)); if (v2d->cur.ymin < 0.0f) grid->starty -= grid->dy; } else grid->starty = v2d->cur.ymin; - + return grid; } @@ -1308,7 +1308,7 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag) int vertical_minor_step = (BLI_rcti_size_x(&v2d->mask) + 1) / (U.v2d_min_gridsize * UI_DPI_FAC), horizontal_major_step = (BLI_rcti_size_y(&v2d->mask) + 1) / (U.v2d_min_gridsize * UI_DPI_FAC); unsigned char grid_line_color[3]; - + /* check for grid first, as it may not exist */ if (grid == NULL) return; @@ -1351,47 +1351,47 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag) vec1[0] = vec2[0] = grid->startx; vec1[1] = grid->starty; vec2[1] = v2d->cur.ymax; - + /* minor gridlines */ step = vertical_minor_step; if (step != 0) { UI_GetThemeColor3ubv(TH_GRID, grid_line_color); - + for (a = 0; a < step; a++) { immSkipAttrib(color); immVertex2fv(pos, vec1); immAttrib3ubv(color, grid_line_color); immVertex2fv(pos, vec2); - + vec2[0] = vec1[0] += grid->dx; } } - + /* major gridlines */ vec2[0] = vec1[0] -= 0.5f * grid->dx; UI_GetThemeColorShade3ubv(TH_GRID, 16, grid_line_color); - + step++; for (a = 0; a <= step; a++) { immSkipAttrib(color); immVertex2fv(pos, vec1); immAttrib3ubv(color, grid_line_color); immVertex2fv(pos, vec2); - + vec2[0] = vec1[0] -= grid->dx; } } - + /* horizontal lines */ if (flag & V2D_HORIZONTAL_LINES) { /* only major gridlines */ vec1[1] = vec2[1] = grid->starty; vec1[0] = grid->startx; vec2[0] = v2d->cur.xmax; - + step = horizontal_major_step; - + UI_GetThemeColor3ubv(TH_GRID, grid_line_color); for (a = 0; a <= step; a++) { @@ -1399,14 +1399,14 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag) immVertex2fv(pos, vec1); immAttrib3ubv(color, grid_line_color); immVertex2fv(pos, vec2); - + vec2[1] = vec1[1] += grid->dy; } - + /* fine grid lines */ vec2[1] = vec1[1] -= 0.5f * grid->dy; step++; - + if (flag & V2D_HORIZONTAL_FINELINES) { UI_GetThemeColorShade3ubv(TH_GRID, 16, grid_line_color); for (a = 0; a < step; a++) { @@ -1414,33 +1414,33 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag) immVertex2fv(pos, vec1); immAttrib3ubv(color, grid_line_color); immVertex2fv(pos, vec2); - + vec2[1] = vec1[1] -= grid->dy; } } } - + /* Axes are drawn as darker lines */ UI_GetThemeColorShade3ubv(TH_GRID, -50, grid_line_color); - + /* horizontal axis */ if (flag & V2D_HORIZONTAL_AXIS) { vec1[0] = v2d->cur.xmin; vec2[0] = v2d->cur.xmax; vec1[1] = vec2[1] = 0.0f; - + immSkipAttrib(color); immVertex2fv(pos, vec1); immAttrib3ubv(color, grid_line_color); immVertex2fv(pos, vec2); } - + /* vertical axis */ if (flag & V2D_VERTICAL_AXIS) { vec1[1] = v2d->cur.ymin; vec2[1] = v2d->cur.ymax; vec1[0] = vec2[0] = 0.0f; - + immSkipAttrib(color); immVertex2fv(pos, vec1); immAttrib3ubv(color, grid_line_color); @@ -1456,7 +1456,7 @@ void UI_view2d_constant_grid_draw(View2D *v2d, float step) { float start_x, start_y; int count_x, count_y; - + start_x = v2d->cur.xmin; if (start_x < 0.0) start_x += -(float)fmod(v2d->cur.xmin, step); @@ -1478,7 +1478,7 @@ void UI_view2d_constant_grid_draw(View2D *v2d, float step) count_y = 0; else count_y = (v2d->cur.ymax - start_y) / step + 1; - + if (count_x > 0 || count_y > 0) { Gwn_VertFormat *format = immVertexFormat(); unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT); @@ -1486,10 +1486,10 @@ void UI_view2d_constant_grid_draw(View2D *v2d, float step) float theme_color[3]; UI_GetThemeColorShade3fv(TH_BACK, -10, theme_color); - + immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR); immBegin(GWN_PRIM_LINES, count_x * 2 + count_y * 2 + 4); - + immAttrib3fv(color, theme_color); for (int i = 0; i < count_x ; start_x += step, i++) { immVertex2f(pos, start_x, v2d->cur.ymin); @@ -1500,16 +1500,16 @@ void UI_view2d_constant_grid_draw(View2D *v2d, float step) immVertex2f(pos, v2d->cur.xmin, start_y); immVertex2f(pos, v2d->cur.xmax, start_y); } - + /* X and Y axis */ UI_GetThemeColorShade3fv(TH_BACK, -18, theme_color); - + immAttrib3fv(color, theme_color); immVertex2f(pos, 0.0f, v2d->cur.ymin); immVertex2f(pos, 0.0f, v2d->cur.ymax); immVertex2f(pos, v2d->cur.xmin, 0.0f); immVertex2f(pos, v2d->cur.xmax, 0.0f); - + immEnd(); immUnbindProgram(); } @@ -1542,12 +1542,12 @@ void UI_view2d_multi_grid_draw(View2D *v2d, int colorid, float step, int level_s for (int level = 0; level < totlevels; ++level) { UI_GetThemeColorShade3ubv(colorid, offset, grid_line_color); - + int i = (int)(v2d->cur.xmin / lstep); if (v2d->cur.xmin > 0.0f) i++; float start = i * lstep; - + for (; start < v2d->cur.xmax; start += lstep, ++i) { if (i == 0 || (level < totlevels - 1 && i % level_size == 0)) continue; @@ -1557,12 +1557,12 @@ void UI_view2d_multi_grid_draw(View2D *v2d, int colorid, float step, int level_s immAttrib3ubv(color, grid_line_color); immVertex2f(pos, start, v2d->cur.ymax); } - + i = (int)(v2d->cur.ymin / lstep); if (v2d->cur.ymin > 0.0f) i++; start = i * lstep; - + for (; start < v2d->cur.ymax; start += lstep, ++i) { if (i == 0 || (level < totlevels - 1 && i % level_size == 0)) continue; @@ -1572,7 +1572,7 @@ void UI_view2d_multi_grid_draw(View2D *v2d, int colorid, float step, int level_s immAttrib3ubv(color, grid_line_color); immVertex2f(pos, v2d->cur.xmax, start); } - + lstep *= level_size; offset -= 6; } @@ -1623,10 +1623,10 @@ struct View2DScrollers { /* focus bubbles */ int vert_min, vert_max; /* vertical scrollbar */ int hor_min, hor_max; /* horizontal scrollbar */ - + rcti hor, vert; /* exact size of slider backdrop */ int horfull, vertfull; /* set if sliders are full, we don't draw them */ - + /* scales */ View2DGrid *grid; /* grid for coordinate drawing */ short xunits, xclamp; /* units and clamping options for x-axis */ @@ -1643,16 +1643,16 @@ View2DScrollers *UI_view2d_scrollers_calc( float fac1, fac2, totsize, scrollsize; int scroll = view2d_scroll_mapped(v2d->scroll); int smaller; - + /* scrollers is allocated here... */ scrollers = MEM_callocN(sizeof(View2DScrollers), "View2DScrollers"); - + /* Always update before drawing (for dynamically sized scrollers). */ view2d_masks(v2d, false); - + vert = v2d->vert; hor = v2d->hor; - + /* slider rects need to be smaller than region */ smaller = (int)(0.1f * U.widget_unit); hor.xmin += smaller; @@ -1661,26 +1661,26 @@ View2DScrollers *UI_view2d_scrollers_calc( hor.ymin += smaller; else hor.ymax -= smaller; - + if (scroll & V2D_SCROLL_LEFT) vert.xmin += smaller; else vert.xmax -= smaller; vert.ymin += smaller; vert.ymax -= smaller; - + CLAMP(vert.ymin, vert.ymin, vert.ymax - V2D_SCROLLER_HANDLE_SIZE); CLAMP(hor.xmin, hor.xmin, hor.xmax - V2D_SCROLLER_HANDLE_SIZE); - + /* store in scrollers, used for drawing */ scrollers->vert = vert; scrollers->hor = hor; - + /* scroller 'buttons': * - These should always remain within the visible region of the scrollbar * - They represent the region of 'tot' that is visible in 'cur' */ - + /* horizontal scrollers */ if (scroll & V2D_SCROLL_HORIZONTAL) { /* scroller 'button' extents */ @@ -1693,15 +1693,15 @@ View2DScrollers *UI_view2d_scrollers_calc( scrollers->hor_min = hor.xmin; else scrollers->hor_min = (int)(hor.xmin + (fac1 * scrollsize)); - + fac2 = (v2d->cur.xmax - v2d->tot.xmin) / totsize; if (fac2 >= 1.0f) scrollers->hor_max = hor.xmax; else scrollers->hor_max = (int)(hor.xmin + (fac2 * scrollsize)); - + /* prevent inverted sliders */ - if (scrollers->hor_min > scrollers->hor_max) + if (scrollers->hor_min > scrollers->hor_max) scrollers->hor_min = scrollers->hor_max; /* prevent sliders from being too small, and disappearing */ if ((scrollers->hor_max - scrollers->hor_min) < V2D_SCROLLER_HANDLE_SIZE) { @@ -1710,9 +1710,9 @@ View2DScrollers *UI_view2d_scrollers_calc( CLAMP(scrollers->hor_max, hor.xmin + V2D_SCROLLER_HANDLE_SIZE, hor.xmax); CLAMP(scrollers->hor_min, hor.xmin, hor.xmax - V2D_SCROLLER_HANDLE_SIZE); } - + } - + /* vertical scrollers */ if (scroll & V2D_SCROLL_VERTICAL) { /* scroller 'button' extents */ @@ -1725,27 +1725,27 @@ View2DScrollers *UI_view2d_scrollers_calc( scrollers->vert_min = vert.ymin; else scrollers->vert_min = (int)(vert.ymin + (fac1 * scrollsize)); - + fac2 = (v2d->cur.ymax - v2d->tot.ymin) / totsize; if (fac2 >= 1.0f) scrollers->vert_max = vert.ymax; else scrollers->vert_max = (int)(vert.ymin + (fac2 * scrollsize)); - + /* prevent inverted sliders */ - if (scrollers->vert_min > scrollers->vert_max) + if (scrollers->vert_min > scrollers->vert_max) scrollers->vert_min = scrollers->vert_max; /* prevent sliders from being too small, and disappearing */ if ((scrollers->vert_max - scrollers->vert_min) < V2D_SCROLLER_HANDLE_SIZE) { - + scrollers->vert_max = scrollers->vert_min + V2D_SCROLLER_HANDLE_SIZE; - + CLAMP(scrollers->vert_max, vert.ymin + V2D_SCROLLER_HANDLE_SIZE, vert.ymax); CLAMP(scrollers->vert_min, vert.ymin, vert.ymax - V2D_SCROLLER_HANDLE_SIZE); } } - + /* grid markings on scrollbars */ if (scroll & (V2D_SCROLL_SCALE_HORIZONTAL | V2D_SCROLL_SCALE_VERTICAL)) { /* store clamping */ @@ -1753,12 +1753,12 @@ View2DScrollers *UI_view2d_scrollers_calc( scrollers->xunits = xunits; scrollers->yclamp = yclamp; scrollers->yunits = yunits; - + scrollers->grid = UI_view2d_grid_calc(CTX_data_scene(C), v2d, xunits, xclamp, yunits, yclamp, BLI_rcti_size_x(&hor), BLI_rcti_size_y(&vert)); } - + /* return scrollers */ return scrollers; } @@ -1768,11 +1768,11 @@ static void scroll_printstr(Scene *scene, float x, float y, float val, int power { int len; char timecode_str[32]; - + /* adjust the scale unit to work ok */ if (dir == 'v') { - /* here we bump up the power by factor of 10, as - * rotation values (hence 'degrees') are divided by 10 to + /* here we bump up the power by factor of 10, as + * rotation values (hence 'degrees') are divided by 10 to * be able to show the curves at the same time */ if (ELEM(unit, V2D_UNIT_DEGREES, V2D_UNIT_TIME)) { @@ -1780,7 +1780,7 @@ static void scroll_printstr(Scene *scene, float x, float y, float val, int power val *= 10; } } - + /* get string to print */ if (unit == V2D_UNIT_SECONDS) { /* not neces*/ @@ -1789,7 +1789,7 @@ static void scroll_printstr(Scene *scene, float x, float y, float val, int power else { BLI_timecode_string_from_time_seconds(timecode_str, sizeof(timecode_str), power, val); } - + /* get length of string, and adjust printing location to fit it into the horizontal scrollbar */ len = strlen(timecode_str); if (dir == 'h') { @@ -1799,13 +1799,13 @@ static void scroll_printstr(Scene *scene, float x, float y, float val, int power else x -= 4 * len; } - + /* Add degree sympbol to end of string for vertical scrollbar? */ if ((dir == 'v') && (unit == V2D_UNIT_DEGREES)) { timecode_str[len] = 186; timecode_str[len + 1] = 0; } - + /* draw it */ BLF_draw_default_ascii(x, y, 0.0f, timecode_str, sizeof(timecode_str)); } @@ -1822,35 +1822,35 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v /* Color for scrollbar backs */ UI_GetThemeColor4ubv(TH_BACK, scrollers_back_color); - + /* make copies of rects for less typing */ vert = vs->vert; hor = vs->hor; - + /* horizontal scrollbar */ if (scroll & V2D_SCROLL_HORIZONTAL) { uiWidgetColors wcol = btheme->tui.wcol_scroll; const float alpha_fac = v2d->alpha_hor / 255.0f; rcti slider; int state; - + slider.xmin = vs->hor_min; slider.xmax = vs->hor_max; slider.ymin = hor.ymin; slider.ymax = hor.ymax; - + state = (v2d->scroll_ui & V2D_SCROLL_H_ACTIVE) ? UI_SCROLL_PRESSED : 0; - + wcol.inner[3] *= alpha_fac; wcol.item[3] *= alpha_fac; wcol.outline[3] *= alpha_fac; btheme->tui.widget_emboss[3] *= alpha_fac; /* will be reset later */ - + /* show zoom handles if: * - zooming on x-axis is allowed (no scroll otherwise) * - slider bubble is large enough (no overdraw confusion) - * - scale is shown on the scroller - * (workaround to make sure that button windows don't show these, + * - scale is shown on the scroller + * (workaround to make sure that button windows don't show these, * and only the time-grids with their zoomability can do so) */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) == 0 && @@ -1861,27 +1861,27 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v } UI_draw_widget_scroll(&wcol, &hor, &slider, state); - + /* scale indicators */ if ((scroll & V2D_SCROLL_SCALE_HORIZONTAL) && (vs->grid)) { const int font_id = BLF_default(); View2DGrid *grid = vs->grid; float fac, dfac, fac2, val; - - /* the numbers: convert grid->startx and -dx to scroll coordinates + + /* the numbers: convert grid->startx and -dx to scroll coordinates * - fac is x-coordinate to draw to * - dfac is gap between scale markings */ fac = (grid->startx - v2d->cur.xmin) / BLI_rctf_size_x(&v2d->cur); fac = (float)hor.xmin + fac * BLI_rcti_size_x(&hor); - + dfac = grid->dx / BLI_rctf_size_x(&v2d->cur); dfac = dfac * BLI_rcti_size_x(&hor); - + /* set starting value, and text color */ UI_FontThemeColor(font_id, TH_TEXT); val = grid->startx; - + /* if we're clamping to whole numbers only, make sure entries won't be repeated */ if (vs->xclamp == V2D_GRID_CLAMP) { while (grid->dx < 0.9999f) { @@ -1899,25 +1899,25 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v BLF_batch_draw_begin(); for (; fac < hor.xmax - 0.5f * U.widget_unit; fac += dfac, val += grid->dx) { - + /* make prints look nicer for scrollers */ if (fac < hor.xmin + 0.5f * U.widget_unit) continue; - + switch (vs->xunits) { case V2D_UNIT_FRAMES: /* frames (as whole numbers)*/ scroll_printstr(scene, fac, h, val, grid->powerx, V2D_UNIT_FRAMES, 'h'); break; - + case V2D_UNIT_FRAMESCALE: /* frames (not always as whole numbers) */ scroll_printstr(scene, fac, h, val, grid->powerx, V2D_UNIT_FRAMESCALE, 'h'); break; - + case V2D_UNIT_SECONDS: /* seconds */ fac2 = val / (float)FPS; scroll_printstr(scene, fac, h, fac2, grid->powerx, V2D_UNIT_SECONDS, 'h'); break; - + case V2D_UNIT_DEGREES: /* Graph Editor for rotation Drivers */ /* HACK: although we're drawing horizontal, we make this draw as 'vertical', just to get degree signs */ scroll_printstr(scene, fac, h, val, grid->powerx, V2D_UNIT_DEGREES, 'v'); @@ -1929,31 +1929,31 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v } } } - + /* vertical scrollbar */ if (scroll & V2D_SCROLL_VERTICAL) { uiWidgetColors wcol = btheme->tui.wcol_scroll; rcti slider; const float alpha_fac = v2d->alpha_vert / 255.0f; int state; - + slider.xmin = vert.xmin; slider.xmax = vert.xmax; slider.ymin = vs->vert_min; slider.ymax = vs->vert_max; - + state = (v2d->scroll_ui & V2D_SCROLL_V_ACTIVE) ? UI_SCROLL_PRESSED : 0; - + wcol.inner[3] *= alpha_fac; wcol.item[3] *= alpha_fac; wcol.outline[3] *= alpha_fac; btheme->tui.widget_emboss[3] *= alpha_fac; /* will be reset later */ - + /* show zoom handles if: * - zooming on y-axis is allowed (no scroll otherwise) * - slider bubble is large enough (no overdraw confusion) - * - scale is shown on the scroller - * (workaround to make sure that button windows don't show these, + * - scale is shown on the scroller + * (workaround to make sure that button windows don't show these, * and only the time-grids with their zoomability can do so) */ if ((v2d->keepzoom & V2D_LOCKZOOM_Y) == 0 && @@ -1962,16 +1962,16 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v { state |= UI_SCROLL_ARROWS; } - + UI_draw_widget_scroll(&wcol, &vert, &slider, state); - - + + /* scale indiators */ if ((scroll & V2D_SCROLL_SCALE_VERTICAL) && (vs->grid)) { View2DGrid *grid = vs->grid; float fac, dfac, val; - - /* the numbers: convert grid->starty and dy to scroll coordinates + + /* the numbers: convert grid->starty and dy to scroll coordinates * - fac is y-coordinate to draw to * - dfac is gap between scale markings * - these involve a correction for horizontal scrollbar @@ -1979,38 +1979,38 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v */ fac = (grid->starty - v2d->cur.ymin) / BLI_rctf_size_y(&v2d->cur); fac = vert.ymin + fac * BLI_rcti_size_y(&vert); - + dfac = grid->dy / BLI_rctf_size_y(&v2d->cur); dfac = dfac * BLI_rcti_size_y(&vert); - + /* set starting value, and text color */ const int font_id = BLF_default(); UI_FontThemeColor(font_id, TH_TEXT); val = grid->starty; - + /* if vertical clamping (to whole numbers) is used (i.e. in Sequencer), apply correction */ if (vs->yclamp == V2D_GRID_CLAMP) fac += 0.5f * dfac; - + /* draw vertical steps */ if (dfac > 0.0f) { BLF_rotation(font_id, M_PI_2); BLF_enable(font_id, BLF_ROTATION); for (; fac < vert.ymax - 10; fac += dfac, val += grid->dy) { - + /* make prints look nicer for scrollers */ if (fac < vert.ymin + 10) continue; - + scroll_printstr(scene, (float)(vert.xmax) - 2.0f, fac, val, grid->powery, vs->yunits, 'v'); } - + BLF_disable(font_id, BLF_ROTATION); } } } - + /* Was changed above, so reset. */ btheme->tui.widget_emboss[3] = emboss_alpha; } @@ -2055,21 +2055,21 @@ void UI_view2d_listview_cell_to_view( rect->ymin = rect->ymax = 0.0f; return; } - + /* x-coordinates */ rect->xmin = startx + (float)(columnwidth * column); rect->xmax = startx + (float)(columnwidth * (column + 1)); - + if ((v2d->align & V2D_ALIGN_NO_POS_X) && !(v2d->align & V2D_ALIGN_NO_NEG_X)) { /* simply negate the values for the coordinates if in negative half */ rect->xmin = -rect->xmin; rect->xmax = -rect->xmax; } - + /* y-coordinates */ rect->ymin = starty + (float)(rowheight * row); rect->ymax = starty + (float)(rowheight * (row + 1)); - + if ((v2d->align & V2D_ALIGN_NO_POS_Y) && !(v2d->align & V2D_ALIGN_NO_NEG_Y)) { /* simply negate the values for the coordinates if in negative half */ rect->ymin = -rect->ymin; @@ -2095,21 +2095,21 @@ void UI_view2d_listview_view_to_cell( /* adjust view coordinates to be all positive ints, corrected for the start offset */ const int x = (int)(floorf(fabsf(viewx) + 0.5f) - startx); const int y = (int)(floorf(fabsf(viewy) + 0.5f) - starty); - + /* sizes must not be negative */ if ((v2d == NULL) || ((columnwidth <= 0) && (rowheight <= 0))) { if (column) *column = 0; if (row) *row = 0; - + return; } - + /* get column */ if ((column) && (columnwidth > 0)) *column = x / columnwidth; else if (column) *column = 0; - + /* get row */ if ((row) && (rowheight > 0)) *row = y / rowheight; @@ -2131,11 +2131,11 @@ void UI_view2d_listview_visible_cells( /* using 'cur' rect coordinates, call the cell-getting function to get the cells for this */ if (v2d) { /* min */ - UI_view2d_listview_view_to_cell(v2d, columnwidth, rowheight, startx, starty, + UI_view2d_listview_view_to_cell(v2d, columnwidth, rowheight, startx, starty, v2d->cur.xmin, v2d->cur.ymin, column_min, row_min); /* max*/ - UI_view2d_listview_view_to_cell(v2d, columnwidth, rowheight, startx, starty, + UI_view2d_listview_view_to_cell(v2d, columnwidth, rowheight, startx, starty, v2d->cur.xmax, v2d->cur.ymax, column_max, row_max); } } @@ -2196,7 +2196,7 @@ bool UI_view2d_view_to_region_clip(View2D *v2d, float x, float y, int *r_region_ /* express given coordinates as proportional values */ x = (x - v2d->cur.xmin) / BLI_rctf_size_x(&v2d->cur); y = (y - v2d->cur.ymin) / BLI_rctf_size_y(&v2d->cur); - + /* check if values are within bounds */ if ((x >= 0.0f) && (x <= 1.0f) && (y >= 0.0f) && (y <= 1.0f)) { *r_region_x = (int)(v2d->mask.xmin + (x * BLI_rcti_size_x(&v2d->mask))); @@ -2348,7 +2348,7 @@ View2D *UI_view2d_fromcontext_rwin(const bContext *C) * * \param x, y: scale on each axis */ -void UI_view2d_scale_get(View2D *v2d, float *x, float *y) +void UI_view2d_scale_get(View2D *v2d, float *x, float *y) { if (x) *x = BLI_rcti_size_x(&v2d->mask) / BLI_rctf_size_x(&v2d->cur); if (y) *y = BLI_rcti_size_y(&v2d->mask) / BLI_rctf_size_y(&v2d->cur); @@ -2423,11 +2423,11 @@ short UI_view2d_mouse_in_scrollers(const ARegion *ar, View2D *v2d, int x, int y) { int co[2]; int scroll = view2d_scroll_mapped(v2d->scroll); - + /* clamp x,y to region-coordinates first */ co[0] = x - ar->winrct.xmin; co[1] = y - ar->winrct.ymin; - + /* check if within scrollbars */ if (scroll & V2D_SCROLL_HORIZONTAL) { if (IN_2D_HORIZ_SCROLL(v2d, co)) return 'h'; @@ -2435,7 +2435,7 @@ short UI_view2d_mouse_in_scrollers(const ARegion *ar, View2D *v2d, int x, int y) if (scroll & V2D_SCROLL_VERTICAL) { if (IN_2D_VERT_SCROLL(v2d, co)) return 'v'; } - + /* not found */ return 0; } @@ -2464,7 +2464,7 @@ void UI_view2d_text_cache_add( const char *str, size_t str_len, const char col[4]) { int mval[2]; - + BLI_assert(str_len == strlen(str)); if (UI_view2d_view_to_region_clip(v2d, x, y, &mval[0], &mval[1])) { diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 4cd3aad8103..fbc8fe790c9 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,7 +17,7 @@ * * The Original Code is Copyright (C) 2008 Blender Foundation. * All rights reserved. - * + * * Contributor(s): Blender Foundation, Joshua Leung * * ***** END GPL LICENSE BLOCK ***** @@ -73,7 +73,7 @@ static int view2d_poll(bContext *C) */ /* ------------------ Shared 'core' stuff ---------------------- */ - + /* temp customdata for operator */ typedef struct v2dViewPanData { bScreen *sc; /* screen where view pan was initiated */ @@ -87,10 +87,10 @@ typedef struct v2dViewPanData { int startx, starty; /* mouse x/y values in window when operator was initiated */ int lastx, lasty; /* previous x/y values of mouse in window */ int invoke_event; /* event starting pan, for modal exit */ - + short in_scroller; /* for MMB in scrollers (old feature in past, but now not that useful) */ } v2dViewPanData; - + /* initialize panning customdata */ static int view_pan_init(bContext *C, wmOperator *op) { @@ -98,32 +98,32 @@ static int view_pan_init(bContext *C, wmOperator *op) v2dViewPanData *vpd; View2D *v2d; float winx, winy; - + /* regions now have v2d-data by default, so check for region */ if (ar == NULL) return 0; - + /* check if panning is allowed at all */ v2d = &ar->v2d; if ((v2d->keepofs & V2D_LOCKOFS_X) && (v2d->keepofs & V2D_LOCKOFS_Y)) return 0; - + /* set custom-data for operator */ vpd = MEM_callocN(sizeof(v2dViewPanData), "v2dViewPanData"); op->customdata = vpd; - + /* set pointers to owners */ vpd->sc = CTX_wm_screen(C); vpd->sa = CTX_wm_area(C); vpd->v2d = v2d; vpd->ar = ar; - + /* calculate translation factor - based on size of view */ winx = (float)(BLI_rcti_size_x(&ar->winrct) + 1); winy = (float)(BLI_rcti_size_y(&ar->winrct) + 1); vpd->facx = (BLI_rctf_size_x(&v2d->cur)) / winx; vpd->facy = (BLI_rctf_size_y(&v2d->cur)) / winy; - + return 1; } @@ -151,11 +151,11 @@ static int view_pan_poll(bContext *C) static void view_pan_apply_ex(bContext *C, v2dViewPanData *vpd, float dx, float dy) { View2D *v2d = vpd->v2d; - + /* calculate amount to move view by */ dx *= vpd->facx; dy *= vpd->facy; - + /* only move view on an axis if change is allowed */ if ((v2d->keepofs & V2D_LOCKOFS_X) == 0) { v2d->cur.xmin += dx; @@ -165,10 +165,10 @@ static void view_pan_apply_ex(bContext *C, v2dViewPanData *vpd, float dx, float v2d->cur.ymin += dy; v2d->cur.ymax += dy; } - + /* validate that view is in valid configuration after this operation */ UI_view2d_curRect_validate(v2d); - + /* don't rebuild full tree in outliner, since we're just changing our view */ ED_region_tag_redraw_no_rebuild(vpd->ar); @@ -195,8 +195,8 @@ static void view_pan_exit(wmOperator *op) MEM_freeN(op->customdata); op->customdata = NULL; } -} - +} + /* ------------------ Modal Drag Version (1) ---------------------- */ /* for 'redo' only, with no user input */ @@ -204,7 +204,7 @@ static int view_pan_exec(bContext *C, wmOperator *op) { if (!view_pan_init(C, op)) return OPERATOR_CANCELLED; - + view_pan_apply(C, op); view_pan_exit(op); return OPERATOR_FINISHED; @@ -216,38 +216,38 @@ static int view_pan_invoke(bContext *C, wmOperator *op, const wmEvent *event) wmWindow *window = CTX_wm_window(C); v2dViewPanData *vpd; View2D *v2d; - + /* set up customdata */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + vpd = op->customdata; v2d = vpd->v2d; - + /* set initial settings */ vpd->startx = vpd->lastx = event->x; vpd->starty = vpd->lasty = event->y; vpd->invoke_event = event->type; - + if (event->type == MOUSEPAN) { RNA_int_set(op->ptr, "deltax", event->prevx - event->x); RNA_int_set(op->ptr, "deltay", event->prevy - event->y); - + view_pan_apply(C, op); view_pan_exit(op); return OPERATOR_FINISHED; } - + RNA_int_set(op->ptr, "deltax", 0); RNA_int_set(op->ptr, "deltay", 0); - + if (v2d->keepofs & V2D_LOCKOFS_X) WM_cursor_modal_set(window, BC_NS_SCROLLCURSOR); else if (v2d->keepofs & V2D_LOCKOFS_Y) WM_cursor_modal_set(window, BC_EW_SCROLLCURSOR); else WM_cursor_modal_set(window, BC_NSEW_SCROLLCURSOR); - + /* add temp handler */ WM_event_add_modal_handler(C, op); @@ -258,7 +258,7 @@ static int view_pan_invoke(bContext *C, wmOperator *op, const wmEvent *event) static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event) { v2dViewPanData *vpd = op->customdata; - + /* execute the events */ switch (event->type) { case MOUSEMOVE: @@ -266,10 +266,10 @@ static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event) /* calculate new delta transform, then store mouse-coordinates for next-time */ RNA_int_set(op->ptr, "deltax", (vpd->lastx - event->x)); RNA_int_set(op->ptr, "deltay", (vpd->lasty - event->y)); - + vpd->lastx = event->x; vpd->lasty = event->y; - + view_pan_apply(C, op); break; } @@ -281,7 +281,7 @@ static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event) /* calculate overall delta mouse-movement for redo */ RNA_int_set(op->ptr, "deltax", (vpd->startx - vpd->lastx)); RNA_int_set(op->ptr, "deltay", (vpd->starty - vpd->lasty)); - + view_pan_exit(op); WM_cursor_modal_restore(CTX_wm_window(C)); WM_operator_name_call(C, "VIEW2D_OT_zoom", WM_OP_INVOKE_DEFAULT, NULL); @@ -294,10 +294,10 @@ static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event) /* calculate overall delta mouse-movement for redo */ RNA_int_set(op->ptr, "deltax", (vpd->startx - vpd->lastx)); RNA_int_set(op->ptr, "deltay", (vpd->starty - vpd->lasty)); - + view_pan_exit(op); WM_cursor_modal_restore(CTX_wm_window(C)); - + return OPERATOR_FINISHED; } } @@ -318,16 +318,16 @@ static void VIEW2D_OT_pan(wmOperatorType *ot) ot->name = "Pan View"; ot->description = "Pan the view"; ot->idname = "VIEW2D_OT_pan"; - + /* api callbacks */ ot->exec = view_pan_exec; ot->invoke = view_pan_invoke; ot->modal = view_pan_modal; ot->cancel = view_pan_cancel; - + /* operator is modal */ ot->flag = OPTYPE_BLOCKING | OPTYPE_GRAB_CURSOR; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -339,26 +339,26 @@ static void VIEW2D_OT_pan(wmOperatorType *ot) static int view_scrollright_exec(bContext *C, wmOperator *op) { v2dViewPanData *vpd; - + /* initialize default settings (and validate if ok to run) */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + /* also, check if can pan in horizontal axis */ vpd = op->customdata; if (vpd->v2d->keepofs & V2D_LOCKOFS_X) { view_pan_exit(op); return OPERATOR_PASS_THROUGH; } - + /* set RNA-Props - only movement in positive x-direction */ RNA_int_set(op->ptr, "deltax", 20); RNA_int_set(op->ptr, "deltay", 0); - + /* apply movement, then we're done */ view_pan_apply(C, op); view_pan_exit(op); - + return OPERATOR_FINISHED; } @@ -368,10 +368,10 @@ static void VIEW2D_OT_scroll_right(wmOperatorType *ot) ot->name = "Scroll Right"; ot->description = "Scroll the view right"; ot->idname = "VIEW2D_OT_scroll_right"; - + /* api callbacks */ ot->exec = view_scrollright_exec; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -383,26 +383,26 @@ static void VIEW2D_OT_scroll_right(wmOperatorType *ot) static int view_scrollleft_exec(bContext *C, wmOperator *op) { v2dViewPanData *vpd; - + /* initialize default settings (and validate if ok to run) */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + /* also, check if can pan in horizontal axis */ vpd = op->customdata; if (vpd->v2d->keepofs & V2D_LOCKOFS_X) { view_pan_exit(op); return OPERATOR_PASS_THROUGH; } - + /* set RNA-Props - only movement in negative x-direction */ RNA_int_set(op->ptr, "deltax", -20); RNA_int_set(op->ptr, "deltay", 0); - + /* apply movement, then we're done */ view_pan_apply(C, op); view_pan_exit(op); - + return OPERATOR_FINISHED; } @@ -412,10 +412,10 @@ static void VIEW2D_OT_scroll_left(wmOperatorType *ot) ot->name = "Scroll Left"; ot->description = "Scroll the view left"; ot->idname = "VIEW2D_OT_scroll_left"; - + /* api callbacks */ ot->exec = view_scrollleft_exec; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -426,32 +426,32 @@ static void VIEW2D_OT_scroll_left(wmOperatorType *ot) static int view_scrolldown_exec(bContext *C, wmOperator *op) { v2dViewPanData *vpd; - + /* initialize default settings (and validate if ok to run) */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + /* also, check if can pan in vertical axis */ vpd = op->customdata; if (vpd->v2d->keepofs & V2D_LOCKOFS_Y) { view_pan_exit(op); return OPERATOR_PASS_THROUGH; } - + /* set RNA-Props */ RNA_int_set(op->ptr, "deltax", 0); RNA_int_set(op->ptr, "deltay", -40); - + PropertyRNA *prop = RNA_struct_find_property(op->ptr, "page"); if (RNA_property_is_set(op->ptr, prop) && RNA_property_boolean_get(op->ptr, prop)) { ARegion *ar = CTX_wm_region(C); RNA_int_set(op->ptr, "deltay", ar->v2d.mask.ymin - ar->v2d.mask.ymax); } - + /* apply movement, then we're done */ view_pan_apply(C, op); view_pan_exit(op); - + return OPERATOR_FINISHED; } @@ -461,10 +461,10 @@ static void VIEW2D_OT_scroll_down(wmOperatorType *ot) ot->name = "Scroll Down"; ot->description = "Scroll the view down"; ot->idname = "VIEW2D_OT_scroll_down"; - + /* api callbacks */ ot->exec = view_scrolldown_exec; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -477,32 +477,32 @@ static void VIEW2D_OT_scroll_down(wmOperatorType *ot) static int view_scrollup_exec(bContext *C, wmOperator *op) { v2dViewPanData *vpd; - + /* initialize default settings (and validate if ok to run) */ if (!view_pan_init(C, op)) return OPERATOR_PASS_THROUGH; - + /* also, check if can pan in vertical axis */ vpd = op->customdata; if (vpd->v2d->keepofs & V2D_LOCKOFS_Y) { view_pan_exit(op); return OPERATOR_PASS_THROUGH; } - + /* set RNA-Props */ RNA_int_set(op->ptr, "deltax", 0); RNA_int_set(op->ptr, "deltay", 40); - + PropertyRNA *prop = RNA_struct_find_property(op->ptr, "page"); if (RNA_property_is_set(op->ptr, prop) && RNA_property_boolean_get(op->ptr, prop)) { ARegion *ar = CTX_wm_region(C); RNA_int_set(op->ptr, "deltay", BLI_rcti_size_y(&ar->v2d.mask)); } - + /* apply movement, then we're done */ view_pan_apply(C, op); view_pan_exit(op); - + return OPERATOR_FINISHED; } @@ -512,10 +512,10 @@ static void VIEW2D_OT_scroll_up(wmOperatorType *ot) ot->name = "Scroll Up"; ot->description = "Scroll the view up"; ot->idname = "VIEW2D_OT_scroll_up"; - + /* api callbacks */ ot->exec = view_scrollup_exec; - + /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "deltay", 0, INT_MIN, INT_MAX, "Delta Y", "", INT_MIN, INT_MAX); @@ -582,24 +582,24 @@ static int view_zoomdrag_init(bContext *C, wmOperator *op) ARegion *ar = CTX_wm_region(C); v2dViewZoomData *vzd; View2D *v2d; - + /* regions now have v2d-data by default, so check for region */ if (ar == NULL) return 0; v2d = &ar->v2d; - + /* check that 2d-view is zoomable */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y)) return 0; - + /* set custom-data for operator */ vzd = MEM_callocN(sizeof(v2dViewZoomData), "v2dViewZoomData"); op->customdata = vzd; - + /* set pointers to owners */ vzd->v2d = v2d; vzd->ar = ar; - + return 1; } @@ -608,7 +608,7 @@ static int view_zoom_poll(bContext *C) { ARegion *ar = CTX_wm_region(C); View2D *v2d; - + /* check if there's a region in context to work with */ if (ar == NULL) return false; @@ -618,15 +618,15 @@ static int view_zoom_poll(bContext *C) return false; v2d = &ar->v2d; - + /* check that 2d-view is zoomable */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y)) return false; - + /* view is zoomable */ return true; } - + /* apply transform to view (i.e. adjust 'cur' rect) */ static void view_zoomstep_apply_ex( bContext *C, v2dViewZoomData *vzd, const bool use_mousepos, @@ -639,7 +639,7 @@ static void view_zoomstep_apply_ex( const int snap_test = ED_region_snap_size_test(ar); /* calculate amount to move view by, ensuring symmetry so the - * old zoom level is restored after zooming back the same amount + * old zoom level is restored after zooming back the same amount */ if (facx >= 0.0f) { dx = BLI_rctf_size_x(&v2d->cur) * facx; @@ -761,40 +761,40 @@ static int view_zoomin_exec(bContext *C, wmOperator *op) /* check that there's an active region, as View2D data resides there */ if (!view_zoom_poll(C)) return OPERATOR_PASS_THROUGH; - + view_zoom_axis_lock_defaults(C, do_zoom_xy); /* set RNA-Props - zooming in by uniform factor */ RNA_float_set(op->ptr, "zoomfacx", do_zoom_xy[0] ? 0.0375f : 0.0f); RNA_float_set(op->ptr, "zoomfacy", do_zoom_xy[1] ? 0.0375f : 0.0f); - + /* apply movement, then we're done */ view_zoomstep_apply(C, op); - + view_zoomstep_exit(op); - + return OPERATOR_FINISHED; } static int view_zoomin_invoke(bContext *C, wmOperator *op, const wmEvent *event) { v2dViewZoomData *vzd; - + if (!view_zoomdrag_init(C, op)) return OPERATOR_PASS_THROUGH; - + vzd = op->customdata; - + if (U.uiflag & USER_ZOOM_TO_MOUSEPOS) { ARegion *ar = CTX_wm_region(C); - + /* store initial mouse position (in view space) */ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &vzd->mx_2d, &vzd->my_2d); } - + return view_zoomin_exec(C, op); } @@ -806,12 +806,12 @@ static void VIEW2D_OT_zoom_in(wmOperatorType *ot) ot->name = "Zoom In"; ot->description = "Zoom in the view"; ot->idname = "VIEW2D_OT_zoom_in"; - + /* api callbacks */ ot->invoke = view_zoomin_invoke; ot->exec = view_zoomin_exec; // XXX, needs view_zoomdrag_init called first. ot->poll = view_zoom_poll; - + /* rna - must keep these in sync with the other operators */ prop = RNA_def_float(ot->srna, "zoomfacx", 0, -FLT_MAX, FLT_MAX, "Zoom Factor X", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); @@ -827,39 +827,39 @@ static int view_zoomout_exec(bContext *C, wmOperator *op) /* check that there's an active region, as View2D data resides there */ if (!view_zoom_poll(C)) return OPERATOR_PASS_THROUGH; - + view_zoom_axis_lock_defaults(C, do_zoom_xy); /* set RNA-Props - zooming in by uniform factor */ RNA_float_set(op->ptr, "zoomfacx", do_zoom_xy[0] ? -0.0375f : 0.0f); RNA_float_set(op->ptr, "zoomfacy", do_zoom_xy[1] ? -0.0375f : 0.0f); - + /* apply movement, then we're done */ view_zoomstep_apply(C, op); view_zoomstep_exit(op); - + return OPERATOR_FINISHED; } static int view_zoomout_invoke(bContext *C, wmOperator *op, const wmEvent *event) { v2dViewZoomData *vzd; - + if (!view_zoomdrag_init(C, op)) return OPERATOR_PASS_THROUGH; vzd = op->customdata; - + if (U.uiflag & USER_ZOOM_TO_MOUSEPOS) { ARegion *ar = CTX_wm_region(C); - + /* store initial mouse position (in view space) */ - UI_view2d_region_to_view(&ar->v2d, + UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &vzd->mx_2d, &vzd->my_2d); } - + return view_zoomout_exec(C, op); } @@ -871,12 +871,12 @@ static void VIEW2D_OT_zoom_out(wmOperatorType *ot) ot->name = "Zoom Out"; ot->description = "Zoom out the view"; ot->idname = "VIEW2D_OT_zoom_out"; - + /* api callbacks */ ot->invoke = view_zoomout_invoke; // ot->exec = view_zoomout_exec; // XXX, needs view_zoomdrag_init called first. ot->poll = view_zoom_poll; - + /* rna - must keep these in sync with the other operators */ prop = RNA_def_float(ot->srna, "zoomfacx", 0, -FLT_MAX, FLT_MAX, "Zoom Factor X", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); @@ -910,7 +910,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) dx *= -1; dy *= -1; } - + /* continuous zoom shouldn't move that fast... */ if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop? double time = PIL_check_seconds_timer(); @@ -918,7 +918,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) dx *= time_step * 0.5f; dy *= time_step * 0.5f; - + vzd->timer_lastdraw = time; } @@ -932,7 +932,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) float mval_fac = (vzd->mx_2d - v2d->cur.xmin) / BLI_rctf_size_x(&v2d->cur); float mval_faci = 1.0f - mval_fac; float ofs = (mval_fac * dx) - (mval_faci * dx); - + v2d->cur.xmin += ofs + dx; v2d->cur.xmax += ofs - dx; } @@ -951,7 +951,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) float mval_fac = (vzd->my_2d - v2d->cur.ymin) / BLI_rctf_size_y(&v2d->cur); float mval_faci = 1.0f - mval_fac; float ofs = (mval_fac * dy) - (mval_faci * dy); - + v2d->cur.ymin += ofs + dy; v2d->cur.ymax += ofs - dy; } @@ -961,7 +961,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) } } } - + /* validate that view is in valid configuration after this operation */ UI_view2d_curRect_validate(v2d); @@ -983,14 +983,14 @@ static void view_zoomdrag_exit(bContext *C, wmOperator *op) if (op->customdata) { v2dViewZoomData *vzd = op->customdata; - + if (vzd->timer) WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), vzd->timer); - + MEM_freeN(op->customdata); op->customdata = NULL; } -} +} static void view_zoomdrag_cancel(bContext *C, wmOperator *op) { @@ -1002,7 +1002,7 @@ static int view_zoomdrag_exec(bContext *C, wmOperator *op) { if (!view_zoomdrag_init(C, op)) return OPERATOR_PASS_THROUGH; - + view_zoomdrag_apply(C, op); view_zoomdrag_exit(C, op); return OPERATOR_FINISHED; @@ -1014,22 +1014,22 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *even wmWindow *window = CTX_wm_window(C); v2dViewZoomData *vzd; View2D *v2d; - + /* set up customdata */ if (!view_zoomdrag_init(C, op)) return OPERATOR_PASS_THROUGH; - + vzd = op->customdata; v2d = vzd->v2d; - + if (event->type == MOUSEZOOM || event->type == MOUSEPAN) { float dx, dy, fac; - + vzd->lastx = event->prevx; vzd->lasty = event->prevy; - + /* As we have only 1D information (magnify value), feed both axes - * with magnify information that is stored in x axis + * with magnify information that is stored in x axis */ fac = 0.01f * (event->prevx - event->x); dx = fac * BLI_rctf_size_x(&v2d->cur) / 10.0f; @@ -1046,26 +1046,26 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *even } RNA_float_set(op->ptr, "deltax", dx); RNA_float_set(op->ptr, "deltay", dy); - + view_zoomdrag_apply(C, op); view_zoomdrag_exit(C, op); return OPERATOR_FINISHED; } - + /* set initial settings */ vzd->lastx = event->x; vzd->lasty = event->y; RNA_float_set(op->ptr, "deltax", 0); RNA_float_set(op->ptr, "deltay", 0); - + /* for modal exit test */ vzd->invoke_event = event->type; - + if (U.uiflag & USER_ZOOM_TO_MOUSEPOS) { ARegion *ar = CTX_wm_region(C); - + /* store initial mouse position (in view space) */ - UI_view2d_region_to_view(&ar->v2d, + UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &vzd->mx_2d, &vzd->my_2d); } @@ -1076,7 +1076,7 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *even WM_cursor_modal_set(window, BC_EW_SCROLLCURSOR); else WM_cursor_modal_set(window, BC_NSEW_SCROLLCURSOR); - + /* add temp handler */ WM_event_add_modal_handler(C, op); @@ -1094,24 +1094,24 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event { v2dViewZoomData *vzd = op->customdata; View2D *v2d = vzd->v2d; - + /* execute the events */ if (event->type == TIMER && event->customdata == vzd->timer) { view_zoomdrag_apply(C, op); } else if (event->type == MOUSEMOVE) { float dx, dy; - + /* calculate new delta transform, based on zooming mode */ if (U.viewzoom == USER_ZOOM_SCALE) { /* 'scale' zooming */ float dist; - + /* x-axis transform */ dist = BLI_rcti_size_x(&v2d->mask) / 2.0f; dx = 1.0f - (fabsf(vzd->lastx - vzd->ar->winrct.xmin - dist) + 2.0f) / (fabsf(event->mval[0] - dist) + 2.0f); dx *= 0.5f * BLI_rctf_size_x(&v2d->cur); - + /* y-axis transform */ dist = BLI_rcti_size_y(&v2d->mask) / 2.0f; dy = 1.0f - (fabsf(vzd->lasty - vzd->ar->winrct.ymin - dist) + 2.0f) / (fabsf(event->mval[1] - dist) + 2.0f); @@ -1120,21 +1120,21 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event else { /* 'continuous' or 'dolly' */ float fac, zoomfac = 0.01f; - + /* some view2d's (graph) don't have min/max zoom, or extreme ones */ if (v2d->maxzoom > 0.0f) zoomfac = CLAMPIS(0.001f * v2d->maxzoom, 0.001f, 0.01f); - + /* x-axis transform */ fac = zoomfac * (event->x - vzd->lastx); dx = fac * BLI_rctf_size_x(&v2d->cur); - + /* y-axis transform */ fac = zoomfac * (event->y - vzd->lasty); dy = fac * BLI_rctf_size_y(&v2d->cur); - + } - + /* support zoom to always zoom entirely - the v2d code uses portrait or landscape exceptions */ if (v2d->keepzoom & V2D_KEEPASPECT) { if (fabsf(dx) > fabsf(dy)) @@ -1142,14 +1142,14 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event else dx = dy; } - + /* set transform amount, and add current deltas to stored total delta (for redo) */ RNA_float_set(op->ptr, "deltax", dx); RNA_float_set(op->ptr, "deltay", dy); vzd->dx += dx; vzd->dy += dy; - + /* store mouse coordinates for next time, if not doing continuous zoom * - continuous zoom only depends on distance of mouse to starting point to determine rate of change */ @@ -1157,28 +1157,28 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event vzd->lastx = event->x; vzd->lasty = event->y; } - + /* apply zooming */ view_zoomdrag_apply(C, op); } else if (event->type == vzd->invoke_event || event->type == ESCKEY) { if (event->val == KM_RELEASE) { - + /* for redo, store the overall deltas - need to respect zoom-locks here... */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) == 0) RNA_float_set(op->ptr, "deltax", vzd->dx); else RNA_float_set(op->ptr, "deltax", 0); - + if ((v2d->keepzoom & V2D_LOCKZOOM_Y) == 0) RNA_float_set(op->ptr, "deltay", vzd->dy); else RNA_float_set(op->ptr, "deltay", 0); - + /* free customdata */ view_zoomdrag_exit(C, op); WM_cursor_modal_restore(CTX_wm_window(C)); - + return OPERATOR_FINISHED; } } @@ -1193,18 +1193,18 @@ static void VIEW2D_OT_zoom(wmOperatorType *ot) ot->name = "Zoom 2D View"; ot->description = "Zoom in/out the view"; ot->idname = "VIEW2D_OT_zoom"; - + /* api callbacks */ ot->exec = view_zoomdrag_exec; ot->invoke = view_zoomdrag_invoke; ot->modal = view_zoomdrag_modal; ot->cancel = view_zoomdrag_cancel; - + ot->poll = view_zoom_poll; - + /* operator is repeatable */ ot->flag = OPTYPE_BLOCKING | OPTYPE_GRAB_CURSOR; - + /* rna - must keep these in sync with the other operators */ prop = RNA_def_float(ot->srna, "deltax", 0, -FLT_MAX, FLT_MAX, "Delta X", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); @@ -1225,7 +1225,7 @@ static void VIEW2D_OT_zoom(wmOperatorType *ot) * Currently, these key mappings are hardcoded, but it shouldn't be too important to * have custom keymappings for this... */ - + static int view_borderzoom_exec(bContext *C, wmOperator *op) { ARegion *ar = CTX_wm_region(C); @@ -1233,17 +1233,17 @@ static int view_borderzoom_exec(bContext *C, wmOperator *op) rctf rect; rctf cur_new = v2d->cur; const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); - + /* convert coordinates of rect to 'tot' rect coordinates */ WM_operator_properties_border_to_rctf(op, &rect); UI_view2d_region_to_view_rctf(v2d, &rect, &rect); - + /* check if zooming in/out view */ const bool zoom_in = !RNA_boolean_get(op->ptr, "zoom_out"); - + if (zoom_in) { - /* zoom in: - * - 'cur' rect will be defined by the coordinates of the border region + /* zoom in: + * - 'cur' rect will be defined by the coordinates of the border region * - just set the 'cur' rect to have the same coordinates as the border region * if zoom is allowed to be changed */ @@ -1263,13 +1263,13 @@ static int view_borderzoom_exec(bContext *C, wmOperator *op) * - calculate zoom factor, and adjust using center-point */ float zoom, center, size; - + /* TODO: is this zoom factor calculation valid? It seems to produce same results every time... */ if ((v2d->keepzoom & V2D_LOCKZOOM_X) == 0) { size = BLI_rctf_size_x(&cur_new); zoom = size / BLI_rctf_size_x(&rect); center = BLI_rctf_cent_x(&cur_new); - + cur_new.xmin = center - (size * zoom); cur_new.xmax = center + (size * zoom); } @@ -1277,16 +1277,16 @@ static int view_borderzoom_exec(bContext *C, wmOperator *op) size = BLI_rctf_size_y(&cur_new); zoom = size / BLI_rctf_size_y(&rect); center = BLI_rctf_cent_y(&cur_new); - + cur_new.ymin = center - (size * zoom); cur_new.ymax = center + (size * zoom); } } - + UI_view2d_smooth_view(C, ar, &cur_new, smooth_viewtx); - + return OPERATOR_FINISHED; -} +} static void VIEW2D_OT_zoom_border(wmOperatorType *ot) { @@ -1294,15 +1294,15 @@ static void VIEW2D_OT_zoom_border(wmOperatorType *ot) ot->name = "Zoom to Border"; ot->description = "Zoom in the view to the nearest item contained in the border"; ot->idname = "VIEW2D_OT_zoom_border"; - + /* api callbacks */ ot->invoke = WM_gesture_border_invoke; ot->exec = view_borderzoom_exec; ot->modal = WM_gesture_border_modal; ot->cancel = WM_gesture_border_cancel; - + ot->poll = view_zoom_poll; - + /* rna */ WM_operator_properties_gesture_border_zoom(ot); } @@ -1575,17 +1575,17 @@ static void VIEW2D_OT_smoothview(wmOperatorType *ot) typedef struct v2dScrollerMove { View2D *v2d; /* View2D data that this operation affects */ ARegion *ar; /* region that the scroller is in */ - + short scroller; /* scroller that mouse is in ('h' or 'v') */ short zone; /* -1 is min zoomer, 0 is bar, 1 is max zoomer */ // XXX find some way to provide visual feedback of this (active color?) - + float fac; /* view adjustment factor, based on size of region */ float fac_round; /* for pixel rounding (avoid visible UI jitter) */ float delta; /* amount moved by mouse on axis of interest */ - + float scrollbarwidth; /* width of the scrollbar itself, used for page up/down clicks */ int scrollbar_orig; /* initial location of scrollbar x/y, mouse relative */ - + int lastx, lasty; /* previous mouse coordinates (in screen coordinates) for determining movement */ } v2dScrollerMove; @@ -1597,7 +1597,7 @@ typedef struct v2dScrollerMove { * \warning: The start of this struct must not change, so that it stays in sync with the 'real' version * For now, we don't need to have a separate (internal) header for structs like this... */ -struct View2DScrollers { +struct View2DScrollers { /* focus bubbles */ int vert_min, vert_max; /* vertical scrollbar */ int hor_min, hor_max; /* horizontal scrollbar */ @@ -1624,10 +1624,10 @@ enum { static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_min, int sh_max) { bool in_min, in_max, in_bar, out_min, out_max, in_view = 1; - - /* firstly, check if - * - 'bubble' fills entire scroller - * - 'bubble' completely out of view on either side + + /* firstly, check if + * - 'bubble' fills entire scroller + * - 'bubble' completely out of view on either side */ if ((sh_min <= sc_min) && (sh_max >= sc_max)) in_view = 0; if (sh_min == sh_max) { @@ -1638,12 +1638,12 @@ static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_ if (sh_max <= sc_min) in_view = 0; if (sh_min >= sc_max) in_view = 0; } - - + + if (in_view == 0) { return SCROLLHANDLE_BAR; } - + /* check if mouse is in or past either handle */ /* TODO: check if these extents are still valid or not */ in_max = ((mouse >= (sh_max - V2D_SCROLLER_HANDLE_SIZE)) && (mouse <= (sh_max + V2D_SCROLLER_HANDLE_SIZE))); @@ -1651,7 +1651,7 @@ static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_ in_bar = ((mouse < (sh_max - V2D_SCROLLER_HANDLE_SIZE)) && (mouse > (sh_min + V2D_SCROLLER_HANDLE_SIZE))); out_min = mouse < (sh_min - V2D_SCROLLER_HANDLE_SIZE); out_max = mouse > (sh_max + V2D_SCROLLER_HANDLE_SIZE); - + if (in_bar) return SCROLLHANDLE_BAR; else if (in_max) @@ -1662,10 +1662,10 @@ static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_ return SCROLLHANDLE_MIN_OUTSIDE; else if (out_max) return SCROLLHANDLE_MAX_OUTSIDE; - + /* unlikely to happen, though we just cover it in case */ return SCROLLHANDLE_BAR; -} +} /* initialize customdata for scroller manipulation operator */ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *event, short in_scroller) @@ -1676,11 +1676,11 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e View2D *v2d = &ar->v2d; rctf tot_cur_union; float mask_size; - + /* set custom-data for operator */ vsm = MEM_callocN(sizeof(v2dScrollerMove), "v2dScrollerMove"); op->customdata = vsm; - + /* set general data */ vsm->v2d = v2d; vsm->ar = ar; @@ -1689,7 +1689,7 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e /* store mouse-coordinates, and convert mouse/screen coordinates to region coordinates */ vsm->lastx = event->x; vsm->lasty = event->y; - /* 'zone' depends on where mouse is relative to bubble + /* 'zone' depends on where mouse is relative to bubble * - zooming must be allowed on this axis, otherwise, default to pan */ scrollers = UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); @@ -1711,7 +1711,7 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e vsm->zone = mouse_in_scroller_handle(event->mval[0], v2d->hor.xmin, v2d->hor.xmax, scrollers->hor_min, scrollers->hor_max); - + if ((v2d->keepzoom & V2D_LOCKZOOM_X) && ELEM(vsm->zone, SCROLLHANDLE_MIN, SCROLLHANDLE_MAX)) { /* default to scroll, as handles not usable */ vsm->zone = SCROLLHANDLE_BAR; @@ -1724,7 +1724,7 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e /* vertical scroller - calculate adjustment factor first */ mask_size = (float)BLI_rcti_size_y(&v2d->vert); vsm->fac = BLI_rctf_size_y(&tot_cur_union) / mask_size; - + /* pixel rounding */ vsm->fac_round = (BLI_rctf_size_y(&v2d->cur)) / (float)(BLI_rcti_size_y(&ar->winrct) + 1); @@ -1732,16 +1732,16 @@ static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *e vsm->zone = mouse_in_scroller_handle(event->mval[1], v2d->vert.ymin, v2d->vert.ymax, scrollers->vert_min, scrollers->vert_max); - + if ((v2d->keepzoom & V2D_LOCKZOOM_Y) && ELEM(vsm->zone, SCROLLHANDLE_MIN, SCROLLHANDLE_MAX)) { /* default to scroll, as handles not usable */ vsm->zone = SCROLLHANDLE_BAR; } - + vsm->scrollbarwidth = scrollers->vert_max - scrollers->vert_min; vsm->scrollbar_orig = ((scrollers->vert_max + scrollers->vert_min) / 2) + ar->winrct.ymin; } - + UI_view2d_scrollers_free(scrollers); ED_region_tag_redraw_no_rebuild(ar); } @@ -1753,10 +1753,10 @@ static void scroller_activate_exit(bContext *C, wmOperator *op) v2dScrollerMove *vsm = op->customdata; vsm->v2d->scroll_ui &= ~(V2D_SCROLL_H_ACTIVE | V2D_SCROLL_V_ACTIVE); - + MEM_freeN(op->customdata); op->customdata = NULL; - + ED_region_tag_redraw_no_rebuild(CTX_wm_region(C)); } } @@ -1772,13 +1772,13 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) v2dScrollerMove *vsm = op->customdata; View2D *v2d = vsm->v2d; float temp; - + /* calculate amount to move view by */ temp = vsm->fac * vsm->delta; /* round to pixel */ temp = roundf(temp / vsm->fac_round) * vsm->fac_round; - + /* type of movement */ switch (vsm->zone) { case SCROLLHANDLE_MIN: @@ -1788,16 +1788,16 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) if ((vsm->scroller == 'v') && !(v2d->keepzoom & V2D_LOCKZOOM_Y)) v2d->cur.ymin -= temp; break; - + case SCROLLHANDLE_MAX: - + /* only expand view on axis if zoom is allowed */ if ((vsm->scroller == 'h') && !(v2d->keepzoom & V2D_LOCKZOOM_X)) v2d->cur.xmax += temp; if ((vsm->scroller == 'v') && !(v2d->keepzoom & V2D_LOCKZOOM_Y)) v2d->cur.ymax += temp; break; - + case SCROLLHANDLE_MIN_OUTSIDE: case SCROLLHANDLE_MAX_OUTSIDE: case SCROLLHANDLE_BAR: @@ -1812,12 +1812,12 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) v2d->cur.ymax += temp; } break; - + } - + /* validate that view is in valid configuration after this operation */ UI_view2d_curRect_validate(v2d); - + /* request updates to be done... */ ED_region_tag_redraw_no_rebuild(vsm->ar); UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); @@ -1830,7 +1830,7 @@ static void scroller_activate_apply(bContext *C, wmOperator *op) static int scroller_activate_modal(bContext *C, wmOperator *op, const wmEvent *event) { v2dScrollerMove *vsm = op->customdata; - + /* execute the events */ switch (event->type) { case MOUSEMOVE: @@ -1858,11 +1858,11 @@ static int scroller_activate_modal(bContext *C, wmOperator *op, const wmEvent *e break; } } - + /* store previous coordinates */ vsm->lastx = event->x; vsm->lasty = event->y; - + scroller_activate_apply(C, op); break; } @@ -1875,12 +1875,12 @@ static int scroller_activate_modal(bContext *C, wmOperator *op, const wmEvent *e vsm->delta = -vsm->scrollbarwidth * 0.8f; else if (vsm->zone == SCROLLHANDLE_MAX_OUTSIDE) vsm->delta = vsm->scrollbarwidth * 0.8f; - + scroller_activate_apply(C, op); scroller_activate_exit(C, op); return OPERATOR_FINISHED; } - + /* otherwise, end the drag action */ if (vsm->lastx || vsm->lasty) { scroller_activate_exit(C, op); @@ -1901,18 +1901,18 @@ static int scroller_activate_invoke(bContext *C, wmOperator *op, const wmEvent * ARegion *ar = CTX_wm_region(C); View2D *v2d = &ar->v2d; short in_scroller = 0; - + /* check if mouse in scrollbars, if they're enabled */ in_scroller = UI_view2d_mouse_in_scrollers(ar, v2d, event->x, event->y); - + /* if in a scroller, init customdata then set modal handler which will catch mousedown to start doing useful stuff */ if (in_scroller) { v2dScrollerMove *vsm; - + /* initialize customdata */ scroller_activate_init(C, op, event, in_scroller); vsm = (v2dScrollerMove *)op->customdata; - + /* support for quick jump to location - gtk and qt do this on linux */ if (event->type == MIDDLEMOUSE) { switch (vsm->scroller) { @@ -1939,7 +1939,7 @@ static int scroller_activate_invoke(bContext *C, wmOperator *op, const wmEvent * vsm->zone = SCROLLHANDLE_BAR; } } - + /* check if zone is inappropriate (i.e. 'bar' but panning is banned), so cannot continue */ if (vsm->zone == SCROLLHANDLE_BAR) { if (((vsm->scroller == 'h') && (v2d->keepofs & V2D_LOCKOFS_X)) || @@ -1947,30 +1947,30 @@ static int scroller_activate_invoke(bContext *C, wmOperator *op, const wmEvent * { /* free customdata initialized */ scroller_activate_exit(C, op); - + /* can't catch this event for ourselves, so let it go to someone else? */ return OPERATOR_PASS_THROUGH; } } - + /* zone is also inappropriate if scroller is not visible... */ if (((vsm->scroller == 'h') && (v2d->scroll & (V2D_SCROLL_HORIZONTAL_FULLR))) || ((vsm->scroller == 'v') && (v2d->scroll & (V2D_SCROLL_VERTICAL_FULLR))) ) { /* free customdata initialized */ scroller_activate_exit(C, op); - + /* can't catch this event for ourselves, so let it go to someone else? */ /* XXX note: if handlers use mask rect to clip input, input will fail for this case */ return OPERATOR_PASS_THROUGH; } - + /* activate the scroller */ if (vsm->scroller == 'h') v2d->scroll_ui |= V2D_SCROLL_H_ACTIVE; else v2d->scroll_ui |= V2D_SCROLL_V_ACTIVE; - + /* still ok, so can add */ WM_event_add_modal_handler(C, op); return OPERATOR_RUNNING_MODAL; @@ -1991,7 +1991,7 @@ static void VIEW2D_OT_scroller_activate(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_BLOCKING; - + /* api callbacks */ ot->invoke = scroller_activate_invoke; ot->modal = scroller_activate_modal; @@ -2017,7 +2017,7 @@ static int reset_exec(bContext *C, wmOperator *UNUSED(op)) v2d->cur.xmax = v2d->cur.xmin + winx; v2d->cur.ymax = v2d->cur.ymin + winy; - + /* align */ if (v2d->align) { /* posx and negx flags are mutually exclusive, so watch out */ @@ -2053,7 +2053,7 @@ static int reset_exec(bContext *C, wmOperator *UNUSED(op)) /* request updates to be done... */ ED_region_tag_redraw(ar); UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); - + UI_view2d_zoom_cache_reset(); return OPERATOR_FINISHED; @@ -2065,27 +2065,27 @@ static void VIEW2D_OT_reset(wmOperatorType *ot) ot->name = "Reset View"; ot->description = "Reset the view"; ot->idname = "VIEW2D_OT_reset"; - + /* api callbacks */ ot->exec = reset_exec; ot->poll = view2d_poll; } - + /* ********************************************************* */ /* Registration */ void ED_operatortypes_view2d(void) { WM_operatortype_append(VIEW2D_OT_pan); - + WM_operatortype_append(VIEW2D_OT_scroll_left); WM_operatortype_append(VIEW2D_OT_scroll_right); WM_operatortype_append(VIEW2D_OT_scroll_up); WM_operatortype_append(VIEW2D_OT_scroll_down); - + WM_operatortype_append(VIEW2D_OT_zoom_in); WM_operatortype_append(VIEW2D_OT_zoom_out); - + WM_operatortype_append(VIEW2D_OT_zoom); WM_operatortype_append(VIEW2D_OT_zoom_border); @@ -2094,7 +2094,7 @@ void ED_operatortypes_view2d(void) #endif WM_operatortype_append(VIEW2D_OT_smoothview); - + WM_operatortype_append(VIEW2D_OT_scroller_activate); WM_operatortype_append(VIEW2D_OT_reset); @@ -2112,15 +2112,15 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) /* pan/scroll */ WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MIDDLEMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0); - + WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MOUSEPAN, 0, 0, 0); - + WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_right", WHEELDOWNMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_left", WHEELUPMOUSE, KM_PRESS, KM_CTRL, 0); - + WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_down", WHEELDOWNMOUSE, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_up", WHEELUPMOUSE, KM_PRESS, KM_SHIFT, 0); - + #ifdef WITH_INPUT_NDOF WM_keymap_add_item(keymap, "VIEW2D_OT_ndof", NDOF_MOTION, 0, 0, 0); #endif @@ -2131,7 +2131,7 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_out", PADMINUS, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_in", PADPLUSKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MOUSEPAN, 0, KM_CTRL, 0); - + WM_keymap_verify_item(keymap, "VIEW2D_OT_smoothview", TIMER1, KM_ANY, KM_ANY, 0); /* scroll up/down - no modifiers, only when zoom fails */ @@ -2141,7 +2141,7 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) /* these may be necessary if vertical scroll is disallowed */ WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_right", WHEELDOWNMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_left", WHEELUPMOUSE, KM_PRESS, 0, 0); - + /* alternatives for page up/down to scroll */ #if 0 // XXX disabled, since this causes conflicts with hotkeys in animation editors /* scroll up/down may fall through to left/right */ @@ -2153,11 +2153,11 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_right", PAGEDOWNKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_left", PAGEUPKEY, KM_PRESS, KM_SHIFT, 0); #endif - + /* zoom - drag */ WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MOUSEZOOM, 0, 0, 0); - + /* borderzoom - drag */ WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_border", BKEY, KM_PRESS, KM_SHIFT, 0); @@ -2171,12 +2171,12 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MOUSEPAN, 0, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_down", WHEELDOWNMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_up", WHEELUPMOUSE, KM_PRESS, 0, 0); - + kmi = WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_down", PAGEDOWNKEY, KM_PRESS, 0, 0); RNA_boolean_set(kmi->ptr, "page", true); kmi = WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_up", PAGEUPKEY, KM_PRESS, 0, 0); RNA_boolean_set(kmi->ptr, "page", true); - + WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MOUSEZOOM, 0, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MOUSEPAN, 0, KM_CTRL, 0); |