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:
authorInes Almeida <britalmeida@gmail.com>2018-10-13 20:49:26 +0300
committerInes Almeida <britalmeida@gmail.com>2018-10-13 20:49:26 +0300
commitab62b7e971ab446c8c286fac305a846f83161e50 (patch)
tree7fd5a67b9653e2e10efee94374e812e76da86a05 /source/blender/editors/interface/interface_handlers.c
parentcc8424e73324b772621045c1856f9a8869faa859 (diff)
parentdd6bf3f84a9137affbcd8ba0fc957c32b8c0aff7 (diff)
Merge branch 'origin/blender2.8' into temp-ui-layout-2.8temp-ui-layout-2.8
Diffstat (limited to 'source/blender/editors/interface/interface_handlers.c')
-rw-r--r--source/blender/editors/interface/interface_handlers.c66
1 files changed, 39 insertions, 27 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 1891687b28b..b883984a702 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -2076,22 +2076,22 @@ static void ui_but_set_float_array(bContext *C, uiBut *but, uiHandleButtonData *
button_activate_state(C, but, BUTTON_STATE_EXIT);
}
-static void float_array_to_string(float *values, int array_length, char *output, int max_output_len)
+static void float_array_to_string(float *values, int array_length, char *output, int output_len_max)
{
/* to avoid buffer overflow attacks; numbers are quite arbitrary */
- BLI_assert(max_output_len > 15);
- max_output_len -= 10;
+ BLI_assert(output_len_max > 15);
+ output_len_max -= 10;
int current_index = 0;
output[current_index] = '[';
current_index++;
for (int i = 0; i < array_length; i++) {
- int length = BLI_snprintf(output + current_index, max_output_len - current_index, "%f", values[i]);
+ int length = BLI_snprintf(output + current_index, output_len_max - current_index, "%f", values[i]);
current_index += length;
if (i < array_length - 1) {
- if (current_index < max_output_len) {
+ if (current_index < output_len_max) {
output[current_index + 0] = ',';
output[current_index + 1] = ' ';
current_index += 2;
@@ -2103,12 +2103,12 @@ static void float_array_to_string(float *values, int array_length, char *output,
output[current_index + 1] = '\0';
}
-static void ui_but_copy_numeric_array(uiBut *but, char *output, int max_output_len)
+static void ui_but_copy_numeric_array(uiBut *but, char *output, int output_len_max)
{
int array_length = get_but_property_array_length(but);
float *values = alloca(array_length * sizeof(float));
RNA_property_float_get_array(&but->rnapoin, but->rnaprop, values);
- float_array_to_string(values, array_length, output, max_output_len);
+ float_array_to_string(values, array_length, output, output_len_max);
}
static bool parse_float_array(char *text, float *values, int expected_length)
@@ -2146,11 +2146,11 @@ static void ui_but_paste_numeric_array(bContext *C, uiBut *but, uiHandleButtonDa
}
}
-static void ui_but_copy_numeric_value(uiBut *but, char *output, int max_output_len)
+static void ui_but_copy_numeric_value(uiBut *but, char *output, int output_len_max)
{
/* Get many decimal places, then strip trailing zeros.
* note: too high values start to give strange results */
- ui_but_string_get_ex(but, output, max_output_len, UI_PRECISION_FLOAT_MAX, false, NULL);
+ ui_but_string_get_ex(but, output, output_len_max, UI_PRECISION_FLOAT_MAX, false, NULL);
BLI_str_rstrip_float_zero(output, '\0');
}
@@ -2192,7 +2192,7 @@ static void ui_but_paste_normalized_vector(bContext *C, uiBut *but, char *buf_pa
}
}
-static void ui_but_copy_color(uiBut *but, char *output, int max_output_len)
+static void ui_but_copy_color(uiBut *but, char *output, int output_len_max)
{
float rgba[4];
@@ -2207,7 +2207,7 @@ static void ui_but_copy_color(uiBut *but, char *output, int max_output_len)
if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA)
srgb_to_linearrgb_v3_v3(rgba, rgba);
- float_array_to_string(rgba, 4, output, max_output_len);
+ float_array_to_string(rgba, 4, output, output_len_max);
}
static void ui_but_paste_color(bContext *C, uiBut *but, char *buf_paste)
@@ -2225,9 +2225,9 @@ static void ui_but_paste_color(bContext *C, uiBut *but, char *buf_paste)
}
}
-static void ui_but_copy_text(uiBut *but, char *output, int max_output_len)
+static void ui_but_copy_text(uiBut *but, char *output, int output_len_max)
{
- ui_but_string_get(but, output, max_output_len);
+ ui_but_string_get(but, output, output_len_max);
}
static void ui_but_paste_text(bContext *C, uiBut *but, uiHandleButtonData *data, char *buf_paste)
@@ -2284,22 +2284,22 @@ static void ui_but_paste_curvemapping(bContext *C, uiBut *but)
}
}
-static void ui_but_copy_operator(bContext *C, uiBut *but, char *output, int max_output_len)
+static void ui_but_copy_operator(bContext *C, uiBut *but, char *output, int output_len_max)
{
PointerRNA *opptr;
opptr = UI_but_operator_ptr_get(but);
char *str;
str = WM_operator_pystring_ex(C, NULL, false, true, but->optype, opptr);
- strncpy(output, str, max_output_len);
+ BLI_strncpy(output, str, output_len_max);
MEM_freeN(str);
}
-static void ui_but_copy_menu(uiBut *but, char *output, int max_output_len)
+static void ui_but_copy_menu(uiBut *but, char *output, int output_len_max)
{
MenuType *mt = UI_but_menutype_get(but);
if (mt) {
- BLI_snprintf(output, max_output_len, "bpy.ops.wm.call_menu(name=\"%s\")", mt->idname);
+ BLI_snprintf(output, output_len_max, "bpy.ops.wm.call_menu(name=\"%s\")", mt->idname);
}
}
@@ -2309,8 +2309,12 @@ static void ui_but_copy(bContext *C, uiBut *but, const bool copy_array)
return;
}
- static const int max_copy_length = UI_MAX_DRAW_STR;
- char buffer_to_copy[UI_MAX_DRAW_STR] = { 0 };
+ /* Arbitrary large value (allow for paths: 'PATH_MAX') */
+ char buf[4096] = {0};
+ const int buf_max_len = sizeof(buf);
+
+ /* Left false for copying internal data (color-band for eg). */
+ bool is_buf_set = false;
bool has_required_data = !(but->poin == NULL && but->rnapoin.data == NULL);
@@ -2319,27 +2323,31 @@ static void ui_but_copy(bContext *C, uiBut *but, const bool copy_array)
case UI_BTYPE_NUM_SLIDER:
if (!has_required_data) break;
if (copy_array && ui_but_has_array_value(but)) {
- ui_but_copy_numeric_array(but, buffer_to_copy, max_copy_length);
+ ui_but_copy_numeric_array(but, buf, buf_max_len);
}
else {
- ui_but_copy_numeric_value(but, buffer_to_copy, max_copy_length);
+ ui_but_copy_numeric_value(but, buf, buf_max_len);
}
+ is_buf_set = true;
break;
case UI_BTYPE_UNITVEC:
if (!has_required_data) break;
- ui_but_copy_numeric_array(but, buffer_to_copy, max_copy_length);
+ ui_but_copy_numeric_array(but, buf, buf_max_len);
+ is_buf_set = true;
break;
case UI_BTYPE_COLOR:
if (!has_required_data) break;
- ui_but_copy_color(but, buffer_to_copy, max_copy_length);
+ ui_but_copy_color(but, buf, buf_max_len);
+ is_buf_set = true;
break;
case UI_BTYPE_TEXT:
case UI_BTYPE_SEARCH_MENU:
if (!has_required_data) break;
- ui_but_copy_text(but, buffer_to_copy, max_copy_length);
+ ui_but_copy_text(but, buf, buf_max_len);
+ is_buf_set = true;
break;
case UI_BTYPE_COLORBAND:
@@ -2351,19 +2359,23 @@ static void ui_but_copy(bContext *C, uiBut *but, const bool copy_array)
break;
case UI_BTYPE_BUT:
- ui_but_copy_operator(C, but, buffer_to_copy, max_copy_length);
+ ui_but_copy_operator(C, but, buf, buf_max_len);
+ is_buf_set = true;
break;
case UI_BTYPE_MENU:
case UI_BTYPE_PULLDOWN:
- ui_but_copy_menu(but, buffer_to_copy, max_copy_length);
+ ui_but_copy_menu(but, buf, buf_max_len);
+ is_buf_set = true;
break;
default:
break;
}
- WM_clipboard_text_set(buffer_to_copy, 0);
+ if (is_buf_set) {
+ WM_clipboard_text_set(buf, 0);
+ }
}
static void ui_but_paste(bContext *C, uiBut *but, uiHandleButtonData *data, const bool paste_array)