From 234928574b8e0659ec2b6d684baa8dd5138b53e3 Mon Sep 17 00:00:00 2001 From: Christoph Lendenfeld Date: Tue, 26 Mar 2024 15:02:39 +0100 Subject: [PATCH 1/5] show property --- source/blender/editors/include/ED_util.hh | 3 + .../editors/space_graph/graph_slider_ops.cc | 2 + source/blender/editors/util/ed_draw.cc | 55 ++++++++++++++++--- 3 files changed, 52 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/include/ED_util.hh b/source/blender/editors/include/ED_util.hh index 224bcae5b65..1f30fdda596 100644 --- a/source/blender/editors/include/ED_util.hh +++ b/source/blender/editors/include/ED_util.hh @@ -104,6 +104,9 @@ void ED_slider_allow_increments_set(tSlider *slider, bool value); void ED_slider_mode_set(tSlider *slider, SliderMode mode); SliderMode ED_slider_mode_get(tSlider *slider); void ED_slider_unit_set(tSlider *slider, const char *unit); +/* Set a name that will show next to the slider to indicate which property is modified currently. + * To clear, set to an empty string. */ +void ED_slider_property_name_set(tSlider *slider, const char *prop_name); /* ************** XXX OLD CRUFT WARNING ************* */ diff --git a/source/blender/editors/space_graph/graph_slider_ops.cc b/source/blender/editors/space_graph/graph_slider_ops.cc index 9236e37b31b..265c47c8bf8 100644 --- a/source/blender/editors/space_graph/graph_slider_ops.cc +++ b/source/blender/editors/space_graph/graph_slider_ops.cc @@ -1024,6 +1024,7 @@ static int ease_modal(bContext *C, wmOperator *op, const wmEvent *event) ED_slider_unit_set(gso->slider, "%"); gso->factor_prop = RNA_struct_find_property(op->ptr, "factor"); } + ED_slider_property_name_set(gso->slider, RNA_property_ui_name(gso->factor_prop)); ease_modal_update(C, op); break; } @@ -1049,6 +1050,7 @@ static int ease_invoke(bContext *C, wmOperator *op, const wmEvent *event) ED_slider_allow_overshoot_set(gso->slider, false, false); ED_slider_factor_bounds_set(gso->slider, -1, 1); ED_slider_factor_set(gso->slider, 0.0f); + ED_slider_property_name_set(gso->slider, RNA_property_ui_name(gso->factor_prop)); return invoke_result; } diff --git a/source/blender/editors/util/ed_draw.cc b/source/blender/editors/util/ed_draw.cc index 28cdfdaee4e..f0eca2d922d 100644 --- a/source/blender/editors/util/ed_draw.cc +++ b/source/blender/editors/util/ed_draw.cc @@ -55,6 +55,7 @@ #define SLIDE_PIXEL_DISTANCE (300.0f * UI_SCALE_FAC) #define OVERSHOOT_RANGE_DELTA 0.2f #define SLIDER_UNIT_STRING_SIZE 64 +#define SLIDER_PROPERTY_STRING_SIZE 64 struct tSlider { Scene *scene; @@ -81,6 +82,10 @@ struct tSlider { /* How the factor number is drawn. When drawing percent it is factor*100. */ SliderMode slider_mode; + /* Optional string that will display next to the slider to indicate which property is modified + * right now. */ + char property_name[SLIDER_PROPERTY_STRING_SIZE]; + /* What unit to add to the slider. */ char unit_string[SLIDER_UNIT_STRING_SIZE]; @@ -224,7 +229,8 @@ static void draw_backdrop(const int fontid, const rctf *main_line_rect, const uint8_t color_bg[4], const short region_y_size, - const float base_tick_height) + const float base_tick_height, + const char *property_name) { float string_pixel_size[2]; const char *percentage_string_placeholder = "000%%"; @@ -233,10 +239,18 @@ static void draw_backdrop(const int fontid, sizeof(percentage_string_placeholder), &string_pixel_size[0], &string_pixel_size[1]); - const float pad[2] = {(region_y_size - base_tick_height) / 2, 2.0f * U.pixelsize}; + + float property_name_pixel_size[2]; + BLF_width_and_height(fontid, + property_name, + SLIDER_PROPERTY_STRING_SIZE, + &property_name_pixel_size[0], + &property_name_pixel_size[1]); + const float pad[2] = {(region_y_size - base_tick_height) / 2 + 12.0f * U.pixelsize, + 2.0f * U.pixelsize}; rctf backdrop_rect{}; backdrop_rect.xmin = main_line_rect->xmin - string_pixel_size[0] - pad[0]; - backdrop_rect.xmax = main_line_rect->xmax + pad[0]; + backdrop_rect.xmax = main_line_rect->xmax + property_name_pixel_size[0] + pad[0]; backdrop_rect.ymin = pad[1]; backdrop_rect.ymax = region_y_size - pad[1]; UI_draw_roundbox_3ub_alpha(&backdrop_rect, true, 4.0f, color_bg, color_bg[3]); @@ -304,7 +318,12 @@ static void slider_draw(const bContext * /*C*/, ARegion *region, void *arg) handle_pos_x = main_line_rect.xmin + SLIDE_PIXEL_DISTANCE * range_factor; } - draw_backdrop(fontid, &main_line_rect, color_bg, slider->region_header->winy, base_tick_height); + draw_backdrop(fontid, + &main_line_rect, + color_bg, + slider->region_header->winy, + base_tick_height, + slider->property_name); draw_main_line(&main_line_rect, slider->factor, slider->overshoot, color_overshoot, color_line); @@ -356,11 +375,26 @@ static void slider_draw(const bContext * /*C*/, ARegion *region, void *arg) &factor_string_pixel_size[0], &factor_string_pixel_size[1]); - BLF_position(fontid, - main_line_rect.xmin - 12.0 * U.pixelsize - factor_string_pixel_size[0], - (region->winy / 2) - factor_string_pixel_size[1] / 2, - 0.0f); + const float text_padding = 12.0 * U.pixelsize; + const float factor_string_pos_x = main_line_rect.xmin - text_padding - + factor_string_pixel_size[0]; + BLF_position( + fontid, factor_string_pos_x, (region->winy / 2) - factor_string_pixel_size[1] / 2, 0.0f); BLF_draw(fontid, factor_string, sizeof(factor_string)); + + if (slider->property_name) { + float property_name_pixel_size[2]; + BLF_width_and_height(fontid, + slider->property_name, + sizeof(slider->property_name), + &property_name_pixel_size[0], + &property_name_pixel_size[1]); + BLF_position(fontid, + main_line_rect.xmax + text_padding, + (region->winy / 2) - property_name_pixel_size[1] / 2, + 0.0f); + BLF_draw(fontid, slider->property_name, sizeof(slider->property_name)); + } } static void slider_update_factor(tSlider *slider, const wmEvent *event) @@ -584,6 +618,11 @@ void ED_slider_unit_set(tSlider *slider, const char *unit) STRNCPY(slider->unit_string, unit); } +void ED_slider_property_name_set(tSlider *slider, const char *prop_name) +{ + STRNCPY(slider->property_name, prop_name); +} + /** \} */ void ED_region_draw_mouse_line_cb(const bContext *C, ARegion *region, void *arg_info) -- 2.30.2 From 404d7531c59223cb32114bee2a28c6a0cf639598 Mon Sep 17 00:00:00 2001 From: Christoph Lendenfeld Date: Tue, 9 Apr 2024 15:36:14 +0200 Subject: [PATCH 2/5] use std::string --- source/blender/editors/include/ED_util.hh | 2 +- .../editors/space_graph/graph_slider_ops.cc | 4 ++-- source/blender/editors/util/ed_draw.cc | 23 +++++++++---------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/source/blender/editors/include/ED_util.hh b/source/blender/editors/include/ED_util.hh index c3beca931e5..02d40db38e8 100644 --- a/source/blender/editors/include/ED_util.hh +++ b/source/blender/editors/include/ED_util.hh @@ -106,7 +106,7 @@ SliderMode ED_slider_mode_get(const tSlider *slider); void ED_slider_unit_set(tSlider *slider, const char *unit); /* Set a name that will show next to the slider to indicate which property is modified currently. * To clear, set to an empty string. */ -void ED_slider_property_name_set(tSlider *slider, const char *prop_name); +void ED_slider_property_label_set(tSlider *slider, const char *prop_name); /* ************** XXX OLD CRUFT WARNING ************* */ diff --git a/source/blender/editors/space_graph/graph_slider_ops.cc b/source/blender/editors/space_graph/graph_slider_ops.cc index 4ff2d2aab4d..6c99515625a 100644 --- a/source/blender/editors/space_graph/graph_slider_ops.cc +++ b/source/blender/editors/space_graph/graph_slider_ops.cc @@ -1024,7 +1024,7 @@ static int ease_modal(bContext *C, wmOperator *op, const wmEvent *event) ED_slider_unit_set(gso->slider, "%"); gso->factor_prop = RNA_struct_find_property(op->ptr, "factor"); } - ED_slider_property_name_set(gso->slider, RNA_property_ui_name(gso->factor_prop)); + ED_slider_property_label_set(gso->slider, RNA_property_ui_name(gso->factor_prop)); ease_modal_update(C, op); break; } @@ -1050,7 +1050,7 @@ static int ease_invoke(bContext *C, wmOperator *op, const wmEvent *event) ED_slider_allow_overshoot_set(gso->slider, false, false); ED_slider_factor_bounds_set(gso->slider, -1, 1); ED_slider_factor_set(gso->slider, 0.0f); - ED_slider_property_name_set(gso->slider, RNA_property_ui_name(gso->factor_prop)); + ED_slider_property_label_set(gso->slider, RNA_property_ui_name(gso->factor_prop)); return invoke_result; } diff --git a/source/blender/editors/util/ed_draw.cc b/source/blender/editors/util/ed_draw.cc index 9cf8baaf72e..c62babb6480 100644 --- a/source/blender/editors/util/ed_draw.cc +++ b/source/blender/editors/util/ed_draw.cc @@ -55,7 +55,6 @@ #define SLIDE_PIXEL_DISTANCE (300.0f * UI_SCALE_FAC) #define OVERSHOOT_RANGE_DELTA 0.2f #define SLIDER_UNIT_STRING_SIZE 64 -#define SLIDER_PROPERTY_STRING_SIZE 64 struct tSlider { Scene *scene; @@ -84,7 +83,7 @@ struct tSlider { /* Optional string that will display next to the slider to indicate which property is modified * right now. */ - char property_name[SLIDER_PROPERTY_STRING_SIZE]; + std::string property_label; /* What unit to add to the slider. */ char unit_string[SLIDER_UNIT_STRING_SIZE]; @@ -230,7 +229,7 @@ static void draw_backdrop(const int fontid, const uint8_t color_bg[4], const short region_y_size, const float base_tick_height, - const char *property_name) + const std::string &property_label) { float string_pixel_size[2]; const char *percentage_string_placeholder = "000%%"; @@ -242,8 +241,8 @@ static void draw_backdrop(const int fontid, float property_name_pixel_size[2]; BLF_width_and_height(fontid, - property_name, - SLIDER_PROPERTY_STRING_SIZE, + property_label.c_str(), + property_label.size(), &property_name_pixel_size[0], &property_name_pixel_size[1]); const float pad[2] = {(region_y_size - base_tick_height) / 2 + 12.0f * U.pixelsize, @@ -323,7 +322,7 @@ static void slider_draw(const bContext * /*C*/, ARegion *region, void *arg) color_bg, slider->region_header->winy, base_tick_height, - slider->property_name); + slider->property_label); draw_main_line(&main_line_rect, slider->factor, slider->overshoot, color_overshoot, color_line); @@ -382,18 +381,18 @@ static void slider_draw(const bContext * /*C*/, ARegion *region, void *arg) fontid, factor_string_pos_x, (region->winy / 2) - factor_string_pixel_size[1] / 2, 0.0f); BLF_draw(fontid, factor_string, sizeof(factor_string)); - if (slider->property_name) { + if (!slider->property_label.empty()) { float property_name_pixel_size[2]; BLF_width_and_height(fontid, - slider->property_name, - sizeof(slider->property_name), + slider->property_label.c_str(), + sizeof(slider->property_label), &property_name_pixel_size[0], &property_name_pixel_size[1]); BLF_position(fontid, main_line_rect.xmax + text_padding, (region->winy / 2) - property_name_pixel_size[1] / 2, 0.0f); - BLF_draw(fontid, slider->property_name, sizeof(slider->property_name)); + BLF_draw(fontid, slider->property_label.c_str(), sizeof(slider->property_label)); } } @@ -618,9 +617,9 @@ void ED_slider_unit_set(tSlider *slider, const char *unit) STRNCPY(slider->unit_string, unit); } -void ED_slider_property_name_set(tSlider *slider, const char *prop_name) +void ED_slider_property_label_set(tSlider *slider, const char *property_label) { - STRNCPY(slider->property_name, prop_name); + slider->property_label.assign(property_label); } /** \} */ -- 2.30.2 From 94f6b99a7c32e235db0eef33d1bf8107d9f275f3 Mon Sep 17 00:00:00 2001 From: Christoph Lendenfeld Date: Thu, 11 Apr 2024 14:47:50 +0200 Subject: [PATCH 3/5] swap label and value --- source/blender/editors/util/ed_draw.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/util/ed_draw.cc b/source/blender/editors/util/ed_draw.cc index c62babb6480..5676138fb23 100644 --- a/source/blender/editors/util/ed_draw.cc +++ b/source/blender/editors/util/ed_draw.cc @@ -375,8 +375,7 @@ static void slider_draw(const bContext * /*C*/, ARegion *region, void *arg) &factor_string_pixel_size[1]); const float text_padding = 12.0 * U.pixelsize; - const float factor_string_pos_x = main_line_rect.xmin - text_padding - - factor_string_pixel_size[0]; + const float factor_string_pos_x = main_line_rect.xmax + text_padding; BLF_position( fontid, factor_string_pos_x, (region->winy / 2) - factor_string_pixel_size[1] / 2, 0.0f); BLF_draw(fontid, factor_string, sizeof(factor_string)); @@ -389,7 +388,7 @@ static void slider_draw(const bContext * /*C*/, ARegion *region, void *arg) &property_name_pixel_size[0], &property_name_pixel_size[1]); BLF_position(fontid, - main_line_rect.xmax + text_padding, + main_line_rect.xmin - text_padding - property_name_pixel_size[0], (region->winy / 2) - property_name_pixel_size[1] / 2, 0.0f); BLF_draw(fontid, slider->property_label.c_str(), sizeof(slider->property_label)); -- 2.30.2 From 8795206d557a3e29885423097b47c86bc539a22c Mon Sep 17 00:00:00 2001 From: Christoph Lendenfeld Date: Thu, 11 Apr 2024 15:56:45 +0200 Subject: [PATCH 4/5] fix backdrop --- source/blender/editors/util/ed_draw.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/util/ed_draw.cc b/source/blender/editors/util/ed_draw.cc index 5676138fb23..07343addcaf 100644 --- a/source/blender/editors/util/ed_draw.cc +++ b/source/blender/editors/util/ed_draw.cc @@ -231,13 +231,13 @@ static void draw_backdrop(const int fontid, const float base_tick_height, const std::string &property_label) { - float string_pixel_size[2]; + float percent_string_pixel_size[2]; const char *percentage_string_placeholder = "000%%"; BLF_width_and_height(fontid, percentage_string_placeholder, sizeof(percentage_string_placeholder), - &string_pixel_size[0], - &string_pixel_size[1]); + &percent_string_pixel_size[0], + &percent_string_pixel_size[1]); float property_name_pixel_size[2]; BLF_width_and_height(fontid, @@ -248,8 +248,8 @@ static void draw_backdrop(const int fontid, const float pad[2] = {(region_y_size - base_tick_height) / 2 + 12.0f * U.pixelsize, 2.0f * U.pixelsize}; rctf backdrop_rect{}; - backdrop_rect.xmin = main_line_rect->xmin - string_pixel_size[0] - pad[0]; - backdrop_rect.xmax = main_line_rect->xmax + property_name_pixel_size[0] + pad[0]; + backdrop_rect.xmin = main_line_rect->xmin - property_name_pixel_size[0] - pad[0]; + backdrop_rect.xmax = main_line_rect->xmax + percent_string_pixel_size[0] + pad[0]; backdrop_rect.ymin = pad[1]; backdrop_rect.ymax = region_y_size - pad[1]; UI_draw_roundbox_3ub_alpha(&backdrop_rect, true, 4.0f, color_bg, color_bg[3]); -- 2.30.2 From 17be8299d590bf66b649754670f99b3968f2f6e4 Mon Sep 17 00:00:00 2001 From: Christoph Lendenfeld Date: Tue, 23 Apr 2024 10:40:40 +0200 Subject: [PATCH 5/5] use string lenght() --- source/blender/editors/util/ed_draw.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/util/ed_draw.cc b/source/blender/editors/util/ed_draw.cc index 07343addcaf..923d45885e5 100644 --- a/source/blender/editors/util/ed_draw.cc +++ b/source/blender/editors/util/ed_draw.cc @@ -384,14 +384,14 @@ static void slider_draw(const bContext * /*C*/, ARegion *region, void *arg) float property_name_pixel_size[2]; BLF_width_and_height(fontid, slider->property_label.c_str(), - sizeof(slider->property_label), + slider->property_label.length(), &property_name_pixel_size[0], &property_name_pixel_size[1]); BLF_position(fontid, main_line_rect.xmin - text_padding - property_name_pixel_size[0], (region->winy / 2) - property_name_pixel_size[1] / 2, 0.0f); - BLF_draw(fontid, slider->property_label.c_str(), sizeof(slider->property_label)); + BLF_draw(fontid, slider->property_label.c_str(), slider->property_label.length()); } } -- 2.30.2