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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Jolly <charlie>2021-12-12 10:16:10 +0300
committerCharlie Jolly <mistajolly@gmail.com>2021-12-12 10:17:35 +0300
commit8c55481e337c9c5232766d74045b43c1956b2bc1 (patch)
tree64501853d4e03e3b5a4e10fa62c200b4e4a14a2b /source/blender/editors/interface
parent9df13fba69c3b0e0e013db198515e6e1a7238f6a (diff)
UI: Add curve handle buttons to CurveMap interface
This patch exposes the vector handle options as buttons and aligns the UI between CurveMap and CurveProfile more closely. - CurveMap point editing is on a single row like CurveProfile - Tools menu is moved to the right hand side on both widgets - Emboss curve map buttons Reviewed By: HooglyBoogly Differential Revision: https://developer.blender.org/D10980
Diffstat (limited to 'source/blender/editors/interface')
-rw-r--r--source/blender/editors/interface/interface_templates.c259
1 files changed, 136 insertions, 123 deletions
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 7f00db26da9..e45884ea73b 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -4117,51 +4117,6 @@ static uiBlock *curvemap_tools_func(
0,
UICURVE_FUNC_RESET_VIEW,
"");
- uiDefIconTextBut(block,
- UI_BTYPE_BUT_MENU,
- 1,
- ICON_BLANK1,
- IFACE_("Vector Handle"),
- 0,
- yco -= UI_UNIT_Y,
- menuwidth,
- UI_UNIT_Y,
- NULL,
- 0.0,
- 0.0,
- 0,
- UICURVE_FUNC_HANDLE_VECTOR,
- "");
- uiDefIconTextBut(block,
- UI_BTYPE_BUT_MENU,
- 1,
- ICON_BLANK1,
- IFACE_("Auto Handle"),
- 0,
- yco -= UI_UNIT_Y,
- menuwidth,
- UI_UNIT_Y,
- NULL,
- 0.0,
- 0.0,
- 0,
- UICURVE_FUNC_HANDLE_AUTO,
- "");
- uiDefIconTextBut(block,
- UI_BTYPE_BUT_MENU,
- 1,
- ICON_BLANK1,
- IFACE_("Auto Clamped Handle"),
- 0,
- yco -= UI_UNIT_Y,
- menuwidth,
- UI_UNIT_Y,
- NULL,
- 0.0,
- 0.0,
- 0,
- UICURVE_FUNC_HANDLE_AUTO_ANIM,
- "");
}
if (show_extend) {
@@ -4241,6 +4196,21 @@ static uiBlock *curvemap_brush_tools_negslope_func(bContext *C, ARegion *region,
return curvemap_tools_func(C, region, cumap_v, false, UICURVE_FUNC_RESET_POS);
}
+static void curvemap_tools_handle_vector(bContext *C, void *cumap_v, void *UNUSED(arg))
+{
+ curvemap_tools_dofunc(C, cumap_v, UICURVE_FUNC_HANDLE_VECTOR);
+}
+
+static void curvemap_tools_handle_auto(bContext *C, void *cumap_v, void *UNUSED(arg))
+{
+ curvemap_tools_dofunc(C, cumap_v, UICURVE_FUNC_HANDLE_AUTO);
+}
+
+static void curvemap_tools_handle_auto_clamped(bContext *C, void *cumap_v, void *UNUSED(arg))
+{
+ curvemap_tools_dofunc(C, cumap_v, UICURVE_FUNC_HANDLE_AUTO_ANIM);
+}
+
static void curvemap_buttons_redraw(bContext *C, void *UNUSED(arg1), void *UNUSED(arg2))
{
ED_region_tag_redraw(CTX_wm_region(C));
@@ -4292,6 +4262,8 @@ static void curvemap_buttons_layout(uiLayout *layout,
uiBlock *block = uiLayoutGetBlock(layout);
+ UI_block_emboss_set(block, UI_EMBOSS);
+
if (tone) {
uiLayout *split = uiLayoutSplit(layout, 0.0f, false);
uiItemR(uiLayoutRow(split, false), ptr, "tone", UI_ITEM_R_EXPAND, NULL, ICON_NONE);
@@ -4377,10 +4349,11 @@ static void curvemap_buttons_layout(uiLayout *layout,
}
/* operation buttons */
- uiLayoutRow(row, true);
-
- UI_block_emboss_set(block, UI_EMBOSS_NONE);
+ /* (Right aligned) */
+ uiLayout *sub = uiLayoutRow(row, true);
+ uiLayoutSetAlignment(sub, UI_LAYOUT_ALIGN_RIGHT);
+ /* Zoom in */
bt = uiDefIconBut(block,
UI_BTYPE_BUT,
0,
@@ -4397,6 +4370,7 @@ static void curvemap_buttons_layout(uiLayout *layout,
TIP_("Zoom in"));
UI_but_func_set(bt, curvemap_buttons_zoom_in, cumap, NULL);
+ /* Zoom out */
bt = uiDefIconBut(block,
UI_BTYPE_BUT,
0,
@@ -4413,97 +4387,53 @@ static void curvemap_buttons_layout(uiLayout *layout,
TIP_("Zoom out"));
UI_but_func_set(bt, curvemap_buttons_zoom_out, cumap, NULL);
+ /* Clippoing button. */
+ const int icon = (cumap->flag & CUMA_DO_CLIP) ? ICON_CLIPUV_HLT : ICON_CLIPUV_DEHLT;
+ bt = uiDefIconBlockBut(
+ block, curvemap_clipping_func, cumap, 0, icon, 0, 0, dx, dx, TIP_("Clipping Options"));
+ bt->drawflag &= ~UI_BUT_ICON_LEFT;
+ UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
+
if (brush && neg_slope) {
- bt = uiDefIconBlockBut(block,
- curvemap_brush_tools_negslope_func,
- cumap,
- 0,
- ICON_DOWNARROW_HLT,
- 0,
- 0,
- dx,
- dx,
- TIP_("Tools"));
+ bt = uiDefIconBlockBut(
+ block, curvemap_brush_tools_negslope_func, cumap, 0, 0, 0, 0, dx, dx, TIP_("Tools"));
}
else if (brush) {
- bt = uiDefIconBlockBut(block,
- curvemap_brush_tools_func,
- cumap,
- 0,
- ICON_DOWNARROW_HLT,
- 0,
- 0,
- dx,
- dx,
- TIP_("Tools"));
+ bt = uiDefIconBlockBut(
+ block, curvemap_brush_tools_func, cumap, 0, 0, 0, 0, dx, dx, TIP_("Tools"));
}
else if (neg_slope) {
- bt = uiDefIconBlockBut(block,
- curvemap_tools_negslope_func,
- cumap,
- 0,
- ICON_DOWNARROW_HLT,
- 0,
- 0,
- dx,
- dx,
- TIP_("Tools"));
+ bt = uiDefIconBlockBut(
+ block, curvemap_tools_negslope_func, cumap, 0, 0, 0, 0, dx, dx, TIP_("Tools"));
}
else {
- bt = uiDefIconBlockBut(block,
- curvemap_tools_posslope_func,
- cumap,
- 0,
- ICON_DOWNARROW_HLT,
- 0,
- 0,
- dx,
- dx,
- TIP_("Tools"));
+ bt = uiDefIconBlockBut(
+ block, curvemap_tools_posslope_func, cumap, 0, 0, 0, 0, dx, dx, TIP_("Tools"));
}
-
UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
- const int icon = (cumap->flag & CUMA_DO_CLIP) ? ICON_CLIPUV_HLT : ICON_CLIPUV_DEHLT;
- bt = uiDefIconBlockBut(
- block, curvemap_clipping_func, cumap, 0, icon, 0, 0, dx, dx, TIP_("Clipping Options"));
- UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
-
- bt = uiDefIconBut(block,
- UI_BTYPE_BUT,
- 0,
- ICON_X,
- 0,
- 0,
- dx,
- dx,
- NULL,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- TIP_("Delete points"));
- UI_but_funcN_set(bt, curvemap_buttons_delete, MEM_dupallocN(cb), cumap);
-
- UI_block_emboss_set(block, UI_EMBOSS);
-
UI_block_funcN_set(block, rna_update_cb, MEM_dupallocN(cb), NULL);
- /* curve itself */
+ /* Curve itself. */
const int size = max_ii(uiLayoutGetWidth(layout), UI_UNIT_X);
row = uiLayoutRow(layout, false);
uiButCurveMapping *curve_but = (uiButCurveMapping *)uiDefBut(
- block, UI_BTYPE_CURVE, 0, "", 0, 0, size, 8.0f * UI_UNIT_X, cumap, 0.0f, 1.0f, 0, 0, "");
+ block, UI_BTYPE_CURVE, 0, "", 0, 0, size, 8.0f * UI_UNIT_X, cumap, 0.0f, 1.0f, -1, 0, "");
curve_but->gradient_type = bg;
- /* sliders for selected point */
+ /* Sliders for selected curve point. */
+ int i;
CurveMapPoint *cmp = NULL;
- for (int i = 0; i < cm->totpoint; i++) {
+ bool point_last_or_first = false;
+ for (i = 0; i < cm->totpoint; i++) {
if (cm->curve[i].flag & CUMA_SELECT) {
cmp = &cm->curve[i];
break;
}
}
+ if (ELEM(i, 0, cm->totpoint - 1)) {
+ point_last_or_first = true;
+ }
if (cmp) {
rctf bounds;
@@ -4515,12 +4445,75 @@ static void curvemap_buttons_layout(uiLayout *layout,
bounds.xmax = bounds.ymax = 1000.0;
}
+ UI_block_emboss_set(block, UI_EMBOSS);
+
uiLayoutRow(layout, true);
+
+ /* Curve handle buttons. */
+ bt = uiDefIconBut(block,
+ UI_BTYPE_BUT,
+ 1,
+ ICON_HANDLE_AUTO,
+ 0,
+ UI_UNIT_Y,
+ UI_UNIT_X,
+ UI_UNIT_Y,
+ NULL,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ TIP_("Auto Handle"));
+ UI_but_func_set(bt, curvemap_tools_handle_auto, cumap, NULL);
+ if (((cmp->flag & CUMA_HANDLE_AUTO_ANIM) == false) &&
+ ((cmp->flag & CUMA_HANDLE_VECTOR) == false)) {
+ bt->flag |= UI_SELECT_DRAW;
+ }
+
+ bt = uiDefIconBut(block,
+ UI_BTYPE_BUT,
+ 1,
+ ICON_HANDLE_VECTOR,
+ 0,
+ UI_UNIT_Y,
+ UI_UNIT_X,
+ UI_UNIT_Y,
+ NULL,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ TIP_("Vector Handle"));
+ UI_but_func_set(bt, curvemap_tools_handle_vector, cumap, NULL);
+ if (cmp->flag & CUMA_HANDLE_VECTOR) {
+ bt->flag |= UI_SELECT_DRAW;
+ }
+
+ bt = uiDefIconBut(block,
+ UI_BTYPE_BUT,
+ 1,
+ ICON_HANDLE_AUTOCLAMPED,
+ 0,
+ UI_UNIT_Y,
+ UI_UNIT_X,
+ UI_UNIT_Y,
+ NULL,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ TIP_("Auto Clamped"));
+ UI_but_func_set(bt, curvemap_tools_handle_auto_clamped, cumap, NULL);
+ if (cmp->flag & CUMA_HANDLE_AUTO_ANIM) {
+ bt->flag |= UI_SELECT_DRAW;
+ }
+
+ /* Curve handle position */
UI_block_funcN_set(block, curvemap_buttons_update, MEM_dupallocN(cb), cumap);
bt = uiDefButF(block,
UI_BTYPE_NUM,
0,
- "X",
+ "X:",
0,
2 * UI_UNIT_Y,
UI_UNIT_X * 10,
@@ -4536,7 +4529,7 @@ static void curvemap_buttons_layout(uiLayout *layout,
bt = uiDefButF(block,
UI_BTYPE_NUM,
0,
- "Y",
+ "Y:",
0,
1 * UI_UNIT_Y,
UI_UNIT_X * 10,
@@ -4549,6 +4542,26 @@ static void curvemap_buttons_layout(uiLayout *layout,
"");
UI_but_number_step_size_set(bt, 1);
UI_but_number_precision_set(bt, 5);
+
+ /* Curve handle delete point */
+ bt = uiDefIconBut(block,
+ UI_BTYPE_BUT,
+ 0,
+ ICON_X,
+ 0,
+ 0,
+ dx,
+ dx,
+ NULL,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ TIP_("Delete points"));
+ UI_but_funcN_set(bt, curvemap_buttons_delete, MEM_dupallocN(cb), cumap);
+ if (point_last_or_first) {
+ UI_but_flag_enable(bt, UI_BUT_DISABLED);
+ }
}
/* black/white levels */
@@ -4995,11 +5008,6 @@ static void CurveProfile_buttons_layout(uiLayout *layout, PointerRNA *ptr, RNAUp
sub = uiLayoutRow(row, true);
uiLayoutSetAlignment(sub, UI_LAYOUT_ALIGN_RIGHT);
- /* Reset view, reset curve */
- bt = uiDefIconBlockBut(
- block, CurveProfile_buttons_tools, profile, 0, 0, 0, 0, UI_UNIT_X, UI_UNIT_X, TIP_("Tools"));
- UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
-
/* Flip path */
bt = uiDefIconBut(block,
UI_BTYPE_BUT,
@@ -5035,6 +5043,11 @@ static void CurveProfile_buttons_layout(uiLayout *layout, PointerRNA *ptr, RNAUp
TIP_("Toggle Profile Clipping"));
UI_but_funcN_set(bt, CurveProfile_clipping_toggle, MEM_dupallocN(cb), profile);
+ /* Reset view, reset curve */
+ bt = uiDefIconBlockBut(
+ block, CurveProfile_buttons_tools, profile, 0, 0, 0, 0, UI_UNIT_X, UI_UNIT_X, TIP_("Tools"));
+ UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
+
UI_block_funcN_set(block, rna_update_cb, MEM_dupallocN(cb), NULL);
/* The path itself */