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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2021-01-11 09:39:58 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-01-11 09:51:42 +0300
commita83c67c1831708f760e7f421f6bd39242cf23176 (patch)
tree887bbfd7b37adc1f5431713d0a10ed5e2fa914cf /source
parentb01e62e3995512985cb68dcbe6e8ad3f9660c206 (diff)
Fix incorrect use of BLI_snprintf in sequencer text concatenation
The start of the text was stepped over without subtracting it's length (introduced in fad80a95fd08ec87a37f30f0b94a7061d4e382f2). Replace this logic with BLI_string_join_array to simplify construction.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/space_sequencer/sequencer_draw.c43
1 files changed, 25 insertions, 18 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index be9acf67ae8..9e6a21791d4 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -26,6 +26,7 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
+#include "BLI_string_utils.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
@@ -684,31 +685,37 @@ static size_t draw_seq_text_get_overlay_string(SpaceSeq *sseq,
{
const char *name = draw_seq_text_get_name(seq);
char source[FILE_MAX];
- int strip_duration = seq->enddisp - seq->startdisp;
draw_seq_text_get_source(seq, source, sizeof(source));
- bool show_name = sseq->flag & SEQ_SHOW_STRIP_NAME;
- bool show_source = (sseq->flag & (SEQ_SHOW_STRIP_SOURCE)) && source[0] != '\0';
- bool show_duration = sseq->flag & SEQ_SHOW_STRIP_DURATION;
+ const char *text_sep = " | ";
+ const char *text_array[5];
+ int i = 0;
- size_t string_len = 0;
- if (show_name) {
- string_len = BLI_snprintf(r_overlay_string, overlay_string_len, "%s", name);
- if (show_source || show_duration) {
- string_len += BLI_snprintf(r_overlay_string + string_len, overlay_string_len, " | ");
- }
+ if (sseq->flag & SEQ_SHOW_STRIP_NAME) {
+ text_array[i++] = name;
}
- if (show_source) {
- string_len += BLI_snprintf(r_overlay_string + string_len, overlay_string_len, "%s", source);
- if (show_duration) {
- string_len += BLI_snprintf(r_overlay_string + string_len, overlay_string_len, " | ");
+
+ if ((sseq->flag & SEQ_SHOW_STRIP_SOURCE) && (source[0] != '\0')) {
+ if (i != 0) {
+ text_array[i++] = text_sep;
}
+ text_array[i++] = source;
}
- if (show_duration) {
- string_len += BLI_snprintf(
- r_overlay_string + string_len, overlay_string_len, "%d", strip_duration);
+
+ char strip_duration_text[16];
+ if (sseq->flag & SEQ_SHOW_STRIP_DURATION) {
+ const int strip_duration = seq->enddisp - seq->startdisp;
+ SNPRINTF(strip_duration_text, "%d", strip_duration);
+ if (i != 0) {
+ text_array[i++] = text_sep;
+ }
+ text_array[i++] = strip_duration_text;
}
- return string_len;
+
+ BLI_assert(i <= ARRAY_SIZE(text_array));
+
+ return BLI_string_join_array(r_overlay_string, overlay_string_len, text_array, i) -
+ r_overlay_string;
}
/* Draw info text on a sequence strip. */