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:
authorCampbell Barton <ideasman42@gmail.com>2014-09-10 15:08:40 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-09-10 17:00:24 +0400
commit3ad902764802b74868d623eea8da460948db2798 (patch)
tree734f0b8d45f6c2105c0f41b6f105b35b8ced49a3 /source/blender/blenkernel/intern/font.c
parent64e955f52228b573aeffb96d0b74db8eb6931190 (diff)
Text3D: fixes to selection
- clamp selection on entering editmode (Python may have changed). - BKE_vfont_select_get no longer succeeds with an empty selection this caused many operators to go ahead and operate on zero size array.
Diffstat (limited to 'source/blender/blenkernel/intern/font.c')
-rw-r--r--source/blender/blenkernel/intern/font.c42
1 files changed, 34 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index 3b53c579496..947bd9f4255 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -484,24 +484,50 @@ int BKE_vfont_select_get(Object *ob, int *r_start, int *r_end)
{
Curve *cu = ob->data;
EditFont *ef = cu->editfont;
+ int start, end, direction;
if ((ob->type != OB_FONT) || (ef == NULL)) return 0;
BLI_assert(ef->selstart >= 0 && ef->selstart <= ef->len + 1);
- BLI_assert(ef->selend >= 0 && ef->selend <= ef->len + 1);
+ BLI_assert(ef->selend >= 0 && ef->selend <= ef->len);
BLI_assert(ef->pos >= 0 && ef->pos <= ef->len);
- if (ef->selstart == 0) return 0;
+ if (ef->selstart == 0) {
+ return 0;
+ }
+
if (ef->selstart <= ef->selend) {
- *r_start = ef->selstart - 1;
- *r_end = ef->selend - 1;
- return 1;
+ start = ef->selstart - 1;
+ end = ef->selend - 1;
+ direction = 1;
}
else {
- *r_start = ef->selend;
- *r_end = ef->selstart - 2;
- return -1;
+ start = ef->selend;
+ end = ef->selstart - 2;
+ direction = -1;
+ }
+
+ if (start == end + 1) {
+ return 0;
}
+ else {
+ BLI_assert(start < end + 1);
+ *r_start = start;
+ *r_end = end;
+ return direction;
+ }
+}
+
+void BKE_vfont_select_clamp(Object *ob)
+{
+ Curve *cu = ob->data;
+ EditFont *ef = cu->editfont;
+
+ BLI_assert((ob->type == OB_FONT) && ef);
+
+ CLAMP_MAX(ef->pos, ef->len);
+ CLAMP_MAX(ef->selstart, ef->len + 1);
+ CLAMP_MAX(ef->selend, ef->len);
}
static float char_width(Curve *cu, VChar *che, CharInfo *info)