[Bf-blender-cvs] [3ad9027] master: Text3D: fixes to selection

Campbell Barton noreply at git.blender.org
Wed Sep 10 15:00:39 CEST 2014


Commit: 3ad902764802b74868d623eea8da460948db2798
Author: Campbell Barton
Date:   Wed Sep 10 21:08:40 2014 +1000
Branches: master
https://developer.blender.org/rB3ad902764802b74868d623eea8da460948db2798

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.

===================================================================

M	source/blender/blenkernel/BKE_font.h
M	source/blender/blenkernel/intern/font.c
M	source/blender/editors/curve/editfont.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_font.h b/source/blender/blenkernel/BKE_font.h
index b60c833..e12ce3d 100644
--- a/source/blender/blenkernel/BKE_font.h
+++ b/source/blender/blenkernel/BKE_font.h
@@ -93,6 +93,7 @@ bool BKE_vfont_to_curve_nubase(struct Main *bmain, struct Object *ob, int mode,
 bool BKE_vfont_to_curve(struct Main *bmain, struct Object *ob, int mode);
 
 int BKE_vfont_select_get(struct Object *ob, int *r_start, int *r_end);
+void BKE_vfont_select_clamp(struct Object *ob);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index 3b53c57..947bd9f 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)
diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c
index 36e1210..d1f628d 100644
--- a/source/blender/editors/curve/editfont.c
+++ b/source/blender/editors/curve/editfont.c
@@ -1594,6 +1594,9 @@ void make_editText(Object *obedit)
 	ef->pos = cu->pos;
 	ef->selstart = cu->selstart;
 	ef->selend = cu->selend;
+
+	/* text may have been modified by Python */
+	BKE_vfont_select_clamp(obedit);
 }
 
 void load_editText(Object *obedit)




More information about the Bf-blender-cvs mailing list