forked from enlightenment/efl
Canvas Text: continue porting api and fixup bugs
Also: This merges style user and normal style into a list with precedence. This allows for more flexibility while keeping the API clean. @feature
This commit is contained in:
parent
c297ff4115
commit
ed512ea49e
|
@ -101,12 +101,12 @@ lib/evas/Evas.h \
|
||||||
lib/evas/Evas_Common.h \
|
lib/evas/Evas_Common.h \
|
||||||
lib/evas/Evas_Eo.h \
|
lib/evas/Evas_Eo.h \
|
||||||
lib/evas/Evas_Legacy.h \
|
lib/evas/Evas_Legacy.h \
|
||||||
lib/evas/Evas_Textblock_Legacy.h \
|
|
||||||
lib/evas/Evas_GL.h \
|
lib/evas/Evas_GL.h \
|
||||||
lib/evas/Evas_Loader.h
|
lib/evas/Evas_Loader.h
|
||||||
|
|
||||||
installed_evascanvasheadersdir = $(includedir)/evas-@VMAJ@/canvas
|
installed_evascanvasheadersdir = $(includedir)/evas-@VMAJ@/canvas
|
||||||
nodist_installed_evascanvasheaders_DATA = $(evas_eolian_pub_h) $(evas_eolian_legacy_h)
|
nodist_installed_evascanvasheaders_DATA = $(evas_eolian_pub_h) $(evas_eolian_legacy_h)
|
||||||
|
dist_installed_evascanvasheaders_DATA = lib/evas/canvas/evas_textblock_legacy.h
|
||||||
noinst_DATA += $(evas_eolian_priv_h)
|
noinst_DATA += $(evas_eolian_priv_h)
|
||||||
|
|
||||||
noinst_HEADERS += \
|
noinst_HEADERS += \
|
||||||
|
|
|
@ -4496,7 +4496,7 @@ EAPI void evas_object_text_font_get(const Eo *obj, const char **font, Evas_Font_
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Evas_Textblock_Legacy.h"
|
#include "canvas/evas_textblock_legacy.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup Evas_Object_Grid
|
* @ingroup Evas_Object_Grid
|
||||||
|
|
|
@ -4,21 +4,6 @@ class Efl.Canvas.Text (Evas.Object, Efl.Text)
|
||||||
{
|
{
|
||||||
legacy_prefix: evas_object_textblock;
|
legacy_prefix: evas_object_textblock;
|
||||||
methods {
|
methods {
|
||||||
@property valign {
|
|
||||||
[[The vertical alignment of text within the textblock object as a whole.
|
|
||||||
|
|
||||||
Normally alignment is 0.0 (top of object). Values given should
|
|
||||||
be between 0.0 and 1.0 (1.0 bottom of object, 0.5 being
|
|
||||||
vertically centered etc.).
|
|
||||||
|
|
||||||
@since 1.1
|
|
||||||
]]
|
|
||||||
set {}
|
|
||||||
get {}
|
|
||||||
values {
|
|
||||||
align: double; [[The alignment set for the object.]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@property bidi_delimiters {
|
@property bidi_delimiters {
|
||||||
[[BiDi delimiters are used for in-paragraph separation of bidi
|
[[BiDi delimiters are used for in-paragraph separation of bidi
|
||||||
segments. This is useful for example in recipients fields of
|
segments. This is useful for example in recipients fields of
|
||||||
|
@ -33,14 +18,6 @@ class Efl.Canvas.Text (Evas.Object, Efl.Text)
|
||||||
delim: string; [[A null terminated string of delimiters, e.g ",|" or $null if empty.]]
|
delim: string; [[A null terminated string of delimiters, e.g ",|" or $null if empty.]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property replace_char {
|
|
||||||
[[The "replacement character" to use for the given textblock object.]]
|
|
||||||
set {}
|
|
||||||
get {}
|
|
||||||
values {
|
|
||||||
ch: string; [[The charset name.]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@property legacy_newline {
|
@property legacy_newline {
|
||||||
[[When true, newline character will behave as a paragraph separator.
|
[[When true, newline character will behave as a paragraph separator.
|
||||||
|
|
||||||
|
@ -53,15 +30,27 @@ class Efl.Canvas.Text (Evas.Object, Efl.Text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property style {
|
@property style {
|
||||||
[[The text style of the object]]
|
[[The text style of the object.
|
||||||
|
|
||||||
|
$key is how you reference the style (for deletion or fetching). $NULL
|
||||||
|
as key indicates the style has the highest priority (default style).
|
||||||
|
The style priority is the order of creation, styles created first
|
||||||
|
are applied first with the exception of $NULL which is implicitly
|
||||||
|
first.
|
||||||
|
|
||||||
|
Set $style to $NULL to delete it.
|
||||||
|
]]
|
||||||
set {
|
set {
|
||||||
legacy: null;
|
legacy: null;
|
||||||
}
|
}
|
||||||
get {
|
get {
|
||||||
legacy: null;
|
legacy: null;
|
||||||
}
|
}
|
||||||
|
keys {
|
||||||
|
key: string; [[The name to the style. $NULL is the default style]]
|
||||||
|
}
|
||||||
values {
|
values {
|
||||||
ts: string; [[The style.]]
|
style: string; [[The style.]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property size_formatted {
|
@property size_formatted {
|
||||||
|
@ -127,42 +116,13 @@ class Efl.Canvas.Text (Evas.Object, Efl.Text)
|
||||||
b: Evas.Coord;
|
b: Evas.Coord;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
style_user_pop {
|
@property is_empty {
|
||||||
[[Del the from the top of the user style stack.
|
[[Whether the object is empty (no text) or not]]
|
||||||
|
get {
|
||||||
See also @.style.get.
|
legacy: null;
|
||||||
|
}
|
||||||
@since 1.2
|
values {
|
||||||
]]
|
is_empty: bool; [[$true if empty]]
|
||||||
legacy: null;
|
|
||||||
}
|
|
||||||
style_user_peek @const {
|
|
||||||
[[Get (don't remove) the style at the top of the user style stack.
|
|
||||||
|
|
||||||
See also @.style.get.
|
|
||||||
|
|
||||||
@since 1.2
|
|
||||||
]]
|
|
||||||
legacy: null;
|
|
||||||
return: string; [[The style of the object.]]
|
|
||||||
}
|
|
||||||
style_user_push {
|
|
||||||
[[Push ts to the top of the user style stack.
|
|
||||||
|
|
||||||
FIXME: API is solid but currently only supports 1 style in the
|
|
||||||
stack.
|
|
||||||
|
|
||||||
The user style overrides the corresponding elements of the
|
|
||||||
regular style. This is the proper way to do theme overrides
|
|
||||||
in code.
|
|
||||||
|
|
||||||
See also @.style.set.
|
|
||||||
|
|
||||||
@since 1.2
|
|
||||||
]]
|
|
||||||
legacy: null;
|
|
||||||
params {
|
|
||||||
@in style: string; [[The style to set.]]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
obstacle_add {
|
obstacle_add {
|
||||||
|
@ -229,7 +189,7 @@ class Efl.Canvas.Text (Evas.Object, Efl.Text)
|
||||||
format: string;
|
format: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
annotation_in_range_get {
|
range_annotations_get {
|
||||||
[[Returns an iterator of all the handles in a range.
|
[[Returns an iterator of all the handles in a range.
|
||||||
|
|
||||||
@since 1.18
|
@since 1.18
|
||||||
|
@ -309,6 +269,30 @@ class Efl.Canvas.Text (Evas.Object, Efl.Text)
|
||||||
@in end: Efl.Canvas.Text.Cursor; [[Range end position.]]
|
@in end: Efl.Canvas.Text.Cursor; [[Range end position.]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
range_text_get {
|
||||||
|
[[Returns the text in the range between $cur1 and $cur2.]]
|
||||||
|
legacy: null;
|
||||||
|
return: own(char*); [[The text in the given range.]]
|
||||||
|
params {
|
||||||
|
@in cur1: const(Efl.Canvas.Text.Cursor); [[Range start position.]]
|
||||||
|
@in cur2: const(Efl.Canvas.Text.Cursor); [[Range end position.]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
object_item_geometry_get {
|
||||||
|
[[Queries a given object item for its geometry
|
||||||
|
|
||||||
|
Note that the provided annotation should be an object item type.
|
||||||
|
]]
|
||||||
|
legacy: null;
|
||||||
|
params {
|
||||||
|
@in an: const(Efl.Canvas.Text.Annotation)*; [[Given annotation to query]]
|
||||||
|
@out x: Evas.Coord;
|
||||||
|
@out y: Evas.Coord;
|
||||||
|
@out w: Evas.Coord;
|
||||||
|
@out h: Evas.Coord;
|
||||||
|
}
|
||||||
|
return: bool; [[$true if given annotation is an object item, $false otherwise]]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
implements {
|
implements {
|
||||||
Eo.Base.constructor;
|
Eo.Base.constructor;
|
||||||
|
|
|
@ -475,6 +475,7 @@ struct _Efl_Canvas_Text_Style
|
||||||
{
|
{
|
||||||
const char *style_text;
|
const char *style_text;
|
||||||
char *default_tag;
|
char *default_tag;
|
||||||
|
Eina_Stringshare *key; /* FIXME: Very hacky. */
|
||||||
Evas_Object_Style_Tag *tags;
|
Evas_Object_Style_Tag *tags;
|
||||||
Eina_List *objects;
|
Eina_List *objects;
|
||||||
Eina_Bool delete_me : 1;
|
Eina_Bool delete_me : 1;
|
||||||
|
@ -503,9 +504,7 @@ struct _Efl_Canvas_Text_Annotation
|
||||||
struct _Evas_Object_Textblock
|
struct _Evas_Object_Textblock
|
||||||
{
|
{
|
||||||
Evas_Textblock_Style *style;
|
Evas_Textblock_Style *style;
|
||||||
Evas_Textblock_Style *style_user;
|
Eina_List *styles;
|
||||||
Evas_Textblock_Style *current_style;
|
|
||||||
Evas_Textblock_Style *current_user_style;
|
|
||||||
Eo *cursor;
|
Eo *cursor;
|
||||||
Eina_List *cursors;
|
Eina_List *cursors;
|
||||||
Evas_Object_Textblock_Node_Text *text_nodes;
|
Evas_Object_Textblock_Node_Text *text_nodes;
|
||||||
|
@ -1178,6 +1177,7 @@ static const char *backing_colorstr = NULL;
|
||||||
static const char *strikethrough_colorstr = NULL;
|
static const char *strikethrough_colorstr = NULL;
|
||||||
static const char *alignstr = NULL;
|
static const char *alignstr = NULL;
|
||||||
static const char *valignstr = NULL;
|
static const char *valignstr = NULL;
|
||||||
|
static const char *text_valignstr = NULL;
|
||||||
static const char *wrapstr = NULL;
|
static const char *wrapstr = NULL;
|
||||||
static const char *left_marginstr = NULL;
|
static const char *left_marginstr = NULL;
|
||||||
static const char *right_marginstr = NULL;
|
static const char *right_marginstr = NULL;
|
||||||
|
@ -1194,6 +1194,7 @@ static const char *itemstr = NULL;
|
||||||
static const char *linefillstr = NULL;
|
static const char *linefillstr = NULL;
|
||||||
static const char *ellipsisstr = NULL;
|
static const char *ellipsisstr = NULL;
|
||||||
static const char *passwordstr = NULL;
|
static const char *passwordstr = NULL;
|
||||||
|
static const char *replacement_charstr = NULL;
|
||||||
static const char *underline_dash_widthstr = NULL;
|
static const char *underline_dash_widthstr = NULL;
|
||||||
static const char *underline_dash_gapstr = NULL;
|
static const char *underline_dash_gapstr = NULL;
|
||||||
static const char *underline_heightstr = NULL;
|
static const char *underline_heightstr = NULL;
|
||||||
|
@ -1281,6 +1282,7 @@ _format_command_init(void)
|
||||||
strikethrough_colorstr = eina_stringshare_add("strikethrough_color");
|
strikethrough_colorstr = eina_stringshare_add("strikethrough_color");
|
||||||
alignstr = eina_stringshare_add("align");
|
alignstr = eina_stringshare_add("align");
|
||||||
valignstr = eina_stringshare_add("valign");
|
valignstr = eina_stringshare_add("valign");
|
||||||
|
text_valignstr = eina_stringshare_add("text_valign");
|
||||||
wrapstr = eina_stringshare_add("wrap");
|
wrapstr = eina_stringshare_add("wrap");
|
||||||
left_marginstr = eina_stringshare_add("left_margin");
|
left_marginstr = eina_stringshare_add("left_margin");
|
||||||
right_marginstr = eina_stringshare_add("right_margin");
|
right_marginstr = eina_stringshare_add("right_margin");
|
||||||
|
@ -1297,6 +1299,7 @@ _format_command_init(void)
|
||||||
linefillstr = eina_stringshare_add("linefill");
|
linefillstr = eina_stringshare_add("linefill");
|
||||||
ellipsisstr = eina_stringshare_add("ellipsis");
|
ellipsisstr = eina_stringshare_add("ellipsis");
|
||||||
passwordstr = eina_stringshare_add("password");
|
passwordstr = eina_stringshare_add("password");
|
||||||
|
replacement_charstr = eina_stringshare_add("replacement_char");
|
||||||
underline_dash_widthstr = eina_stringshare_add("underline_dash_width");
|
underline_dash_widthstr = eina_stringshare_add("underline_dash_width");
|
||||||
underline_dash_gapstr = eina_stringshare_add("underline_dash_gap");
|
underline_dash_gapstr = eina_stringshare_add("underline_dash_gap");
|
||||||
underline_heightstr = eina_stringshare_add("underline_height");
|
underline_heightstr = eina_stringshare_add("underline_height");
|
||||||
|
@ -1333,6 +1336,7 @@ _format_command_shutdown(void)
|
||||||
eina_stringshare_del(strikethrough_colorstr);
|
eina_stringshare_del(strikethrough_colorstr);
|
||||||
eina_stringshare_del(alignstr);
|
eina_stringshare_del(alignstr);
|
||||||
eina_stringshare_del(valignstr);
|
eina_stringshare_del(valignstr);
|
||||||
|
eina_stringshare_del(text_valignstr);
|
||||||
eina_stringshare_del(wrapstr);
|
eina_stringshare_del(wrapstr);
|
||||||
eina_stringshare_del(left_marginstr);
|
eina_stringshare_del(left_marginstr);
|
||||||
eina_stringshare_del(right_marginstr);
|
eina_stringshare_del(right_marginstr);
|
||||||
|
@ -1349,6 +1353,7 @@ _format_command_shutdown(void)
|
||||||
eina_stringshare_del(linefillstr);
|
eina_stringshare_del(linefillstr);
|
||||||
eina_stringshare_del(ellipsisstr);
|
eina_stringshare_del(ellipsisstr);
|
||||||
eina_stringshare_del(passwordstr);
|
eina_stringshare_del(passwordstr);
|
||||||
|
eina_stringshare_del(replacement_charstr);
|
||||||
eina_stringshare_del(underline_dash_widthstr);
|
eina_stringshare_del(underline_dash_widthstr);
|
||||||
eina_stringshare_del(underline_dash_gapstr);
|
eina_stringshare_del(underline_dash_gapstr);
|
||||||
eina_stringshare_del(underline_heightstr);
|
eina_stringshare_del(underline_heightstr);
|
||||||
|
@ -1894,6 +1899,15 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
|
||||||
else if (fmt->valign > 1.0) fmt->valign = 1.0;
|
else if (fmt->valign > 1.0) fmt->valign = 1.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (cmd == text_valignstr)
|
||||||
|
{
|
||||||
|
Efl_Canvas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
|
||||||
|
char *endptr = NULL;
|
||||||
|
double val = strtod(param, &endptr);
|
||||||
|
o->valign = val;
|
||||||
|
if (o->valign < 0.0) o->valign = 0.0;
|
||||||
|
else if (o->valign > 1.0) o->valign = 1.0;
|
||||||
|
}
|
||||||
else if (cmd == wrapstr)
|
else if (cmd == wrapstr)
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -2382,6 +2396,11 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
|
||||||
else if (len == 2 && !strcmp(param, "on"))
|
else if (len == 2 && !strcmp(param, "on"))
|
||||||
fmt->password = 1;
|
fmt->password = 1;
|
||||||
}
|
}
|
||||||
|
else if (cmd == replacement_charstr)
|
||||||
|
{
|
||||||
|
Efl_Canvas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
|
||||||
|
eina_stringshare_replace(&o->repch, param);
|
||||||
|
}
|
||||||
else if (cmd == underline_dash_widthstr)
|
else if (cmd == underline_dash_widthstr)
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -6007,6 +6026,8 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret)
|
||||||
/* Start of logical layout creation */
|
/* Start of logical layout creation */
|
||||||
/* setup default base style */
|
/* setup default base style */
|
||||||
{
|
{
|
||||||
|
Eina_List *itr;
|
||||||
|
Evas_Textblock_Style *style;
|
||||||
Eina_Bool finalize = EINA_FALSE;
|
Eina_Bool finalize = EINA_FALSE;
|
||||||
if ((c->o->style) && (c->o->style->default_tag))
|
if ((c->o->style) && (c->o->style->default_tag))
|
||||||
{
|
{
|
||||||
|
@ -6015,14 +6036,17 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret)
|
||||||
finalize = EINA_TRUE;
|
finalize = EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((c->o->style_user) && (c->o->style_user->default_tag))
|
EINA_LIST_FOREACH(c->o->styles, itr, style)
|
||||||
{
|
{
|
||||||
if (!c->fmt)
|
if ((style) && (style->default_tag))
|
||||||
{
|
{
|
||||||
c->fmt = _layout_format_push(c, NULL, NULL);
|
if (!c->fmt)
|
||||||
|
{
|
||||||
|
c->fmt = _layout_format_push(c, NULL, NULL);
|
||||||
|
}
|
||||||
|
_format_fill(c->obj, c->fmt, style->default_tag);
|
||||||
|
finalize = EINA_TRUE;
|
||||||
}
|
}
|
||||||
_format_fill(c->obj, c->fmt, c->o->style_user->default_tag);
|
|
||||||
finalize = EINA_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (finalize)
|
if (finalize)
|
||||||
|
@ -6346,6 +6370,7 @@ evas_textblock_style_free(Evas_Textblock_Style *ts)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_style_clear(ts);
|
_style_clear(ts);
|
||||||
|
eina_stringshare_del(ts->key);
|
||||||
free(ts);
|
free(ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6502,10 +6527,18 @@ evas_textblock_style_get(const Evas_Textblock_Style *ts)
|
||||||
static const char *
|
static const char *
|
||||||
_textblock_format_node_from_style_tag(Efl_Canvas_Text_Data *o, Evas_Object_Textblock_Node_Format *fnode, const char *format, size_t format_len)
|
_textblock_format_node_from_style_tag(Efl_Canvas_Text_Data *o, Evas_Object_Textblock_Node_Format *fnode, const char *format, size_t format_len)
|
||||||
{
|
{
|
||||||
const char *match;
|
Eina_List *itr;
|
||||||
|
Evas_Textblock_Style *style;
|
||||||
|
const char *match = NULL;
|
||||||
size_t replace_len;
|
size_t replace_len;
|
||||||
if (!o->style_user || !(match = _style_match_tag(o->style_user, format,
|
EINA_LIST_REVERSE_FOREACH(o->styles, itr, style)
|
||||||
format_len, &replace_len)))
|
{
|
||||||
|
match = _style_match_tag(style, format, format_len, &replace_len);
|
||||||
|
if (match)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!match)
|
||||||
{
|
{
|
||||||
match = _style_match_tag(o->style, format, format_len,
|
match = _style_match_tag(o->style, format, format_len,
|
||||||
&replace_len);
|
&replace_len);
|
||||||
|
@ -6597,23 +6630,74 @@ evas_object_textblock_style_set(Eo *eo_obj, const Evas_Textblock_Style *ts)
|
||||||
_textblock_style_generic_set(eo_obj, (Evas_Textblock_Style *) ts, &(o->style));
|
_textblock_style_generic_set(eo_obj, (Evas_Textblock_Style *) ts, &(o->style));
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
static Evas_Textblock_Style *
|
||||||
_efl_canvas_text_style_set(Eo *eo_obj, Efl_Canvas_Text_Data *o, const char *style)
|
_style_by_key_find(Efl_Canvas_Text_Data *o, const char *key)
|
||||||
{
|
{
|
||||||
|
Eina_List *itr;
|
||||||
|
Evas_Textblock_Style *style;
|
||||||
|
|
||||||
|
if (!key)
|
||||||
|
return o->style;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(o->styles, itr, style)
|
||||||
|
{
|
||||||
|
if (!strcmp(style->key, key))
|
||||||
|
return style;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static void
|
||||||
|
_efl_canvas_text_style_set(Eo *eo_obj, Efl_Canvas_Text_Data *o, const char *key, const char *style)
|
||||||
|
{
|
||||||
|
// FIXME: Make key value behaviour.
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
||||||
evas_object_async_block(obj);
|
evas_object_async_block(obj);
|
||||||
|
|
||||||
if (!o->current_style)
|
Evas_Textblock_Style *ts;
|
||||||
|
|
||||||
|
ts = _style_by_key_find(o, key);
|
||||||
|
|
||||||
|
if (!ts && !style)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (ts && !style)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Style *ts = evas_textblock_style_new();
|
if (!key)
|
||||||
evas_textblock_style_set(ts, style);
|
{
|
||||||
_textblock_style_generic_set(eo_obj, (Evas_Textblock_Style *) ts, &(o->style));
|
evas_textblock_style_set(ts, "");
|
||||||
o->current_style = ts;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
o->styles = eina_list_remove(o->styles, ts);
|
||||||
|
evas_textblock_style_free(ts);
|
||||||
|
}
|
||||||
|
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
else if (!ts)
|
||||||
|
{
|
||||||
|
Evas_Textblock_Style *tmp = NULL;
|
||||||
|
ts = evas_textblock_style_new();
|
||||||
|
_textblock_style_generic_set(eo_obj, ts, &tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
evas_textblock_style_set(ts, style);
|
||||||
|
|
||||||
|
if (!key)
|
||||||
|
{
|
||||||
|
o->style = ts;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
evas_textblock_style_set(o->current_style, style);
|
ts->key = eina_stringshare_add(key);
|
||||||
|
o->styles = eina_list_append(o->styles, ts);
|
||||||
}
|
}
|
||||||
|
end:
|
||||||
|
o->format_changed = EINA_TRUE;
|
||||||
|
_evas_textblock_invalidate_all(o);
|
||||||
|
_evas_textblock_changed(o, eo_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Evas_Textblock_Style *
|
EAPI Evas_Textblock_Style *
|
||||||
|
@ -6626,37 +6710,31 @@ evas_object_textblock_style_get(const Eo *eo_obj EINA_UNUSED)
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static const char *
|
EOLIAN static const char *
|
||||||
_efl_canvas_text_style_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
|
_efl_canvas_text_style_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o, const char *key)
|
||||||
{
|
{
|
||||||
return o->style->style_text;
|
Evas_Textblock_Style *ts = _style_by_key_find(o, key);
|
||||||
|
|
||||||
|
return ts->style_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define _STYLE_USER "_style_user"
|
||||||
EAPI void
|
EAPI void
|
||||||
evas_object_textblock_style_user_push(Eo *eo_obj, Evas_Textblock_Style *ts)
|
evas_object_textblock_style_user_push(Eo *eo_obj, Evas_Textblock_Style *ts)
|
||||||
{
|
{
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
|
||||||
evas_object_async_block(obj);
|
|
||||||
Efl_Canvas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
|
Efl_Canvas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
|
||||||
_textblock_style_generic_set(eo_obj, ts, &(o->style_user));
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static void
|
|
||||||
_efl_canvas_text_style_user_push(Eo *eo_obj, Efl_Canvas_Text_Data *o, const char *style)
|
|
||||||
{
|
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
||||||
evas_object_async_block(obj);
|
evas_object_async_block(obj);
|
||||||
|
|
||||||
if (!o->current_user_style)
|
Evas_Textblock_Style *old_ts = _style_by_key_find(o, _STYLE_USER);
|
||||||
|
|
||||||
|
if (old_ts)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Style *ts = evas_textblock_style_new();
|
efl_canvas_text_style_set(eo_obj, _STYLE_USER, NULL);
|
||||||
evas_textblock_style_set(ts, style);
|
|
||||||
_textblock_style_generic_set(eo_obj, (Evas_Textblock_Style *) ts, &(o->style_user));
|
|
||||||
o->current_user_style = ts;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
evas_textblock_style_set(o->current_user_style, style);
|
|
||||||
}
|
}
|
||||||
|
Evas_Textblock_Style *tmp = NULL;
|
||||||
|
_textblock_style_generic_set(eo_obj, ts, &tmp);
|
||||||
|
ts->key = eina_stringshare_add(_STYLE_USER);
|
||||||
|
o->styles = eina_list_append(o->styles, ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI const Evas_Textblock_Style*
|
EAPI const Evas_Textblock_Style*
|
||||||
|
@ -6665,13 +6743,8 @@ evas_object_textblock_style_user_peek(const Eo *eo_obj)
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
||||||
evas_object_async_block(obj);
|
evas_object_async_block(obj);
|
||||||
Efl_Canvas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
|
Efl_Canvas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
|
||||||
return o->style_user;
|
Evas_Textblock_Style *ts = _style_by_key_find(o, _STYLE_USER);
|
||||||
}
|
return ts;
|
||||||
|
|
||||||
EOLIAN static const char *
|
|
||||||
_efl_canvas_text_style_user_peek(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
|
|
||||||
{
|
|
||||||
return o->style_user ? o->style_user->style_text : NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
|
@ -6679,30 +6752,14 @@ evas_object_textblock_style_user_pop(Eo *eo_obj)
|
||||||
{
|
{
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
||||||
evas_object_async_block(obj);
|
evas_object_async_block(obj);
|
||||||
|
|
||||||
|
efl_canvas_text_style_set(eo_obj, _STYLE_USER, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
evas_object_textblock_replace_char_set(Efl_Canvas_Text *eo_obj, const char *ch)
|
||||||
|
{
|
||||||
Efl_Canvas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
|
Efl_Canvas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
|
||||||
_textblock_style_generic_set(eo_obj, NULL, &(o->style_user));
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static void
|
|
||||||
_efl_canvas_text_style_user_pop(Eo *eo_obj, Efl_Canvas_Text_Data *o)
|
|
||||||
{
|
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
|
||||||
evas_object_async_block(obj);
|
|
||||||
_textblock_style_generic_set(eo_obj, NULL, &(o->style_user));
|
|
||||||
if (o->current_user_style)
|
|
||||||
{
|
|
||||||
// XXX: remember that the current implementation of user style is still
|
|
||||||
// lacking as we don't really manage a stack.
|
|
||||||
// Until that's fixed, we are treating it as there can be only one
|
|
||||||
// user style.
|
|
||||||
evas_textblock_style_free(o->current_user_style);
|
|
||||||
o->current_user_style = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static void
|
|
||||||
_efl_canvas_text_replace_char_set(Eo *eo_obj, Efl_Canvas_Text_Data *o, const char *ch)
|
|
||||||
{
|
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
||||||
evas_object_async_block(obj);
|
evas_object_async_block(obj);
|
||||||
if (o->repch) eina_stringshare_del(o->repch);
|
if (o->repch) eina_stringshare_del(o->repch);
|
||||||
|
@ -6712,6 +6769,7 @@ _efl_canvas_text_replace_char_set(Eo *eo_obj, Efl_Canvas_Text_Data *o, const cha
|
||||||
_evas_textblock_changed(o, eo_obj);
|
_evas_textblock_changed(o, eo_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
_efl_canvas_text_legacy_newline_set(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o, Eina_Bool mode)
|
_efl_canvas_text_legacy_newline_set(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o, Eina_Bool mode)
|
||||||
{
|
{
|
||||||
|
@ -6731,9 +6789,16 @@ _efl_canvas_text_legacy_newline_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data
|
||||||
return o->legacy_newline;
|
return o->legacy_newline;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static Eina_Bool
|
||||||
_efl_canvas_text_valign_set(Eo *eo_obj, Efl_Canvas_Text_Data *o, double align)
|
_efl_canvas_text_is_empty_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
|
||||||
{
|
{
|
||||||
|
return !o->text_nodes || (eina_ustrbuf_length_get(o->text_nodes->unicode) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
evas_object_textblock_valign_set(Efl_Canvas_Text *eo_obj, double align)
|
||||||
|
{
|
||||||
|
Efl_Canvas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
||||||
evas_object_async_block(obj);
|
evas_object_async_block(obj);
|
||||||
if (align < 0.0) align = 0.0;
|
if (align < 0.0) align = 0.0;
|
||||||
|
@ -6743,9 +6808,10 @@ _efl_canvas_text_valign_set(Eo *eo_obj, Efl_Canvas_Text_Data *o, double align)
|
||||||
_evas_textblock_changed(o, eo_obj);
|
_evas_textblock_changed(o, eo_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static double
|
EAPI double
|
||||||
_efl_canvas_text_valign_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
|
evas_object_textblock_valign_get(const Efl_Canvas_Text *obj)
|
||||||
{
|
{
|
||||||
|
Efl_Canvas_Text_Data *o = eo_data_scope_get(obj, MY_CLASS);
|
||||||
return o->valign;
|
return o->valign;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6763,9 +6829,10 @@ _efl_canvas_text_bidi_delimiters_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Dat
|
||||||
return o->bidi_delimiters;
|
return o->bidi_delimiters;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static const char*
|
EAPI const char *
|
||||||
_efl_canvas_text_replace_char_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
|
evas_object_textblock_replace_char_get(const Efl_Canvas_Text *obj)
|
||||||
{
|
{
|
||||||
|
Efl_Canvas_Text_Data *o = eo_data_scope_get(obj, MY_CLASS);
|
||||||
return o->repch;
|
return o->repch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10126,26 +10193,32 @@ evas_textblock_cursor_format_append(Evas_Textblock_Cursor *cur_obj, const char *
|
||||||
return _evas_textblock_cursor_format_append(cur, format, NULL, EINA_FALSE);
|
return _evas_textblock_cursor_format_append(cur, format, NULL, EINA_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
static Eina_Bool
|
||||||
evas_textblock_cursor_format_prepend(Evas_Textblock_Cursor *cur_obj, const char *format)
|
_evas_textblock_cursor_format_prepend(Efl_Canvas_Text_Cursor_Data *cur, const char *format)
|
||||||
{
|
{
|
||||||
Eina_Bool is_visible;
|
Eina_Bool is_visible;
|
||||||
|
|
||||||
Efl_Canvas_Text_Cursor_Data *cur = eo_data_scope_get(cur_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
|
|
||||||
if (!cur) return EINA_FALSE;
|
if (!cur) return EINA_FALSE;
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
|
||||||
evas_object_async_block(obj);
|
evas_object_async_block(obj);
|
||||||
/* append is essentially prepend without advancing */
|
/* append is essentially prepend without advancing */
|
||||||
is_visible = evas_textblock_cursor_format_append(cur_obj, format);
|
is_visible = _evas_textblock_cursor_format_append(cur, format, NULL, EINA_FALSE);
|
||||||
if (is_visible)
|
if (is_visible)
|
||||||
{
|
{
|
||||||
/* Advance after the replacement char */
|
/* Advance after the replacement char */
|
||||||
evas_textblock_cursor_char_next(cur_obj);
|
_evas_textblock_cursor_char_next(cur);
|
||||||
}
|
}
|
||||||
|
|
||||||
return is_visible;
|
return is_visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
evas_textblock_cursor_format_prepend(Evas_Textblock_Cursor *cur_obj, const char *format)
|
||||||
|
{
|
||||||
|
Efl_Canvas_Text_Cursor_Data *cur = eo_data_scope_get(cur_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
|
||||||
|
return _evas_textblock_cursor_format_prepend(cur, format);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_evas_textblock_cursor_char_delete(Efl_Canvas_Text_Cursor_Data *cur)
|
_evas_textblock_cursor_char_delete(Efl_Canvas_Text_Cursor_Data *cur)
|
||||||
{
|
{
|
||||||
|
@ -10647,6 +10720,7 @@ _evas_textblock_cursor_range_text_get(const Efl_Canvas_Text_Cursor_Data *cur1, c
|
||||||
return NULL; /* Not yet supported */
|
return NULL; /* Not yet supported */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI char *
|
EAPI char *
|
||||||
evas_textblock_cursor_range_text_get(const Efl_Canvas_Text_Cursor *cur1_obj, const Evas_Textblock_Cursor *cur2_obj, Evas_Textblock_Text_Type format)
|
evas_textblock_cursor_range_text_get(const Efl_Canvas_Text_Cursor *cur1_obj, const Evas_Textblock_Cursor *cur2_obj, Evas_Textblock_Text_Type format)
|
||||||
{
|
{
|
||||||
|
@ -10655,6 +10729,17 @@ evas_textblock_cursor_range_text_get(const Efl_Canvas_Text_Cursor *cur1_obj, con
|
||||||
return _evas_textblock_cursor_range_text_get(cur1, cur2, format);
|
return _evas_textblock_cursor_range_text_get(cur1, cur2, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static EOLIAN char *
|
||||||
|
_efl_canvas_text_range_text_get(Eo *eo_obj EINA_UNUSED,
|
||||||
|
Efl_Canvas_Text_Data *pd EINA_UNUSED,
|
||||||
|
const Efl_Canvas_Text_Cursor *cur1_obj,
|
||||||
|
const Evas_Textblock_Cursor *cur2_obj)
|
||||||
|
{
|
||||||
|
const Efl_Canvas_Text_Cursor_Data *cur1 = eo_data_scope_get(cur1_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
|
||||||
|
const Efl_Canvas_Text_Cursor_Data *cur2 = eo_data_scope_get(cur2_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
|
||||||
|
return _evas_textblock_cursor_range_text_get(cur1, cur2, EVAS_TEXTBLOCK_TEXT_PLAIN);
|
||||||
|
}
|
||||||
|
|
||||||
EAPI const char *
|
EAPI const char *
|
||||||
evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur_obj)
|
evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur_obj)
|
||||||
{
|
{
|
||||||
|
@ -12048,15 +12133,14 @@ evas_textblock_cursor_range_geometry_get(const Efl_Canvas_Text_Cursor *cur1_obj,
|
||||||
return rects;
|
return rects;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
static Eina_Bool
|
||||||
evas_textblock_cursor_format_item_geometry_get(const Evas_Textblock_Cursor *cur_obj, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
|
_evas_textblock_cursor_format_item_geometry_get(const Efl_Canvas_Text_Cursor_Data *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
|
||||||
{
|
{
|
||||||
Evas_Object_Textblock_Line *ln = NULL;
|
Evas_Object_Textblock_Line *ln = NULL;
|
||||||
Evas_Object_Textblock_Format_Item *fi;
|
Evas_Object_Textblock_Format_Item *fi;
|
||||||
Evas_Object_Textblock_Item *it = NULL;
|
Evas_Object_Textblock_Item *it = NULL;
|
||||||
Evas_Coord x, y, w, h;
|
Evas_Coord x, y, w, h;
|
||||||
|
|
||||||
Efl_Canvas_Text_Cursor_Data *cur = eo_data_scope_get(cur_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
|
|
||||||
if (!cur || !_evas_textblock_cursor_format_is_visible_get(cur)) return EINA_FALSE;
|
if (!cur || !_evas_textblock_cursor_format_is_visible_get(cur)) return EINA_FALSE;
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
|
||||||
evas_object_async_block(obj);
|
evas_object_async_block(obj);
|
||||||
|
@ -12080,6 +12164,13 @@ evas_textblock_cursor_format_item_geometry_get(const Evas_Textblock_Cursor *cur_
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
evas_textblock_cursor_format_item_geometry_get(const Evas_Textblock_Cursor *cur_obj, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
|
||||||
|
{
|
||||||
|
Efl_Canvas_Text_Cursor_Data *cur = eo_data_scope_get(cur_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
|
||||||
|
return _evas_textblock_cursor_format_item_geometry_get(cur, cx, cy, cw, ch);
|
||||||
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur_obj)
|
evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur_obj)
|
||||||
{
|
{
|
||||||
|
@ -12558,12 +12649,6 @@ evas_object_textblock_free(Evas_Object *eo_obj)
|
||||||
_dicts_hyphen_detach(eo_obj);
|
_dicts_hyphen_detach(eo_obj);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* free the style if exists */
|
|
||||||
if (o->current_style)
|
|
||||||
{
|
|
||||||
evas_textblock_style_free(o->current_style);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -13447,9 +13532,9 @@ _efl_canvas_text_cursor_text_append(Efl_Canvas_Text_Cursor_Data *cur,
|
||||||
|
|
||||||
/* We make use of prepending the cursor, but this needs to return the current
|
/* We make use of prepending the cursor, but this needs to return the current
|
||||||
* position's cursor, so we use a temporary one. */
|
* position's cursor, so we use a temporary one. */
|
||||||
Evas_Textblock_Cursor *cur2_obj = evas_object_textblock_cursor_new (cur->obj);
|
Efl_Canvas_Text_Cursor_Data cur2;
|
||||||
Efl_Canvas_Text_Cursor_Data *cur2 = eo_data_scope_get(cur2_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
|
_evas_textblock_cursor_init(&cur2, cur->obj);
|
||||||
_evas_textblock_cursor_copy(cur2, cur);
|
_evas_textblock_cursor_copy(&cur2, cur);
|
||||||
|
|
||||||
Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
|
||||||
evas_object_async_block(obj);
|
evas_object_async_block(obj);
|
||||||
|
@ -13472,8 +13557,8 @@ _efl_canvas_text_cursor_text_append(Efl_Canvas_Text_Cursor_Data *cur,
|
||||||
|
|
||||||
if (format)
|
if (format)
|
||||||
{
|
{
|
||||||
len += _prepend_text_run2(cur2, text, off);
|
len += _prepend_text_run2(&cur2, text, off);
|
||||||
if (evas_textblock_cursor_format_prepend(cur2_obj, format))
|
if (_evas_textblock_cursor_format_prepend(&cur2, format))
|
||||||
{
|
{
|
||||||
len++;
|
len++;
|
||||||
}
|
}
|
||||||
|
@ -13481,8 +13566,7 @@ _efl_canvas_text_cursor_text_append(Efl_Canvas_Text_Cursor_Data *cur,
|
||||||
}
|
}
|
||||||
off += n;
|
off += n;
|
||||||
}
|
}
|
||||||
len += _prepend_text_run2(cur2, text, off);
|
len += _prepend_text_run2(&cur2, text, off);
|
||||||
eo_del(cur2_obj);
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13490,13 +13574,11 @@ EOLIAN static void
|
||||||
_efl_canvas_text_efl_text_text_set(Eo *eo_obj, Efl_Canvas_Text_Data *o EINA_UNUSED,
|
_efl_canvas_text_efl_text_text_set(Eo *eo_obj, Efl_Canvas_Text_Data *o EINA_UNUSED,
|
||||||
const char *text)
|
const char *text)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Cursor *cur_obj;
|
Efl_Canvas_Text_Cursor_Data cur;
|
||||||
|
|
||||||
evas_object_textblock_text_markup_set(eo_obj, "");
|
evas_object_textblock_text_markup_set(eo_obj, "");
|
||||||
cur_obj = evas_object_textblock_cursor_new(eo_obj);
|
_evas_textblock_cursor_init(&cur, eo_obj);
|
||||||
Efl_Canvas_Text_Cursor_Data *cur = eo_data_scope_get(cur_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
|
_efl_canvas_text_cursor_text_append(&cur, text);
|
||||||
_efl_canvas_text_cursor_text_append(cur, text);
|
|
||||||
eo_del(cur_obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static const char *
|
EOLIAN static const char *
|
||||||
|
@ -13861,7 +13943,7 @@ _efl_canvas_text_annotation_insert(Eo *eo_obj, Efl_Canvas_Text_Data *o,
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static Eina_Iterator *
|
EOLIAN static Eina_Iterator *
|
||||||
_efl_canvas_text_annotation_in_range_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED,
|
_efl_canvas_text_range_annotations_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED,
|
||||||
const Evas_Textblock_Cursor *start_obj, const Evas_Textblock_Cursor *end_obj)
|
const Evas_Textblock_Cursor *start_obj, const Evas_Textblock_Cursor *end_obj)
|
||||||
{
|
{
|
||||||
Eina_List *lst = NULL;
|
Eina_List *lst = NULL;
|
||||||
|
@ -13906,7 +13988,7 @@ _efl_canvas_text_cursor_object_item_annotation_get(Eo *cur_obj EINA_UNUSED,
|
||||||
Eina_Iterator *it;
|
Eina_Iterator *it;
|
||||||
Efl_Canvas_Text_Annotation *data, *ret = NULL;
|
Efl_Canvas_Text_Annotation *data, *ret = NULL;
|
||||||
|
|
||||||
it = efl_canvas_text_annotation_in_range_get(cur->obj,
|
it = efl_canvas_text_range_annotations_get(cur->obj,
|
||||||
cur_obj, cur_obj);
|
cur_obj, cur_obj);
|
||||||
EINA_ITERATOR_FOREACH(it, data)
|
EINA_ITERATOR_FOREACH(it, data)
|
||||||
{
|
{
|
||||||
|
@ -13920,6 +14002,21 @@ _efl_canvas_text_cursor_object_item_annotation_get(Eo *cur_obj EINA_UNUSED,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EOLIAN static Eina_Bool
|
||||||
|
_efl_canvas_text_object_item_geometry_get(Eo *eo_obj, Efl_Canvas_Text_Data *o EINA_UNUSED,
|
||||||
|
const Efl_Canvas_Text_Annotation *an, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
|
||||||
|
{
|
||||||
|
Efl_Canvas_Text_Cursor_Data cur;
|
||||||
|
|
||||||
|
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
|
||||||
|
evas_object_async_block(obj);
|
||||||
|
_relayout_if_needed(eo_obj, o);
|
||||||
|
|
||||||
|
_evas_textblock_cursor_init(&cur, eo_obj);
|
||||||
|
_textblock_cursor_pos_at_fnode_set(eo_obj, &cur, an->start_node);
|
||||||
|
return _evas_textblock_cursor_format_item_geometry_get(&cur, cx, cy, cw, ch);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -860,6 +860,54 @@ EAPI void evas_textblock_cursor_free(Evas_Textblock_Cursor *cur);
|
||||||
|
|
||||||
EAPI int evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *_text);
|
EAPI int evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *_text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The "replacement character" to use for the given textblock object.
|
||||||
|
*
|
||||||
|
* @param[in] ch The charset name.
|
||||||
|
*
|
||||||
|
* @ingroup Efl_Canvas_Text
|
||||||
|
*/
|
||||||
|
EAPI void evas_object_textblock_replace_char_set(Evas_Object *obj, const char *ch);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The "replacement character" to use for the given textblock object.
|
||||||
|
*
|
||||||
|
* @return The charset name.
|
||||||
|
*
|
||||||
|
* @ingroup Efl_Canvas_Text
|
||||||
|
*/
|
||||||
|
EAPI const char *evas_object_textblock_replace_char_get(const Evas_Object *obj);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The vertical alignment of text within the textblock object as a
|
||||||
|
* whole.
|
||||||
|
*
|
||||||
|
* Normally alignment is 0.0 (top of object). Values given should be between
|
||||||
|
* 0.0 and 1.0 (1.0 bottom of object, 0.5 being vertically centered etc.).
|
||||||
|
*
|
||||||
|
* @param[in] align The alignment set for the object.
|
||||||
|
*
|
||||||
|
* @since 1.1
|
||||||
|
*
|
||||||
|
* @ingroup Efl_Canvas_Text
|
||||||
|
*/
|
||||||
|
EAPI void evas_object_textblock_valign_set(Evas_Object *obj, double align);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The vertical alignment of text within the textblock object as a
|
||||||
|
* whole.
|
||||||
|
*
|
||||||
|
* Normally alignment is 0.0 (top of object). Values given should be between
|
||||||
|
* 0.0 and 1.0 (1.0 bottom of object, 0.5 being vertically centered etc.).
|
||||||
|
*
|
||||||
|
* @return The alignment set for the object.
|
||||||
|
*
|
||||||
|
* @since 1.1
|
||||||
|
*
|
||||||
|
* @ingroup Efl_Canvas_Text
|
||||||
|
*/
|
||||||
|
EAPI double evas_object_textblock_valign_get(const Evas_Object *obj);
|
||||||
|
|
||||||
#include "canvas/efl_canvas_text_cursor.eo.legacy.h"
|
#include "canvas/efl_canvas_text_cursor.eo.legacy.h"
|
||||||
#include "canvas/efl_canvas_text.eo.legacy.h"
|
#include "canvas/efl_canvas_text.eo.legacy.h"
|
||||||
/**
|
/**
|
|
@ -4058,7 +4058,7 @@ _test_check_annotation(Evas_Object *tb,
|
||||||
evas_textblock_cursor_pos_set(end, end_pos);
|
evas_textblock_cursor_pos_set(end, end_pos);
|
||||||
|
|
||||||
Eina_Iterator *it =
|
Eina_Iterator *it =
|
||||||
efl_canvas_text_annotation_in_range_get(tb, start, end);
|
efl_canvas_text_range_annotations_get(tb, start, end);
|
||||||
|
|
||||||
evas_textblock_cursor_free(start);
|
evas_textblock_cursor_free(start);
|
||||||
evas_textblock_cursor_free(end);
|
evas_textblock_cursor_free(end);
|
||||||
|
@ -4277,51 +4277,34 @@ START_TEST(efl_canvas_text_style)
|
||||||
{
|
{
|
||||||
START_TB_TEST();
|
START_TB_TEST();
|
||||||
|
|
||||||
Eo *start, *end;
|
|
||||||
|
|
||||||
Evas_Coord w;
|
Evas_Coord w;
|
||||||
Evas_Coord bw;
|
Evas_Coord bw;
|
||||||
const char *buf;
|
const char *buf;
|
||||||
|
|
||||||
buf =
|
buf = "DEFAULT='font=Sans font_size=12 color=#fff wrap=word'";
|
||||||
"DEFAULT='font=Sans font_size=12 color=#fff wrap=word text_class=entry'"
|
|
||||||
"br='\n'"
|
|
||||||
"ps='ps'"
|
|
||||||
"tab='\t'";
|
|
||||||
|
|
||||||
efl_canvas_text_style_set(tb, buf);
|
efl_canvas_text_style_set(tb, buf);
|
||||||
ck_assert_str_eq(efl_canvas_text_style_get(tb), buf);
|
ck_assert_str_eq(efl_canvas_text_style_get(tb), buf);
|
||||||
|
|
||||||
buf =
|
buf = "font=Sans font_size=12 color=#fff";
|
||||||
"DEFAULT='font=Sans font_size=12 color=#fff'"
|
|
||||||
"c='color=#000'"
|
|
||||||
"ps='br'"
|
|
||||||
"tab='\t'";
|
|
||||||
|
|
||||||
efl_canvas_text_style_set(tb, buf);
|
efl_canvas_text_style_set(tb, buf);
|
||||||
ck_assert_str_eq(efl_canvas_text_style_get(tb), buf);
|
ck_assert_str_eq(efl_canvas_text_style_get(tb), buf);
|
||||||
|
|
||||||
efl_text_set(tb, "hello world");
|
efl_text_set(tb, "hello world");
|
||||||
start = evas_object_textblock_cursor_new(tb);
|
|
||||||
end = evas_object_textblock_cursor_new(tb);
|
|
||||||
evas_textblock_cursor_pos_set(start, 0);
|
|
||||||
evas_textblock_cursor_pos_set(end, 4);
|
|
||||||
|
|
||||||
efl_canvas_text_annotation_insert(tb, start, end, "sz");
|
buf = "font=Sans font_size=12 color=#fff";
|
||||||
buf =
|
|
||||||
"DEFAULT='font=Sans font_size=12 color=#fff'";
|
|
||||||
efl_canvas_text_style_set(tb, buf);
|
efl_canvas_text_style_set(tb, buf);
|
||||||
|
|
||||||
evas_object_textblock_size_native_get(tb, &bw, NULL);
|
evas_object_textblock_size_native_get(tb, &bw, NULL);
|
||||||
|
|
||||||
buf =
|
buf = "font=Sans font_size=16 color=#fff";
|
||||||
"DEFAULT='font=Sans font_size=16 color=#fff'";
|
|
||||||
efl_canvas_text_style_set(tb, buf);
|
efl_canvas_text_style_set(tb, buf);
|
||||||
evas_object_textblock_size_native_get(tb, &w, NULL);
|
evas_object_textblock_size_native_get(tb, &w, NULL);
|
||||||
ck_assert_int_gt(w, bw);
|
ck_assert_int_gt(w, bw);
|
||||||
|
|
||||||
bw = w;
|
bw = w;
|
||||||
buf = "DEFAULT='left_margin=4 right_margin=4'";
|
buf = "left_margin=4 right_margin=4";
|
||||||
efl_canvas_text_style_user_push(tb, buf);
|
efl_canvas_text_style_user_push(tb, buf);
|
||||||
ck_assert_str_eq(efl_canvas_text_style_user_peek(tb), buf);
|
ck_assert_str_eq(efl_canvas_text_style_user_peek(tb), buf);
|
||||||
evas_object_textblock_size_native_get(tb, &w, NULL);
|
evas_object_textblock_size_native_get(tb, &w, NULL);
|
||||||
|
|
Loading…
Reference in New Issue