2017-06-08 03:07:12 -07:00
|
|
|
import efl_text_types;
|
2016-05-24 06:11:03 -07:00
|
|
|
|
2019-02-14 08:37:02 -08:00
|
|
|
class @beta Efl.Canvas.Text extends Efl.Canvas.Object implements Efl.Text,
|
2018-04-06 04:30:40 -07:00
|
|
|
Efl.Canvas.Filter.Internal, Efl.Text_Font,
|
Efl.Text.Cursor
Summary:
Implementation of new cursor text object.
This Patch Contains :
1- Remove Efl.Text.Cursor & Efl.Text_Markup_Interactive interfaces and replace them with one Class Efl.Text.Cursor
=> there are some modifications on cursor methods
2- Update all related classes to use Efl.Text.Cursor object instead of the old interfaces
3- If class uses Efl.Text_Cursor_Cursor (handle), mainly annotation it will stay as it is until we update other annotations into attribute_factory
4- Add main cursor property into efl.text.interactive
5- Add cursor_new method in efl.ui.text (I think we may move it into efl.text.interactive interface)
There still some parts that need discussion: especially cursor movement functionality, I prefer to move function with Enum, instead of special function for each movement.
```
enum @beta Efl.Text.Cursor_Move_Type
{
[[Text cursor movement types]]
char_next, [[Advances to the next character]]
char_prev, [[Advances to the previous character]]
cluster_next, [[Advances to the next grapheme cluster]]
cluster_prev, [[Advances to the previous grapheme cluster]]
paragraph_start, [[Advances to the first character in this paragraph]]
paragraph_end, [[Advances to the last character in this paragraph]]
word_start, [[Advance to current word start]]
word_end, [[Advance to current word end]]
line_start, [[Advance to current line first character]]
line_end, [[Advance to current line last character]]
paragraph_first, [[Advance to current paragraph first character]]
paragraph_last, [[Advance to current paragraph last character]]
paragraph_next, [[Advances to the start of the next text node]]
paragraph_prev [[Advances to the end of the previous text node]]
}
move {
[[Move the cursor]]
params {
@in type: Efl.Text.Cursor_Move_Type; [[The type of movement]]
}
return: bool; [[True if actually moved]]
}
```
or old way:
```
char_next {
[[Advances to the next character]]
// FIXME: Make the number of characters we moved by? Useful for all the other functions
return: bool; [[True if actually moved]]
}
char_prev {
[[Advances to the previous character]]
return: bool; [[True if actually moved]]
}
char_delete {
[[Deletes a single character from position pointed by given cursor.]]
}
cluster_next {
[[Advances to the next grapheme cluster]]
return: bool; [[True if actually moved]]
}
cluster_prev {
[[Advances to the previous grapheme cluster]]
return: bool; [[True if actually moved]]
}
// FIXME: paragraph_end is inconsistent with word_end. The one goes to the last character and the other after the last character.
paragraph_start {
[[Advances to the first character in this paragraph]]
return: bool; [[True if actually moved]]
}
paragraph_end {
[[Advances to the last character in this paragraph]]
return: bool; [[True if actually moved]]
}
word_start {
[[Advance to current word start]]
return: bool; [[True if actually moved]]
}
word_end {
[[Advance to current word end]]
return: bool; [[True if actually moved]]
}
line_start {
[[Advance to current line first character]]
return: bool; [[True if actually moved]]
}
line_end {
[[Advance to current line last character]]
return: bool; [[True if actually moved]]
}
paragraph_first {
[[Advance to current paragraph first character]]
return: bool; [[True if actually moved]]
}
paragraph_last {
[[Advance to current paragraph last character]]
return: bool; [[True if actually moved]]
}
paragraph_next {
[[Advances to the start of the next text node]]
return: bool; [[True if actually moved]]
}
paragraph_prev {
[[Advances to the end of the previous text node]]
return: bool; [[True if actually moved]]
}
```
Reviewers: woohyun, tasn, segfaultxavi
Reviewed By: woohyun
Subscribers: a.srour, bu5hm4n, segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10542
2019-11-22 00:35:54 -08:00
|
|
|
Efl.Text_Style, Efl.Text_Format,
|
Efl.Text.Attribute_Factory
Summary:
Implementation of new Efl.Text.Attribute_Factory class which replace the annotation interface.
Currently, we have two public methods:
```
void efl_text_attribute_factory_attribute_insert(const Efl_Text_Cursor *start, const Efl_Text_Cursor *end, const char *format)
unsigned int efl_text_attribute_factory_attribute_clear(const Efl_Text_Cursor *start, const Efl_Text_Cursor *end);
```
Other methods will be internal methods, for the time being, we will redesign internal methods
Reviewers: woohyun, tasn, segfaultxavi, bu5hm4n, zmike
Subscribers: zmike, q66, cedric, segfaultxavi, bu5hm4n, a.srour, #committers, #reviewers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10646
2019-11-26 20:04:31 -08:00
|
|
|
Efl.Text_Markup, Efl.Ui.I18n
|
2016-05-24 06:11:03 -07:00
|
|
|
{
|
2019-11-28 02:03:55 -08:00
|
|
|
[[This is the Canvas-level text class. This class only takes care of rendering text,
|
|
|
|
if you need user interaction consider the classes in $Efl.Ui.]]
|
2016-05-24 06:11:03 -07:00
|
|
|
methods {
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
@property is_empty {
|
2019-11-28 02:03:55 -08:00
|
|
|
[[Whether the object is empty (no text) or not.
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
]]
|
|
|
|
get {
|
|
|
|
}
|
|
|
|
values {
|
2019-11-28 02:03:55 -08:00
|
|
|
is_empty: bool; [[$true if empty.]]
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
}
|
|
|
|
}
|
Efl.Text.Cursor
Summary:
Implementation of new cursor text object.
This Patch Contains :
1- Remove Efl.Text.Cursor & Efl.Text_Markup_Interactive interfaces and replace them with one Class Efl.Text.Cursor
=> there are some modifications on cursor methods
2- Update all related classes to use Efl.Text.Cursor object instead of the old interfaces
3- If class uses Efl.Text_Cursor_Cursor (handle), mainly annotation it will stay as it is until we update other annotations into attribute_factory
4- Add main cursor property into efl.text.interactive
5- Add cursor_new method in efl.ui.text (I think we may move it into efl.text.interactive interface)
There still some parts that need discussion: especially cursor movement functionality, I prefer to move function with Enum, instead of special function for each movement.
```
enum @beta Efl.Text.Cursor_Move_Type
{
[[Text cursor movement types]]
char_next, [[Advances to the next character]]
char_prev, [[Advances to the previous character]]
cluster_next, [[Advances to the next grapheme cluster]]
cluster_prev, [[Advances to the previous grapheme cluster]]
paragraph_start, [[Advances to the first character in this paragraph]]
paragraph_end, [[Advances to the last character in this paragraph]]
word_start, [[Advance to current word start]]
word_end, [[Advance to current word end]]
line_start, [[Advance to current line first character]]
line_end, [[Advance to current line last character]]
paragraph_first, [[Advance to current paragraph first character]]
paragraph_last, [[Advance to current paragraph last character]]
paragraph_next, [[Advances to the start of the next text node]]
paragraph_prev [[Advances to the end of the previous text node]]
}
move {
[[Move the cursor]]
params {
@in type: Efl.Text.Cursor_Move_Type; [[The type of movement]]
}
return: bool; [[True if actually moved]]
}
```
or old way:
```
char_next {
[[Advances to the next character]]
// FIXME: Make the number of characters we moved by? Useful for all the other functions
return: bool; [[True if actually moved]]
}
char_prev {
[[Advances to the previous character]]
return: bool; [[True if actually moved]]
}
char_delete {
[[Deletes a single character from position pointed by given cursor.]]
}
cluster_next {
[[Advances to the next grapheme cluster]]
return: bool; [[True if actually moved]]
}
cluster_prev {
[[Advances to the previous grapheme cluster]]
return: bool; [[True if actually moved]]
}
// FIXME: paragraph_end is inconsistent with word_end. The one goes to the last character and the other after the last character.
paragraph_start {
[[Advances to the first character in this paragraph]]
return: bool; [[True if actually moved]]
}
paragraph_end {
[[Advances to the last character in this paragraph]]
return: bool; [[True if actually moved]]
}
word_start {
[[Advance to current word start]]
return: bool; [[True if actually moved]]
}
word_end {
[[Advance to current word end]]
return: bool; [[True if actually moved]]
}
line_start {
[[Advance to current line first character]]
return: bool; [[True if actually moved]]
}
line_end {
[[Advance to current line last character]]
return: bool; [[True if actually moved]]
}
paragraph_first {
[[Advance to current paragraph first character]]
return: bool; [[True if actually moved]]
}
paragraph_last {
[[Advance to current paragraph last character]]
return: bool; [[True if actually moved]]
}
paragraph_next {
[[Advances to the start of the next text node]]
return: bool; [[True if actually moved]]
}
paragraph_prev {
[[Advances to the end of the previous text node]]
return: bool; [[True if actually moved]]
}
```
Reviewers: woohyun, tasn, segfaultxavi
Reviewed By: woohyun
Subscribers: a.srour, bu5hm4n, segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10542
2019-11-22 00:35:54 -08:00
|
|
|
cursor_add {
|
2019-11-28 02:03:55 -08:00
|
|
|
[[Adds an existing cursor to the text object.
|
2019-11-28 02:08:11 -08:00
|
|
|
If the cursor already belonged to another text object it will be reassigned to the new one.
|
|
|
|
It is typically more convenient to obtain a cursor directly from the text object using @.cursor_create.
|
|
|
|
]]
|
Efl.Text.Cursor
Summary:
Implementation of new cursor text object.
This Patch Contains :
1- Remove Efl.Text.Cursor & Efl.Text_Markup_Interactive interfaces and replace them with one Class Efl.Text.Cursor
=> there are some modifications on cursor methods
2- Update all related classes to use Efl.Text.Cursor object instead of the old interfaces
3- If class uses Efl.Text_Cursor_Cursor (handle), mainly annotation it will stay as it is until we update other annotations into attribute_factory
4- Add main cursor property into efl.text.interactive
5- Add cursor_new method in efl.ui.text (I think we may move it into efl.text.interactive interface)
There still some parts that need discussion: especially cursor movement functionality, I prefer to move function with Enum, instead of special function for each movement.
```
enum @beta Efl.Text.Cursor_Move_Type
{
[[Text cursor movement types]]
char_next, [[Advances to the next character]]
char_prev, [[Advances to the previous character]]
cluster_next, [[Advances to the next grapheme cluster]]
cluster_prev, [[Advances to the previous grapheme cluster]]
paragraph_start, [[Advances to the first character in this paragraph]]
paragraph_end, [[Advances to the last character in this paragraph]]
word_start, [[Advance to current word start]]
word_end, [[Advance to current word end]]
line_start, [[Advance to current line first character]]
line_end, [[Advance to current line last character]]
paragraph_first, [[Advance to current paragraph first character]]
paragraph_last, [[Advance to current paragraph last character]]
paragraph_next, [[Advances to the start of the next text node]]
paragraph_prev [[Advances to the end of the previous text node]]
}
move {
[[Move the cursor]]
params {
@in type: Efl.Text.Cursor_Move_Type; [[The type of movement]]
}
return: bool; [[True if actually moved]]
}
```
or old way:
```
char_next {
[[Advances to the next character]]
// FIXME: Make the number of characters we moved by? Useful for all the other functions
return: bool; [[True if actually moved]]
}
char_prev {
[[Advances to the previous character]]
return: bool; [[True if actually moved]]
}
char_delete {
[[Deletes a single character from position pointed by given cursor.]]
}
cluster_next {
[[Advances to the next grapheme cluster]]
return: bool; [[True if actually moved]]
}
cluster_prev {
[[Advances to the previous grapheme cluster]]
return: bool; [[True if actually moved]]
}
// FIXME: paragraph_end is inconsistent with word_end. The one goes to the last character and the other after the last character.
paragraph_start {
[[Advances to the first character in this paragraph]]
return: bool; [[True if actually moved]]
}
paragraph_end {
[[Advances to the last character in this paragraph]]
return: bool; [[True if actually moved]]
}
word_start {
[[Advance to current word start]]
return: bool; [[True if actually moved]]
}
word_end {
[[Advance to current word end]]
return: bool; [[True if actually moved]]
}
line_start {
[[Advance to current line first character]]
return: bool; [[True if actually moved]]
}
line_end {
[[Advance to current line last character]]
return: bool; [[True if actually moved]]
}
paragraph_first {
[[Advance to current paragraph first character]]
return: bool; [[True if actually moved]]
}
paragraph_last {
[[Advance to current paragraph last character]]
return: bool; [[True if actually moved]]
}
paragraph_next {
[[Advances to the start of the next text node]]
return: bool; [[True if actually moved]]
}
paragraph_prev {
[[Advances to the end of the previous text node]]
return: bool; [[True if actually moved]]
}
```
Reviewers: woohyun, tasn, segfaultxavi
Reviewed By: woohyun
Subscribers: a.srour, bu5hm4n, segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10542
2019-11-22 00:35:54 -08:00
|
|
|
params {
|
2019-11-28 02:03:55 -08:00
|
|
|
cursor: Efl.Text.Cursor; [[The text cursor to use.]]
|
Efl.Text.Cursor
Summary:
Implementation of new cursor text object.
This Patch Contains :
1- Remove Efl.Text.Cursor & Efl.Text_Markup_Interactive interfaces and replace them with one Class Efl.Text.Cursor
=> there are some modifications on cursor methods
2- Update all related classes to use Efl.Text.Cursor object instead of the old interfaces
3- If class uses Efl.Text_Cursor_Cursor (handle), mainly annotation it will stay as it is until we update other annotations into attribute_factory
4- Add main cursor property into efl.text.interactive
5- Add cursor_new method in efl.ui.text (I think we may move it into efl.text.interactive interface)
There still some parts that need discussion: especially cursor movement functionality, I prefer to move function with Enum, instead of special function for each movement.
```
enum @beta Efl.Text.Cursor_Move_Type
{
[[Text cursor movement types]]
char_next, [[Advances to the next character]]
char_prev, [[Advances to the previous character]]
cluster_next, [[Advances to the next grapheme cluster]]
cluster_prev, [[Advances to the previous grapheme cluster]]
paragraph_start, [[Advances to the first character in this paragraph]]
paragraph_end, [[Advances to the last character in this paragraph]]
word_start, [[Advance to current word start]]
word_end, [[Advance to current word end]]
line_start, [[Advance to current line first character]]
line_end, [[Advance to current line last character]]
paragraph_first, [[Advance to current paragraph first character]]
paragraph_last, [[Advance to current paragraph last character]]
paragraph_next, [[Advances to the start of the next text node]]
paragraph_prev [[Advances to the end of the previous text node]]
}
move {
[[Move the cursor]]
params {
@in type: Efl.Text.Cursor_Move_Type; [[The type of movement]]
}
return: bool; [[True if actually moved]]
}
```
or old way:
```
char_next {
[[Advances to the next character]]
// FIXME: Make the number of characters we moved by? Useful for all the other functions
return: bool; [[True if actually moved]]
}
char_prev {
[[Advances to the previous character]]
return: bool; [[True if actually moved]]
}
char_delete {
[[Deletes a single character from position pointed by given cursor.]]
}
cluster_next {
[[Advances to the next grapheme cluster]]
return: bool; [[True if actually moved]]
}
cluster_prev {
[[Advances to the previous grapheme cluster]]
return: bool; [[True if actually moved]]
}
// FIXME: paragraph_end is inconsistent with word_end. The one goes to the last character and the other after the last character.
paragraph_start {
[[Advances to the first character in this paragraph]]
return: bool; [[True if actually moved]]
}
paragraph_end {
[[Advances to the last character in this paragraph]]
return: bool; [[True if actually moved]]
}
word_start {
[[Advance to current word start]]
return: bool; [[True if actually moved]]
}
word_end {
[[Advance to current word end]]
return: bool; [[True if actually moved]]
}
line_start {
[[Advance to current line first character]]
return: bool; [[True if actually moved]]
}
line_end {
[[Advance to current line last character]]
return: bool; [[True if actually moved]]
}
paragraph_first {
[[Advance to current paragraph first character]]
return: bool; [[True if actually moved]]
}
paragraph_last {
[[Advance to current paragraph last character]]
return: bool; [[True if actually moved]]
}
paragraph_next {
[[Advances to the start of the next text node]]
return: bool; [[True if actually moved]]
}
paragraph_prev {
[[Advances to the end of the previous text node]]
return: bool; [[True if actually moved]]
}
```
Reviewers: woohyun, tasn, segfaultxavi
Reviewed By: woohyun
Subscribers: a.srour, bu5hm4n, segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10542
2019-11-22 00:35:54 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
cursor_create {
|
2019-11-28 02:03:55 -08:00
|
|
|
[[Creates a new cursor and adds it to the text object.
|
|
|
|
This cursor can be used to manipulate and iterate the content of the text object.
|
Efl.Text.Cursor
Summary:
Implementation of new cursor text object.
This Patch Contains :
1- Remove Efl.Text.Cursor & Efl.Text_Markup_Interactive interfaces and replace them with one Class Efl.Text.Cursor
=> there are some modifications on cursor methods
2- Update all related classes to use Efl.Text.Cursor object instead of the old interfaces
3- If class uses Efl.Text_Cursor_Cursor (handle), mainly annotation it will stay as it is until we update other annotations into attribute_factory
4- Add main cursor property into efl.text.interactive
5- Add cursor_new method in efl.ui.text (I think we may move it into efl.text.interactive interface)
There still some parts that need discussion: especially cursor movement functionality, I prefer to move function with Enum, instead of special function for each movement.
```
enum @beta Efl.Text.Cursor_Move_Type
{
[[Text cursor movement types]]
char_next, [[Advances to the next character]]
char_prev, [[Advances to the previous character]]
cluster_next, [[Advances to the next grapheme cluster]]
cluster_prev, [[Advances to the previous grapheme cluster]]
paragraph_start, [[Advances to the first character in this paragraph]]
paragraph_end, [[Advances to the last character in this paragraph]]
word_start, [[Advance to current word start]]
word_end, [[Advance to current word end]]
line_start, [[Advance to current line first character]]
line_end, [[Advance to current line last character]]
paragraph_first, [[Advance to current paragraph first character]]
paragraph_last, [[Advance to current paragraph last character]]
paragraph_next, [[Advances to the start of the next text node]]
paragraph_prev [[Advances to the end of the previous text node]]
}
move {
[[Move the cursor]]
params {
@in type: Efl.Text.Cursor_Move_Type; [[The type of movement]]
}
return: bool; [[True if actually moved]]
}
```
or old way:
```
char_next {
[[Advances to the next character]]
// FIXME: Make the number of characters we moved by? Useful for all the other functions
return: bool; [[True if actually moved]]
}
char_prev {
[[Advances to the previous character]]
return: bool; [[True if actually moved]]
}
char_delete {
[[Deletes a single character from position pointed by given cursor.]]
}
cluster_next {
[[Advances to the next grapheme cluster]]
return: bool; [[True if actually moved]]
}
cluster_prev {
[[Advances to the previous grapheme cluster]]
return: bool; [[True if actually moved]]
}
// FIXME: paragraph_end is inconsistent with word_end. The one goes to the last character and the other after the last character.
paragraph_start {
[[Advances to the first character in this paragraph]]
return: bool; [[True if actually moved]]
}
paragraph_end {
[[Advances to the last character in this paragraph]]
return: bool; [[True if actually moved]]
}
word_start {
[[Advance to current word start]]
return: bool; [[True if actually moved]]
}
word_end {
[[Advance to current word end]]
return: bool; [[True if actually moved]]
}
line_start {
[[Advance to current line first character]]
return: bool; [[True if actually moved]]
}
line_end {
[[Advance to current line last character]]
return: bool; [[True if actually moved]]
}
paragraph_first {
[[Advance to current paragraph first character]]
return: bool; [[True if actually moved]]
}
paragraph_last {
[[Advance to current paragraph last character]]
return: bool; [[True if actually moved]]
}
paragraph_next {
[[Advances to the start of the next text node]]
return: bool; [[True if actually moved]]
}
paragraph_prev {
[[Advances to the end of the previous text node]]
return: bool; [[True if actually moved]]
}
```
Reviewers: woohyun, tasn, segfaultxavi
Reviewed By: woohyun
Subscribers: a.srour, bu5hm4n, segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10542
2019-11-22 00:35:54 -08:00
|
|
|
]]
|
2019-11-28 02:03:55 -08:00
|
|
|
return: Efl.Text.Cursor @move; [[The created text cursor.]]
|
Efl.Text.Cursor
Summary:
Implementation of new cursor text object.
This Patch Contains :
1- Remove Efl.Text.Cursor & Efl.Text_Markup_Interactive interfaces and replace them with one Class Efl.Text.Cursor
=> there are some modifications on cursor methods
2- Update all related classes to use Efl.Text.Cursor object instead of the old interfaces
3- If class uses Efl.Text_Cursor_Cursor (handle), mainly annotation it will stay as it is until we update other annotations into attribute_factory
4- Add main cursor property into efl.text.interactive
5- Add cursor_new method in efl.ui.text (I think we may move it into efl.text.interactive interface)
There still some parts that need discussion: especially cursor movement functionality, I prefer to move function with Enum, instead of special function for each movement.
```
enum @beta Efl.Text.Cursor_Move_Type
{
[[Text cursor movement types]]
char_next, [[Advances to the next character]]
char_prev, [[Advances to the previous character]]
cluster_next, [[Advances to the next grapheme cluster]]
cluster_prev, [[Advances to the previous grapheme cluster]]
paragraph_start, [[Advances to the first character in this paragraph]]
paragraph_end, [[Advances to the last character in this paragraph]]
word_start, [[Advance to current word start]]
word_end, [[Advance to current word end]]
line_start, [[Advance to current line first character]]
line_end, [[Advance to current line last character]]
paragraph_first, [[Advance to current paragraph first character]]
paragraph_last, [[Advance to current paragraph last character]]
paragraph_next, [[Advances to the start of the next text node]]
paragraph_prev [[Advances to the end of the previous text node]]
}
move {
[[Move the cursor]]
params {
@in type: Efl.Text.Cursor_Move_Type; [[The type of movement]]
}
return: bool; [[True if actually moved]]
}
```
or old way:
```
char_next {
[[Advances to the next character]]
// FIXME: Make the number of characters we moved by? Useful for all the other functions
return: bool; [[True if actually moved]]
}
char_prev {
[[Advances to the previous character]]
return: bool; [[True if actually moved]]
}
char_delete {
[[Deletes a single character from position pointed by given cursor.]]
}
cluster_next {
[[Advances to the next grapheme cluster]]
return: bool; [[True if actually moved]]
}
cluster_prev {
[[Advances to the previous grapheme cluster]]
return: bool; [[True if actually moved]]
}
// FIXME: paragraph_end is inconsistent with word_end. The one goes to the last character and the other after the last character.
paragraph_start {
[[Advances to the first character in this paragraph]]
return: bool; [[True if actually moved]]
}
paragraph_end {
[[Advances to the last character in this paragraph]]
return: bool; [[True if actually moved]]
}
word_start {
[[Advance to current word start]]
return: bool; [[True if actually moved]]
}
word_end {
[[Advance to current word end]]
return: bool; [[True if actually moved]]
}
line_start {
[[Advance to current line first character]]
return: bool; [[True if actually moved]]
}
line_end {
[[Advance to current line last character]]
return: bool; [[True if actually moved]]
}
paragraph_first {
[[Advance to current paragraph first character]]
return: bool; [[True if actually moved]]
}
paragraph_last {
[[Advance to current paragraph last character]]
return: bool; [[True if actually moved]]
}
paragraph_next {
[[Advances to the start of the next text node]]
return: bool; [[True if actually moved]]
}
paragraph_prev {
[[Advances to the end of the previous text node]]
return: bool; [[True if actually moved]]
}
```
Reviewers: woohyun, tasn, segfaultxavi
Reviewed By: woohyun
Subscribers: a.srour, bu5hm4n, segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10542
2019-11-22 00:35:54 -08:00
|
|
|
}
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
visible_range_get {
|
|
|
|
[[Returns the currently visible range.
|
|
|
|
|
2019-11-28 02:03:55 -08:00
|
|
|
The given $start and $end cursors are output variables:
|
|
|
|
they are set to the positions of the start and the end of the
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
visible range in the text, respectively.
|
|
|
|
]]
|
2019-11-28 02:03:55 -08:00
|
|
|
return: bool; [[$true on success.]]
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
params {
|
2019-11-28 02:03:55 -08:00
|
|
|
@in start: Efl.Text.Cursor; [[Range start position.]]
|
|
|
|
@in end: Efl.Text.Cursor; [[Range end position.]]
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
@property style_insets {
|
|
|
|
[[Gets the left, right, top and bottom insets of the text.
|
|
|
|
|
|
|
|
The inset is any applied padding on the text.
|
|
|
|
]]
|
|
|
|
get {}
|
|
|
|
values {
|
2019-11-28 02:03:55 -08:00
|
|
|
l: int; [[Left padding.]]
|
|
|
|
r: int; [[Right padding.]]
|
|
|
|
t: int; [[Top padding.]]
|
|
|
|
b: int; [[Bottom padding.]]
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
}
|
|
|
|
}
|
2016-05-24 06:11:03 -07:00
|
|
|
@property bidi_delimiters {
|
2019-11-28 02:03:55 -08:00
|
|
|
[[BiDi delimiters are used for in-paragraph separation of bidirectional
|
2017-12-22 05:45:48 -08:00
|
|
|
segments. This is useful, for example, in the recipient fields of
|
2019-11-28 02:03:55 -08:00
|
|
|
e-mail clients where bidi oddities can occur when mixing RTL (right-to-left)
|
|
|
|
and LTR (left-to-right) text.
|
2016-05-24 06:11:03 -07:00
|
|
|
]]
|
|
|
|
set {}
|
|
|
|
get {}
|
|
|
|
values {
|
2019-11-28 02:03:55 -08:00
|
|
|
delim: string; [[A null terminated string of delimiters, e.g ",|" or $null if empty.]]
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
|
|
|
}
|
Efl.Text.Cursor
Summary:
Implementation of new cursor text object.
This Patch Contains :
1- Remove Efl.Text.Cursor & Efl.Text_Markup_Interactive interfaces and replace them with one Class Efl.Text.Cursor
=> there are some modifications on cursor methods
2- Update all related classes to use Efl.Text.Cursor object instead of the old interfaces
3- If class uses Efl.Text_Cursor_Cursor (handle), mainly annotation it will stay as it is until we update other annotations into attribute_factory
4- Add main cursor property into efl.text.interactive
5- Add cursor_new method in efl.ui.text (I think we may move it into efl.text.interactive interface)
There still some parts that need discussion: especially cursor movement functionality, I prefer to move function with Enum, instead of special function for each movement.
```
enum @beta Efl.Text.Cursor_Move_Type
{
[[Text cursor movement types]]
char_next, [[Advances to the next character]]
char_prev, [[Advances to the previous character]]
cluster_next, [[Advances to the next grapheme cluster]]
cluster_prev, [[Advances to the previous grapheme cluster]]
paragraph_start, [[Advances to the first character in this paragraph]]
paragraph_end, [[Advances to the last character in this paragraph]]
word_start, [[Advance to current word start]]
word_end, [[Advance to current word end]]
line_start, [[Advance to current line first character]]
line_end, [[Advance to current line last character]]
paragraph_first, [[Advance to current paragraph first character]]
paragraph_last, [[Advance to current paragraph last character]]
paragraph_next, [[Advances to the start of the next text node]]
paragraph_prev [[Advances to the end of the previous text node]]
}
move {
[[Move the cursor]]
params {
@in type: Efl.Text.Cursor_Move_Type; [[The type of movement]]
}
return: bool; [[True if actually moved]]
}
```
or old way:
```
char_next {
[[Advances to the next character]]
// FIXME: Make the number of characters we moved by? Useful for all the other functions
return: bool; [[True if actually moved]]
}
char_prev {
[[Advances to the previous character]]
return: bool; [[True if actually moved]]
}
char_delete {
[[Deletes a single character from position pointed by given cursor.]]
}
cluster_next {
[[Advances to the next grapheme cluster]]
return: bool; [[True if actually moved]]
}
cluster_prev {
[[Advances to the previous grapheme cluster]]
return: bool; [[True if actually moved]]
}
// FIXME: paragraph_end is inconsistent with word_end. The one goes to the last character and the other after the last character.
paragraph_start {
[[Advances to the first character in this paragraph]]
return: bool; [[True if actually moved]]
}
paragraph_end {
[[Advances to the last character in this paragraph]]
return: bool; [[True if actually moved]]
}
word_start {
[[Advance to current word start]]
return: bool; [[True if actually moved]]
}
word_end {
[[Advance to current word end]]
return: bool; [[True if actually moved]]
}
line_start {
[[Advance to current line first character]]
return: bool; [[True if actually moved]]
}
line_end {
[[Advance to current line last character]]
return: bool; [[True if actually moved]]
}
paragraph_first {
[[Advance to current paragraph first character]]
return: bool; [[True if actually moved]]
}
paragraph_last {
[[Advance to current paragraph last character]]
return: bool; [[True if actually moved]]
}
paragraph_next {
[[Advances to the start of the next text node]]
return: bool; [[True if actually moved]]
}
paragraph_prev {
[[Advances to the end of the previous text node]]
return: bool; [[True if actually moved]]
}
```
Reviewers: woohyun, tasn, segfaultxavi
Reviewed By: woohyun
Subscribers: a.srour, bu5hm4n, segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10542
2019-11-22 00:35:54 -08:00
|
|
|
@property newline_as_paragraph_separator {
|
2019-11-28 02:03:55 -08:00
|
|
|
[[When $true, the newline character will behave as a paragraph separator.
|
2016-05-24 06:11:03 -07:00
|
|
|
]]
|
|
|
|
set {}
|
|
|
|
get {}
|
|
|
|
values {
|
2019-11-28 02:03:55 -08:00
|
|
|
mode: bool; [[$true for legacy mode, $false otherwise.]]
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
|
|
|
}
|
Efl Canvas Text : Modify Style Property
Summary:
This patch defines the way style property will work at canvas_text object
1- Changing canvas_text style property using Font/Format/Style interfaces or with efl_canvas_text style property are the same.
Example:
```
efl_text_font_set(tb, "Arial", 30);
//is same as
efl_canvas_text_style_set(tb, "font=Arial font_size=30");
//which means calling
char * font;
int size;
int font_size;
efl_text_font_get(tb, &font, &size);
// calling this after any of the top two functions will return same result
```
2- style_get_property
Will return string that contains full details about all the current applied style at canvas_text level.
3- style_set_property
Will only override passed styles and leave everything else as it is
```
efl_canvas_text_style_set(tb, "font=Arial"); // overrider font name to Arial and leave everthing else
efl_canvas_text_style_set(tb, "font_size=30"); // overrider font size to 30 and leave everthing else (font name will stay arial)
```
Reviewers: ali.alzyod, woohyun, tasn, segfaultxavi, bu5hm4n, zmike
Reviewed By: woohyun
Subscribers: zmike, bu5hm4n, segfaultxavi, a.srour, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10607
2019-11-27 20:14:15 -08:00
|
|
|
style_apply {
|
2019-11-28 02:03:55 -08:00
|
|
|
[[Applies a style to the text object. Applied style attributes override old ones, leaving other attributes
|
|
|
|
unaffected.
|
|
|
|
This is similar to setting individual style attributes using properties like @Efl.Text_Font.font_slant or
|
2019-12-02 01:41:35 -08:00
|
|
|
@Efl.Text_Format.wrap.
|
|
|
|
|
|
|
|
The style can be set as "attribute"="Value".
|
|
|
|
Multible attribute can be set at once separated by space.
|
|
|
|
|
|
|
|
The following styling attributes are accepted:
|
|
|
|
|
|
|
|
- Font
|
|
|
|
- Font fallback
|
|
|
|
- Font size
|
|
|
|
- Font source
|
|
|
|
- Font weight
|
|
|
|
- Font style
|
|
|
|
- Font width
|
|
|
|
- Language
|
|
|
|
- Color
|
|
|
|
- Underline Color
|
|
|
|
- Second Underline Color
|
|
|
|
- Underline Dash Color
|
|
|
|
- Outline Color
|
|
|
|
- Shadow Color
|
|
|
|
- First Glow Color
|
|
|
|
- Second Glow Color
|
|
|
|
- Backing Color
|
|
|
|
- Strikethrough Color
|
|
|
|
- Horizontal Align
|
|
|
|
- Vertical Align
|
|
|
|
- Wrap
|
|
|
|
- Left margin
|
|
|
|
- Right margin
|
|
|
|
- Underline
|
|
|
|
- Strikethrough
|
|
|
|
- Backing
|
|
|
|
- Style
|
|
|
|
- Tabstops
|
|
|
|
- Line size
|
|
|
|
- Relative line size
|
|
|
|
- Line gap
|
|
|
|
- Relative line gap
|
|
|
|
- Item
|
|
|
|
- Line fill
|
|
|
|
- Ellipsis
|
|
|
|
- Password
|
|
|
|
- Underline dash width
|
|
|
|
- Underline dash gap
|
|
|
|
- Underline height
|
|
|
|
|
|
|
|
Font
|
|
|
|
This sets the name of the font to be used.
|
|
|
|
font=<font name>
|
|
|
|
|
|
|
|
Font fallback
|
|
|
|
A comma delimited list of fonts to try if finding the primary font fails.
|
|
|
|
font_fallbacks=<font names>
|
|
|
|
|
|
|
|
Font size
|
|
|
|
This sets the the size of font in points to be used.
|
|
|
|
font_size=<size>
|
|
|
|
|
|
|
|
Font source
|
|
|
|
Specify source from which to search for the font.
|
|
|
|
font_source=<source>
|
|
|
|
|
|
|
|
Font weight
|
|
|
|
Sets the weight of the font. The value must be one of:
|
|
|
|
"normal"
|
|
|
|
"thin"
|
|
|
|
"ultralight"
|
|
|
|
"extralight"
|
|
|
|
"light"
|
|
|
|
"book"
|
|
|
|
"medium"
|
|
|
|
"semibold"
|
|
|
|
"bold"
|
|
|
|
"ultrabold"
|
|
|
|
"extrabold"
|
|
|
|
"black"
|
|
|
|
"extrablack"
|
|
|
|
font_weight=<weight>
|
|
|
|
|
|
|
|
Font style
|
|
|
|
Sets the style of the font. The value must be one of:
|
|
|
|
"normal"
|
|
|
|
"oblique"
|
|
|
|
"italic"
|
|
|
|
font_style=<style>
|
|
|
|
|
|
|
|
Font width
|
|
|
|
Sets the width of the font. The value must be one of:
|
|
|
|
"normal"
|
|
|
|
"ultracondensed"
|
|
|
|
"extracondensed"
|
|
|
|
"condensed"
|
|
|
|
"semicondensed"
|
|
|
|
"semiexpanded"
|
|
|
|
"expanded"
|
|
|
|
"extraexpanded"
|
|
|
|
"ultraexpanded"
|
|
|
|
font_width=<width>
|
|
|
|
|
|
|
|
Language
|
|
|
|
Overrides the language defined in font. For example, lang=he.
|
|
|
|
The value can either be a language text or one of presets:
|
|
|
|
"auto" - Respects system locale settings as language
|
|
|
|
"none" - Disable language support
|
|
|
|
lang=<language>
|
|
|
|
|
|
|
|
Color Commands <color>:
|
|
|
|
The following formats are accepted:
|
|
|
|
"#RRGGBB"
|
|
|
|
"#RRGGBBAA"
|
|
|
|
"#RGB"
|
|
|
|
"#RGBA"
|
|
|
|
"rgb(r,g,b)"
|
|
|
|
"rgba(r,g,b,a)"
|
|
|
|
"color_name" like "red" (X11 color names)
|
|
|
|
|
|
|
|
Color
|
|
|
|
Sets the color of the text.
|
|
|
|
color=<color>
|
|
|
|
|
|
|
|
Underline Color
|
|
|
|
Sets the color of the underline.
|
|
|
|
underline_color=<color>
|
|
|
|
|
|
|
|
Second Underline Color
|
|
|
|
Sets the color of the second line of underline(when using underline mode "double").
|
|
|
|
underline2_color=<color>
|
|
|
|
|
|
|
|
Underline Dash Color
|
|
|
|
Sets the color of dashed underline.
|
|
|
|
underline_dash_color=<color>
|
|
|
|
|
|
|
|
Outline Color
|
|
|
|
Sets the color of the outline of the text.
|
|
|
|
outline_color=<color>
|
|
|
|
|
|
|
|
Shadow Color
|
|
|
|
Sets the color of the shadow of the text.
|
|
|
|
shadow_color=<color>
|
|
|
|
|
|
|
|
First Glow Color
|
|
|
|
Sets the first color of the glow of text.
|
|
|
|
glow_color=<color>
|
|
|
|
|
|
|
|
Second Glow Color
|
|
|
|
Sets the second color of the glow of text.
|
|
|
|
glow2_color=<color>
|
|
|
|
|
|
|
|
Backing Color
|
|
|
|
Sets a background color for text.
|
|
|
|
backing_color=<color>
|
|
|
|
|
|
|
|
Strikethrough Color
|
|
|
|
Sets the color of text that is striked through.
|
|
|
|
strikethrough_color=<color>
|
|
|
|
|
|
|
|
Horizontal Align
|
|
|
|
Sets the horizontal alignment of the text. The value can either be a number, a percentage or one of several presets:
|
|
|
|
"auto" - Respects LTR/RTL settings
|
|
|
|
"locale" - Respects locale(language) direction settings
|
|
|
|
"center" - Centers the text in the line
|
|
|
|
"middle" - Alias for "center"
|
|
|
|
"left" - Puts the text at the left of the line
|
|
|
|
"right" - Puts the text at the right of the line
|
|
|
|
"start" - Respects LTR/RTL settings. It is same with "auto"
|
|
|
|
"end" - Puts the text at the opposite side of LTR/RTL settings
|
|
|
|
<number> - A number between 0.0 and 1.0 where 0.0 represents "left" and 1.0 represents "right"
|
|
|
|
<number>% - A percentage between 0% and 100% where 0% represents "left" and 100% represents "right"
|
|
|
|
align=<value or preset>
|
|
|
|
|
|
|
|
Vertical Align
|
|
|
|
Sets the vertical alignment of the text.
|
|
|
|
The value can either be a number or one of the following presets:
|
|
|
|
"top" - Puts text at the top of the line
|
|
|
|
"center" - Centers the text in the line
|
|
|
|
"middle" - Alias for "center"
|
|
|
|
"bottom" - Puts the text at the bottom of the line
|
|
|
|
"baseline" - Baseline
|
|
|
|
"base" - Alias for "baseline"
|
|
|
|
<number> - A number between 0.0 and 1.0 where 0.0 represents "top" and 1.0 represents "bottom"
|
|
|
|
<number>% - A percentage between 0% and 100% where 0% represents "top" and 100% represents "bottom"
|
|
|
|
valign=<value or preset>
|
|
|
|
See explanation of baseline at: https://en.wikipedia.org/wiki/Baseline_%28typography%29
|
|
|
|
|
|
|
|
Wrap
|
|
|
|
Sets the wrap policy of the text. The value must be one of the following:
|
|
|
|
"word" - Only wraps lines at word boundaries
|
|
|
|
"char" - Wraps at any character
|
|
|
|
"mixed" - Wrap at words if possible, if not at any character
|
|
|
|
"hyphenation" - Hyphenate if possible, if not wrap at words if possible, if not at any character
|
|
|
|
"" - Don't wrap
|
|
|
|
wrap=<value or preset>
|
|
|
|
|
|
|
|
Left margin
|
|
|
|
Sets the left margin of the text (in pixel). The value can be a number, an increment, decrement or "reset":
|
|
|
|
+<number> - Increments existing left margin by <number>
|
|
|
|
-<number> - Decrements existing left margin by <number>
|
|
|
|
<number> - Sets left margin to <number>
|
|
|
|
"reset" - Sets left margin to 0
|
|
|
|
left_margin=<value or reset>
|
|
|
|
|
|
|
|
Right margin
|
|
|
|
Sets the right margin of the text (in pixel). The value can be a number, an increment, decrement or "reset":
|
|
|
|
+<number> - Increments existing right margin by <number>
|
|
|
|
-<number> - Decrements existing right margin by <number>
|
|
|
|
<number> - Sets left margin to <number>
|
|
|
|
"reset" - Sets left margin to 0
|
|
|
|
right_margin=<value or reset>
|
|
|
|
|
|
|
|
Underline
|
|
|
|
Sets if and how a text will be underlined. The value must be one of the following:
|
|
|
|
"off" - No underlining
|
|
|
|
"single" - A single line under the text
|
|
|
|
"on" - Alias for "single"
|
|
|
|
"double" - Two lines under the text
|
|
|
|
"dashed" - A dashed line under the text
|
|
|
|
underline=off/single/on/double/dashed
|
|
|
|
|
|
|
|
Strikethrough
|
|
|
|
Sets if the text will be striked through. The value must be one of the following:
|
|
|
|
"off" - No strikethrough
|
|
|
|
"on" - Strikethrough
|
|
|
|
strikethrough=on/off
|
|
|
|
|
|
|
|
Backing
|
|
|
|
Sets if the text will have background color enabled or disabled. The value must be one of the following:
|
|
|
|
"off" - No backing
|
|
|
|
"on" - Backing
|
|
|
|
backing=on/off
|
|
|
|
|
|
|
|
Style
|
|
|
|
Sets the style of the text. The value must be a string composed of two comma separated parts.
|
|
|
|
The first part of the value sets the appearance of the text, the second the position.
|
|
|
|
The first part may be any of the following values:
|
|
|
|
"plain"
|
|
|
|
"off" - Alias for "plain"
|
|
|
|
"none" - Alias for "plain"
|
|
|
|
"shadow"
|
|
|
|
"outline"
|
|
|
|
"soft_outline"
|
|
|
|
"outline_shadow"
|
|
|
|
"outline_soft_shadow"
|
|
|
|
"glow"
|
|
|
|
"far_shadow"
|
|
|
|
"soft_shadow"
|
|
|
|
"far_soft_shadow" The second part may be any of the following values:
|
|
|
|
"bottom_right"
|
|
|
|
"bottom"
|
|
|
|
"bottom_left"
|
|
|
|
"left"
|
|
|
|
"top_left"
|
|
|
|
"top"
|
|
|
|
"top_right"
|
|
|
|
"right"
|
|
|
|
style=<appearance>,<position>
|
|
|
|
|
|
|
|
Tabstops
|
|
|
|
Sets the size (in pixel) of the tab character. The value must be a number greater than one.
|
|
|
|
tabstops=<number>
|
|
|
|
|
|
|
|
Line size
|
|
|
|
Sets the size (in pixel) of line of text. The value should be a number.
|
|
|
|
Setting this value sets linerelsize to 0%!
|
|
|
|
linesize=<number>
|
|
|
|
|
|
|
|
Relative line size
|
|
|
|
Percentage indicating the wanted size of the line relative to the calculated size.
|
|
|
|
Setting this value sets linesize to 0!
|
|
|
|
linerelsize=<number>%
|
|
|
|
|
|
|
|
Line gap
|
|
|
|
Sets the size (in pixel) of the line gap in text (distance between lines). The value should be a number.
|
|
|
|
Setting this value sets linerelgap to 0%!
|
|
|
|
linegap=<number>
|
|
|
|
|
|
|
|
Relative line gap
|
|
|
|
Sets the relative size of the line gap in text based calculated size. The value must be a percentage.
|
|
|
|
Setting this value sets linegap to 0!
|
|
|
|
linerelgap=<number>%
|
|
|
|
|
|
|
|
Line fill
|
|
|
|
Sets the size of the line fill in text. The value must be a percentage (how much line fill its canvas).
|
|
|
|
For example setting value to 100%, means the one line will fill it canvas.
|
|
|
|
linefill=<number>%
|
|
|
|
|
|
|
|
Ellipsis
|
|
|
|
Sets ellipsis mode. The value should be a number.
|
|
|
|
Any value smaller than 0.0 or greater than 1.0 disables ellipsis.
|
|
|
|
A value of 0 means ellipsizing the leftmost portion of the text first, 1 on the other hand the rightmost portion.
|
|
|
|
ellipsis=<number>
|
|
|
|
|
|
|
|
Password
|
|
|
|
Sets if the text is being used for passwords.
|
|
|
|
Enabling this causes all characters to be substituted for '*'. Value must be one of the following:
|
|
|
|
"on" - Enable
|
|
|
|
"off" - Disable
|
|
|
|
password=on/off
|
|
|
|
|
|
|
|
Underline dash width
|
|
|
|
Sets the width of the underline dash (in pixel). The value should be a number.
|
|
|
|
underline_dash_width=<number>
|
|
|
|
|
|
|
|
Underline dash gap
|
|
|
|
Sets the gap of the underline dash (in pixel). The value should be a number.
|
|
|
|
underline_dash_gap=<number>
|
|
|
|
|
|
|
|
Underline height
|
|
|
|
Sets the height of the single underline (in pixel). The value should be a floating number.
|
|
|
|
underline_height=<floatingnumber>
|
|
|
|
|
|
|
|
Gfx Filter
|
|
|
|
Experimental filter, see efl_gfx_filter for more information.
|
|
|
|
gfx_filter='filter name'
|
|
|
|
]]
|
|
|
|
|
Efl Canvas Text : Modify Style Property
Summary:
This patch defines the way style property will work at canvas_text object
1- Changing canvas_text style property using Font/Format/Style interfaces or with efl_canvas_text style property are the same.
Example:
```
efl_text_font_set(tb, "Arial", 30);
//is same as
efl_canvas_text_style_set(tb, "font=Arial font_size=30");
//which means calling
char * font;
int size;
int font_size;
efl_text_font_get(tb, &font, &size);
// calling this after any of the top two functions will return same result
```
2- style_get_property
Will return string that contains full details about all the current applied style at canvas_text level.
3- style_set_property
Will only override passed styles and leave everything else as it is
```
efl_canvas_text_style_set(tb, "font=Arial"); // overrider font name to Arial and leave everthing else
efl_canvas_text_style_set(tb, "font_size=30"); // overrider font size to 30 and leave everthing else (font name will stay arial)
```
Reviewers: ali.alzyod, woohyun, tasn, segfaultxavi, bu5hm4n, zmike
Reviewed By: woohyun
Subscribers: zmike, bu5hm4n, segfaultxavi, a.srour, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10607
2019-11-27 20:14:15 -08:00
|
|
|
params {
|
2019-12-02 01:41:35 -08:00
|
|
|
@in style: string; [[A whitespace-separated list of $[property=value] pairs, for example, $[font=sans font_size=30].]]
|
2016-06-07 10:16:34 -07:00
|
|
|
}
|
Efl Canvas Text : Modify Style Property
Summary:
This patch defines the way style property will work at canvas_text object
1- Changing canvas_text style property using Font/Format/Style interfaces or with efl_canvas_text style property are the same.
Example:
```
efl_text_font_set(tb, "Arial", 30);
//is same as
efl_canvas_text_style_set(tb, "font=Arial font_size=30");
//which means calling
char * font;
int size;
int font_size;
efl_text_font_get(tb, &font, &size);
// calling this after any of the top two functions will return same result
```
2- style_get_property
Will return string that contains full details about all the current applied style at canvas_text level.
3- style_set_property
Will only override passed styles and leave everything else as it is
```
efl_canvas_text_style_set(tb, "font=Arial"); // overrider font name to Arial and leave everthing else
efl_canvas_text_style_set(tb, "font_size=30"); // overrider font size to 30 and leave everthing else (font name will stay arial)
```
Reviewers: ali.alzyod, woohyun, tasn, segfaultxavi, bu5hm4n, zmike
Reviewed By: woohyun
Subscribers: zmike, bu5hm4n, segfaultxavi, a.srour, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10607
2019-11-27 20:14:15 -08:00
|
|
|
}
|
|
|
|
@property all_styles {
|
2019-11-28 02:03:55 -08:00
|
|
|
[[A string representing the complete set of styles applied to this text object.
|
|
|
|
This includes the default attributes plus any additional style applied with @.style_apply
|
|
|
|
or individual style properties like @Efl.Text_Font.font_slant or @Efl.Text_Format.wrap.]]
|
Efl Canvas Text : Modify Style Property
Summary:
This patch defines the way style property will work at canvas_text object
1- Changing canvas_text style property using Font/Format/Style interfaces or with efl_canvas_text style property are the same.
Example:
```
efl_text_font_set(tb, "Arial", 30);
//is same as
efl_canvas_text_style_set(tb, "font=Arial font_size=30");
//which means calling
char * font;
int size;
int font_size;
efl_text_font_get(tb, &font, &size);
// calling this after any of the top two functions will return same result
```
2- style_get_property
Will return string that contains full details about all the current applied style at canvas_text level.
3- style_set_property
Will only override passed styles and leave everything else as it is
```
efl_canvas_text_style_set(tb, "font=Arial"); // overrider font name to Arial and leave everthing else
efl_canvas_text_style_set(tb, "font_size=30"); // overrider font size to 30 and leave everthing else (font name will stay arial)
```
Reviewers: ali.alzyod, woohyun, tasn, segfaultxavi, bu5hm4n, zmike
Reviewed By: woohyun
Subscribers: zmike, bu5hm4n, segfaultxavi, a.srour, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10607
2019-11-27 20:14:15 -08:00
|
|
|
get {}
|
2016-05-24 06:11:03 -07:00
|
|
|
values {
|
2019-11-28 02:03:55 -08:00
|
|
|
style: string; [[A whitespace-separated list of $[property=value] pairs, for example,
|
|
|
|
$[font=sans size=30]. Do not free.]]
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
@property size_formatted {
|
2019-11-28 02:03:55 -08:00
|
|
|
[[The formatted width and height of this text block.
|
2016-05-24 06:11:03 -07:00
|
|
|
|
|
|
|
This calculates the actual size after restricting the
|
2019-11-28 02:03:55 -08:00
|
|
|
text block to the current size of the object.
|
2016-05-24 06:11:03 -07:00
|
|
|
|
2019-11-28 02:03:55 -08:00
|
|
|
The main difference between this and @.size_native
|
|
|
|
is that the "native" function does not take wrapping into account:
|
|
|
|
it just calculates the real width of the object as if it was
|
|
|
|
placed on an infinite canvas, while @.size_formatted gives the
|
|
|
|
size after wrapping text according to the size restrictions of the
|
2016-05-24 06:11:03 -07:00
|
|
|
object.
|
|
|
|
|
2019-11-28 02:03:55 -08:00
|
|
|
For example a text block containing the text:
|
2016-05-24 06:11:03 -07:00
|
|
|
"You shall not pass!" with no margins or padding and assuming
|
|
|
|
a monospace font and a size of 7x10 char widths (for simplicity)
|
|
|
|
has a native size of 19x1 and a formatted size of 5x4.
|
|
|
|
]]
|
|
|
|
get {}
|
|
|
|
values {
|
2019-11-28 02:03:55 -08:00
|
|
|
size: Eina.Size2D; [[The formatted size of the object (after wrapping).]]
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
@property size_native {
|
2019-11-28 02:03:55 -08:00
|
|
|
[[The native width and height of this text block.
|
2016-05-24 06:11:03 -07:00
|
|
|
|
|
|
|
This calculates the actual size without taking account the
|
|
|
|
current size of the object.
|
|
|
|
|
2019-11-28 02:03:55 -08:00
|
|
|
The main difference between this and @.size_formatted
|
|
|
|
is that the "native" function does not take wrapping into account:
|
|
|
|
it just calculates the real width of the object as if it was
|
|
|
|
placed on an infinite canvas, while @.size_formatted gives the
|
|
|
|
size after wrapping text according to the size restrictions of the
|
|
|
|
object.
|
2016-05-24 06:11:03 -07:00
|
|
|
|
2019-11-28 02:03:55 -08:00
|
|
|
For example a text block containing the text:
|
2016-05-24 06:11:03 -07:00
|
|
|
"You shall not pass!" with no margins or padding and assuming
|
|
|
|
a monospace font and a size of 7x10 char widths (for simplicity)
|
|
|
|
has a native size of 19x1 and a formatted size of 5x4.
|
|
|
|
]]
|
|
|
|
get {}
|
|
|
|
values {
|
2019-11-28 02:03:55 -08:00
|
|
|
size: Eina.Size2D; [[The native size of the object (without wrapping).]]
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
|
|
|
}
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
// Obstacles
|
2016-05-24 06:11:03 -07:00
|
|
|
obstacle_add {
|
|
|
|
[[Add obstacle evas object $eo_obs to be observed during layout
|
|
|
|
of text.
|
|
|
|
|
|
|
|
The textblock does the layout of the text according to the
|
|
|
|
position of the obstacle.
|
|
|
|
]]
|
|
|
|
params {
|
2019-11-28 02:03:55 -08:00
|
|
|
@in eo_obs: Efl.Canvas.Object; [[Obstacle object.]]
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
2019-11-28 02:03:55 -08:00
|
|
|
return: bool; [[$true on success.]]
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
|
|
|
obstacle_del {
|
|
|
|
[[Removes $eo_obs from observation during text layout.
|
|
|
|
]]
|
|
|
|
params {
|
2019-11-28 02:03:55 -08:00
|
|
|
@in eo_obs: Efl.Canvas.Object; [[Obstacle object.]]
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
2019-11-28 02:03:55 -08:00
|
|
|
return: bool; [[$true on success.]]
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
|
|
|
obstacles_update {
|
|
|
|
[[Triggers for relayout due to obstacles' state change.
|
|
|
|
|
|
|
|
The obstacles alone don't affect the layout, until this is
|
|
|
|
called. Use this after doing changes (moving, positioning etc.)
|
|
|
|
in the obstacles that you would like to be considered in the
|
|
|
|
layout.
|
|
|
|
|
|
|
|
For example: if you have just repositioned the obstacles to
|
2019-11-28 02:03:55 -08:00
|
|
|
different coordinates relative to the text block, you need to
|
2016-05-24 06:11:03 -07:00
|
|
|
call this so it will consider this new state and will relayout
|
|
|
|
the text.
|
|
|
|
]]
|
|
|
|
}
|
2017-09-04 09:16:27 -07:00
|
|
|
async_layout {
|
|
|
|
[[Requests to layout the text off the mainloop.
|
|
|
|
|
|
|
|
Once layout is complete, the result is returned as @Eina.Rect,
|
2019-11-28 02:03:55 -08:00
|
|
|
with the $w and $h fields set.
|
2017-09-04 09:16:27 -07:00
|
|
|
]]
|
2019-11-28 02:03:55 -08:00
|
|
|
return: future<Eina.Rect>; [[Future for layout result.]]
|
2017-09-04 09:16:27 -07:00
|
|
|
}
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
|
|
|
implements {
|
2016-08-10 07:23:04 -07:00
|
|
|
Efl.Object.constructor;
|
|
|
|
Efl.Object.destructor;
|
2016-12-27 07:37:41 -08:00
|
|
|
Efl.Canvas.Object.paragraph_direction { get; set; }
|
|
|
|
Efl.Text.text { get; set; }
|
2016-12-22 02:43:45 -08:00
|
|
|
Efl.Gfx.Filter.filter_program { get; set; }
|
2017-01-04 18:25:21 -08:00
|
|
|
Efl.Gfx.Filter.filter_data { get; set; }
|
2017-01-05 00:56:04 -08:00
|
|
|
Efl.Gfx.Filter.filter_source { get; set; }
|
2016-12-22 02:43:45 -08:00
|
|
|
Efl.Canvas.Filter.Internal.filter_dirty;
|
|
|
|
Efl.Canvas.Filter.Internal.filter_input_render;
|
|
|
|
Efl.Canvas.Filter.Internal.filter_state_prepare;
|
2019-11-27 23:55:26 -08:00
|
|
|
Efl.Text_Font.font_family { get; set; }
|
|
|
|
Efl.Text_Font.font_size { get; set; }
|
2018-04-06 04:30:40 -07:00
|
|
|
Efl.Text_Font.font_source { get; set; }
|
|
|
|
Efl.Text_Font.font_fallbacks { get; set; }
|
|
|
|
Efl.Text_Font.font_lang { get; set; }
|
|
|
|
Efl.Text_Font.font_weight { get; set; }
|
|
|
|
Efl.Text_Font.font_slant { get; set; }
|
|
|
|
Efl.Text_Font.font_width { get; set; }
|
|
|
|
Efl.Text_Font.font_bitmap_scalable { get; set; }
|
|
|
|
Efl.Text_Style.normal_color { get; set; }
|
|
|
|
Efl.Text_Style.backing_type { get; set; }
|
|
|
|
Efl.Text_Style.backing_color { get; set; }
|
|
|
|
Efl.Text_Style.underline_type { get; set; }
|
|
|
|
Efl.Text_Style.underline_color { get; set; }
|
|
|
|
Efl.Text_Style.underline_height { get; set; }
|
|
|
|
Efl.Text_Style.underline_dashed_color { get; set; }
|
|
|
|
Efl.Text_Style.underline_dashed_width { get; set; }
|
|
|
|
Efl.Text_Style.underline_dashed_gap { get; set; }
|
|
|
|
Efl.Text_Style.underline2_color { get; set; }
|
|
|
|
Efl.Text_Style.strikethrough_type { get; set; }
|
|
|
|
Efl.Text_Style.strikethrough_color { get; set; }
|
|
|
|
Efl.Text_Style.effect_type { get; set; }
|
|
|
|
Efl.Text_Style.outline_color { get; set; }
|
|
|
|
Efl.Text_Style.shadow_direction { get; set; }
|
|
|
|
Efl.Text_Style.shadow_color { get; set; }
|
|
|
|
Efl.Text_Style.glow_color { get; set; }
|
|
|
|
Efl.Text_Style.glow2_color { get; set; }
|
|
|
|
Efl.Text_Style.gfx_filter { get; set; }
|
|
|
|
Efl.Text_Format.ellipsis { get; set; }
|
|
|
|
Efl.Text_Format.wrap { get; set; }
|
|
|
|
Efl.Text_Format.multiline { get; set; }
|
2019-11-27 23:55:26 -08:00
|
|
|
Efl.Text_Format.horizontal_align { get; set; }
|
|
|
|
Efl.Text_Format.horizontal_align_auto_type { get; set; }
|
|
|
|
Efl.Text_Format.vertical_align { get; set; }
|
2018-04-06 04:30:40 -07:00
|
|
|
Efl.Text_Format.linegap { get; set; }
|
|
|
|
Efl.Text_Format.linerelgap { get; set; }
|
|
|
|
Efl.Text_Format.tabstops { get; set; }
|
|
|
|
Efl.Text_Format.password { get; set; }
|
|
|
|
Efl.Text_Format.replacement_char { get; set; }
|
|
|
|
Efl.Text_Markup.markup { set; get; }
|
2018-04-05 01:47:26 -07:00
|
|
|
Efl.Gfx.Entity.scale { set; }
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|
2016-07-11 04:18:19 -07:00
|
|
|
events {
|
efl: Add missing event types
Summary:
All events must have a type now, otherwise bindings don't know how to handle
the event_info field.
Most of the missing event types were actually "void" (no event_info present).
Some struct definitions had to be moved to eo instead of h files, so they
are available to bindings. Some have not, and are marked with FIXME.
Some namespaces have been fixed (like Efl_Event_Cb -> Efl.Event_Cb).
In general, there are hundreds of changed files, but mostly to add a type which
was not present before, so there's no harm done.
Also, A lot of FIXMEs have been added which should be, like, fixed.
For example, some events can send different types of event_info, which is
very inconvenient (and error prone).
Test Plan: make with c# bindings works, make check and make examples work too.
Reviewers: cedric, q66, lauromoura
Subscribers: zmike
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D6169
2018-05-11 08:20:40 -07:00
|
|
|
changed: void; [[Called when canvas text changed ]]
|
Efl.Text.Cursor
Summary:
Implementation of new cursor text object.
This Patch Contains :
1- Remove Efl.Text.Cursor & Efl.Text_Markup_Interactive interfaces and replace them with one Class Efl.Text.Cursor
=> there are some modifications on cursor methods
2- Update all related classes to use Efl.Text.Cursor object instead of the old interfaces
3- If class uses Efl.Text_Cursor_Cursor (handle), mainly annotation it will stay as it is until we update other annotations into attribute_factory
4- Add main cursor property into efl.text.interactive
5- Add cursor_new method in efl.ui.text (I think we may move it into efl.text.interactive interface)
There still some parts that need discussion: especially cursor movement functionality, I prefer to move function with Enum, instead of special function for each movement.
```
enum @beta Efl.Text.Cursor_Move_Type
{
[[Text cursor movement types]]
char_next, [[Advances to the next character]]
char_prev, [[Advances to the previous character]]
cluster_next, [[Advances to the next grapheme cluster]]
cluster_prev, [[Advances to the previous grapheme cluster]]
paragraph_start, [[Advances to the first character in this paragraph]]
paragraph_end, [[Advances to the last character in this paragraph]]
word_start, [[Advance to current word start]]
word_end, [[Advance to current word end]]
line_start, [[Advance to current line first character]]
line_end, [[Advance to current line last character]]
paragraph_first, [[Advance to current paragraph first character]]
paragraph_last, [[Advance to current paragraph last character]]
paragraph_next, [[Advances to the start of the next text node]]
paragraph_prev [[Advances to the end of the previous text node]]
}
move {
[[Move the cursor]]
params {
@in type: Efl.Text.Cursor_Move_Type; [[The type of movement]]
}
return: bool; [[True if actually moved]]
}
```
or old way:
```
char_next {
[[Advances to the next character]]
// FIXME: Make the number of characters we moved by? Useful for all the other functions
return: bool; [[True if actually moved]]
}
char_prev {
[[Advances to the previous character]]
return: bool; [[True if actually moved]]
}
char_delete {
[[Deletes a single character from position pointed by given cursor.]]
}
cluster_next {
[[Advances to the next grapheme cluster]]
return: bool; [[True if actually moved]]
}
cluster_prev {
[[Advances to the previous grapheme cluster]]
return: bool; [[True if actually moved]]
}
// FIXME: paragraph_end is inconsistent with word_end. The one goes to the last character and the other after the last character.
paragraph_start {
[[Advances to the first character in this paragraph]]
return: bool; [[True if actually moved]]
}
paragraph_end {
[[Advances to the last character in this paragraph]]
return: bool; [[True if actually moved]]
}
word_start {
[[Advance to current word start]]
return: bool; [[True if actually moved]]
}
word_end {
[[Advance to current word end]]
return: bool; [[True if actually moved]]
}
line_start {
[[Advance to current line first character]]
return: bool; [[True if actually moved]]
}
line_end {
[[Advance to current line last character]]
return: bool; [[True if actually moved]]
}
paragraph_first {
[[Advance to current paragraph first character]]
return: bool; [[True if actually moved]]
}
paragraph_last {
[[Advance to current paragraph last character]]
return: bool; [[True if actually moved]]
}
paragraph_next {
[[Advances to the start of the next text node]]
return: bool; [[True if actually moved]]
}
paragraph_prev {
[[Advances to the end of the previous text node]]
return: bool; [[True if actually moved]]
}
```
Reviewers: woohyun, tasn, segfaultxavi
Reviewed By: woohyun
Subscribers: a.srour, bu5hm4n, segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10542
2019-11-22 00:35:54 -08:00
|
|
|
attributes,changed: void; [[Called when attributes change]]
|
|
|
|
layout,finished: void; [[Called when the object has been layed out]]
|
efl: Add missing event types
Summary:
All events must have a type now, otherwise bindings don't know how to handle
the event_info field.
Most of the missing event types were actually "void" (no event_info present).
Some struct definitions had to be moved to eo instead of h files, so they
are available to bindings. Some have not, and are marked with FIXME.
Some namespaces have been fixed (like Efl_Event_Cb -> Efl.Event_Cb).
In general, there are hundreds of changed files, but mostly to add a type which
was not present before, so there's no harm done.
Also, A lot of FIXMEs have been added which should be, like, fixed.
For example, some events can send different types of event_info, which is
very inconvenient (and error prone).
Test Plan: make with c# bindings works, make check and make examples work too.
Reviewers: cedric, q66, lauromoura
Subscribers: zmike
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D6169
2018-05-11 08:20:40 -07:00
|
|
|
style_insets,changed: void; [[Called when the property @.style_insets changed.]]
|
2016-07-11 04:18:19 -07:00
|
|
|
}
|
2016-05-24 06:11:03 -07:00
|
|
|
}
|