[Bf-blender-cvs] [62e1d8f] temp-text_editor_cursor_api: patch D945 from scorpion81 (Martin Felke)

Campbell Barton noreply at git.blender.org
Tue Dec 30 09:45:38 CET 2014


Commit: 62e1d8fc276e6be833135873435e4f0366ca8682
Author: Campbell Barton
Date:   Tue Dec 30 19:44:59 2014 +1100
Branches: temp-text_editor_cursor_api
https://developer.blender.org/rB62e1d8fc276e6be833135873435e4f0366ca8682

patch D945 from scorpion81 (Martin Felke)

Committing to a branch for cleanup & api edits

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

M	source/blender/editors/include/ED_text.h
M	source/blender/editors/space_text/text_draw.c
M	source/blender/makesrna/intern/rna_space.c
M	source/blenderplayer/bad_level_call_stubs/stubs.c

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

diff --git a/source/blender/editors/include/ED_text.h b/source/blender/editors/include/ED_text.h
index 9a36cb3..59bb37d 100644
--- a/source/blender/editors/include/ED_text.h
+++ b/source/blender/editors/include/ED_text.h
@@ -31,8 +31,11 @@
 #define __ED_TEXT_H__
 
 struct bContext;
+struct SpaceText;
+struct ARegion;
 
 void ED_text_undo_step(struct bContext *C, int step);
+bool ED_text_line_char_to_pixel_space(struct SpaceText *st, struct ARegion *ar, const int line_char[2], int screen_pos[2]);
 
 #endif /* __ED_TEXT_H__ */
 
diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c
index a43d430..bc30213 100644
--- a/source/blender/editors/space_text/text_draw.c
+++ b/source/blender/editors/space_text/text_draw.c
@@ -44,6 +44,8 @@
 #include "BKE_text.h"
 #include "BKE_screen.h"
 
+#include "ED_text.h"
+
 #include "BIF_gl.h"
 
 #include "UI_interface.h"
@@ -1547,3 +1549,38 @@ void text_update_cursor_moved(bContext *C)
 
 	text_scroll_to_cursor__area(st, sa, true);
 }
+
+bool ED_text_line_char_to_pixel_space(SpaceText *st, ARegion* ar, const int line_char[2], int screen_pos[2])
+{
+	TextLine* line = NULL;
+
+	if (st && st->text)	{
+		/*ensure line, char are valid text positions (hmm, why... does it matter here?) */
+		if (line_char[0] < 0) {
+			screen_pos[0] = screen_pos[1] = -1;
+			return false;
+		}
+		else {
+			line = BLI_findlink(&st->text->lines, line_char[0]);
+			if (!line || (line_char[1] < 0) || (line_char[1] > line->len)) {
+				screen_pos[0] = screen_pos[1] = -1;
+				return false;
+			}
+			else {
+				int offl = 0, offc = 0;
+
+				if (st->wordwrap) {
+					wrap_offset(st, ar, line, line_char[1], &offl, &offc);
+				}
+
+				screen_pos[0] = (line_char[1] + offc - st->left) * st->cwidth;
+				screen_pos[1] = (line_char[0] + offl - st->top) * (st->lheight_dpi + TXT_LINE_SPACING);
+				return true;
+			}
+		}
+	}
+	else {
+		screen_pos[0] = screen_pos[1] = -1;
+		return false;
+	}
+}
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 72fd7bf..f9495d5 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -210,6 +210,7 @@ static EnumPropertyItem buttons_texture_context_items[] = {
 #include "ED_view3d.h"
 #include "ED_sequencer.h"
 #include "ED_clip.h"
+#include "ED_text.h"
 
 #include "GPU_material.h"
 
@@ -856,6 +857,19 @@ static void rna_SpaceTextEditor_updateEdited(Main *UNUSED(bmain), Scene *UNUSED(
 		WM_main_add_notifier(NC_TEXT | NA_EDITED, st->text);
 }
 
+static void rna_SpaceTextEditor_line_char_to_screen_pos(ID *ptr, SpaceText *st, int line_char[2], int screen_pos[2])
+{
+	bScreen *scr = (bScreen*)ptr;
+	ScrArea *sa;
+
+	for (sa = scr->areabase.first; sa; sa = sa->next) {
+		if (BLI_findindex(&sa->spacedata, st) != -1) {
+			ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
+			ED_text_line_char_to_pixel_space(st, ar, line_char, screen_pos);
+		}
+	}
+}
+
 
 /* Space Properties */
 
@@ -2641,7 +2655,8 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
 static void rna_def_space_text(BlenderRNA *brna)
 {
 	StructRNA *srna;
-	PropertyRNA *prop;
+	PropertyRNA *prop, *parm;
+	FunctionRNA *func;
 
 	srna = RNA_def_struct(brna, "SpaceTextEditor", "Space");
 	RNA_def_struct_sdna(srna, "SpaceText");
@@ -2748,6 +2763,14 @@ static void rna_def_space_text(BlenderRNA *brna)
 	RNA_def_property_string_sdna(prop, NULL, "replacestr");
 	RNA_def_property_ui_text(prop, "Replace Text", "Text to replace selected text with using the replace tool");
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
+
+	func = RNA_def_function(srna, "line_char_to_screen_pos", "rna_SpaceTextEditor_line_char_to_screen_pos");
+	RNA_def_function_ui_description(func, "Retrieve the screen position in pixels from the given line and character position");
+	RNA_def_function_flag(func, PROP_RNAPTR);
+	parm = RNA_def_int_array(func, "line_char", 2, 0, 0, INT_MAX, "", "Text Position, line and character in line", 0, INT_MAX);
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+	parm = RNA_def_int_array(func, "screen_pos", 2, 0, -1, INT_MAX, "", "Screen Position in Pixels", -1, INT_MAX);
+	RNA_def_function_output(func, parm);
 }
 
 static void rna_def_space_dopesheet(BlenderRNA *brna)
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 954e431..730225e 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -163,6 +163,7 @@ struct wmWindowManager;
 #include "../blender/editors/include/ED_render.h"
 #include "../blender/editors/include/ED_screen.h"
 #include "../blender/editors/include/ED_space_api.h"
+#include "../blender/editors/include/ED_text.h"
 #include "../blender/editors/include/ED_transform.h"
 #include "../blender/editors/include/ED_uvedit.h"
 #include "../blender/editors/include/ED_view3d.h"
@@ -482,6 +483,8 @@ bool ED_texture_context_check_lamp(const struct bContext *C) RET_ZERO
 bool ED_texture_context_check_particles(const struct bContext *C) RET_ZERO
 bool ED_texture_context_check_others(const struct bContext *C) RET_ZERO
 
+bool ED_text_line_char_to_pixel_space(SpaceText *st, ARegion *ar, const int line_char[], int screen_pos[]) RET_ZERO
+
 bool snapObjectsRayEx(struct Scene *scene, struct Base *base_act, struct View3D *v3d, struct ARegion *ar, struct Object *obedit, short snap_mode,
                       struct Object **r_ob, float r_obmat[4][4],
                       const float ray_start[3], const float ray_normal[3], float *r_ray_dist,




More information about the Bf-blender-cvs mailing list