forked from enlightenment/edi
Add a cursor to the view.
Create a backing data structure to start tracking more useful widget information
This commit is contained in:
parent
a36b687a47
commit
d9c5fe08b9
|
@ -40,6 +40,8 @@ _elm_code_test_welcome_setup(Evas_Object *parent)
|
|||
code = elm_code_create();
|
||||
widget = elm_code_widget_add(parent, code);
|
||||
elm_code_widget_font_size_set(widget, 14);
|
||||
elm_code_widget_editable_set(widget, EINA_TRUE);
|
||||
|
||||
_append_line(code->file, "Hello World, Elm Code!");
|
||||
elm_code_file_line_token_add(code->file, 1, 14, 21, ELM_CODE_TOKEN_TYPE_COMMENT);
|
||||
_append_line(code->file, "");
|
||||
|
|
|
@ -33,6 +33,7 @@ typedef enum {
|
|||
ELM_CODE_TOKEN_TYPE_REMOVED,
|
||||
ELM_CODE_TOKEN_TYPE_CHANGED,
|
||||
|
||||
ELM_CODE_TOKEN_TYPE_CURSOR, // a pseudo type used for styling but may not be set on a cell
|
||||
ELM_CODE_TOKEN_TYPE_COUNT
|
||||
} Elm_Code_Token_Type;
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ static void _elm_code_widget_fill_line_token(Evas_Textgrid_Cell *cells, int coun
|
|||
}
|
||||
}
|
||||
|
||||
EAPI void elm_code_widget_fill_line_tokens(Evas_Textgrid_Cell *cells, int count, Elm_Code_Line *line)
|
||||
EAPI void elm_code_widget_fill_line_tokens(Evas_Textgrid_Cell *cells, unsigned int count, Elm_Code_Line *line)
|
||||
{
|
||||
Eina_List *item;
|
||||
Elm_Code_Token *token;
|
||||
|
@ -73,6 +73,7 @@ static void _elm_code_widget_fill_line(Evas_Object *o, Evas_Textgrid_Cell *cells
|
|||
char *chr;
|
||||
unsigned int length, x;
|
||||
int w;
|
||||
ELM_CODE_WIDGET_DATA_GET(o, widget);
|
||||
|
||||
if (!_elm_code_widget_resize(o))
|
||||
return;
|
||||
|
@ -103,6 +104,11 @@ static void _elm_code_widget_fill_line(Evas_Object *o, Evas_Textgrid_Cell *cells
|
|||
}
|
||||
|
||||
elm_code_widget_fill_line_tokens(cells, w, line);
|
||||
if (widget->editable && widget->cursor_line == line->number)
|
||||
{
|
||||
if (widget->cursor_col < (unsigned int) w)
|
||||
cells[widget->cursor_col].bg = ELM_CODE_TOKEN_TYPE_CURSOR;
|
||||
}
|
||||
|
||||
evas_object_textgrid_update_add(o, 0, line->number - 1, w, 1);
|
||||
}
|
||||
|
@ -180,11 +186,10 @@ _elm_code_widget_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
|
|||
EAPI Evas_Object *elm_code_widget_add(Evas_Object *parent, Elm_Code *code)
|
||||
{
|
||||
Evas_Object *o;
|
||||
Elm_Code_Widget *widget;
|
||||
|
||||
o = evas_object_textgrid_add(parent);
|
||||
|
||||
elm_code_widget_font_size_set(o, 10);
|
||||
|
||||
// setup status colors
|
||||
evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_STATUS_TYPE_DEFAULT,
|
||||
36, 36, 36, 255);
|
||||
|
@ -216,17 +221,38 @@ EAPI Evas_Object *elm_code_widget_add(Evas_Object *parent, Elm_Code *code)
|
|||
evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_TOKEN_TYPE_CHANGED,
|
||||
54, 54, 255, 255);
|
||||
|
||||
// the style for a cursor - this is a special token and will be applied to the background
|
||||
evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_TOKEN_TYPE_CURSOR,
|
||||
205, 205, 54, 255);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _elm_code_widget_resize_cb, code);
|
||||
|
||||
eo_do(o,eo_event_callback_add(&ELM_CODE_EVENT_LINE_SET_DONE, _elm_code_widget_line_cb, code));
|
||||
eo_do(o,eo_event_callback_add(&ELM_CODE_EVENT_FILE_LOAD_DONE, _elm_code_widget_file_cb, code));
|
||||
|
||||
widget = calloc(1, sizeof(*widget));
|
||||
widget->code = code;
|
||||
widget->cursor_line = 1;
|
||||
widget->cursor_col = 1;
|
||||
evas_object_data_set(o, ELM_CODE_WIDGET_DATA_KEY, widget);
|
||||
code->widgets = eina_list_append(code->widgets, o);
|
||||
|
||||
elm_code_widget_font_size_set(o, 10);
|
||||
return o;
|
||||
}
|
||||
|
||||
EAPI void elm_code_widget_font_size_set(Evas_Object *widget, int size)
|
||||
EAPI void elm_code_widget_font_size_set(Evas_Object *obj, Evas_Font_Size size)
|
||||
{
|
||||
evas_object_textgrid_font_set(widget, "Mono", size * elm_config_scale_get());
|
||||
ELM_CODE_WIDGET_DATA_GET(obj, widget);
|
||||
|
||||
widget->font_size = size;
|
||||
evas_object_textgrid_font_set(obj, "Mono", size * elm_config_scale_get());
|
||||
}
|
||||
|
||||
EAPI void elm_code_widget_editable_set(Evas_Object *obj, Eina_Bool editable)
|
||||
{
|
||||
ELM_CODE_WIDGET_DATA_GET(obj, widget);
|
||||
|
||||
widget->editable = editable;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -13,6 +13,31 @@ extern "C" {
|
|||
* @brief These routines are used for rendering instances of Elm Code.
|
||||
*/
|
||||
|
||||
typedef struct _Elm_Code_Widget
|
||||
{
|
||||
Elm_Code *code;
|
||||
|
||||
Evas_Font_Size font_size;
|
||||
unsigned int cursor_line, cursor_col;
|
||||
Eina_Bool editable;
|
||||
|
||||
} Elm_Code_Widget;
|
||||
|
||||
#define ELM_CODE_WIDGET_DATA_KEY "Elm_Code_Widget"
|
||||
#define ELM_CODE_WIDGET_DATA_GET(o, ptr, ...) \
|
||||
Elm_Code_Widget *ptr; \
|
||||
ptr = evas_object_data_get(o, ELM_CODE_WIDGET_DATA_KEY);
|
||||
|
||||
#define ELM_CODE_WIDGET_DATA_GET_OR_RETURN(o, ptr, ...) \
|
||||
Elm_Code_Widget *ptr; \
|
||||
ptr = evas_object_data_get(o, ELM_CODE_WIDGET_DATA_KEY);\
|
||||
if (EINA_UNLIKELY(!ptr)) \
|
||||
{ \
|
||||
CRI("no widget data for object %p (%s)", \
|
||||
o, evas_object_type_get(o)); \
|
||||
return __VA_ARGS__; \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief UI Loading functions.
|
||||
* @defgroup Init Creating a widget to render an Elm Code backend
|
||||
|
@ -25,11 +50,13 @@ extern "C" {
|
|||
|
||||
EAPI Evas_Object *elm_code_widget_add(Evas_Object *parent, Elm_Code *code);
|
||||
|
||||
EAPI void elm_code_widget_font_size_set(Evas_Object *widget, int size);
|
||||
EAPI void elm_code_widget_font_size_set(Evas_Object *widget, Evas_Font_Size size);
|
||||
|
||||
EAPI void elm_code_widget_editable_set(Evas_Object *widget, Eina_Bool editable);
|
||||
|
||||
EAPI void elm_code_widget_fill(Evas_Object *o, Elm_Code *code);
|
||||
|
||||
EAPI void elm_code_widget_fill_line_tokens(Evas_Textgrid_Cell *cells, int count, Elm_Code_Line *line);
|
||||
EAPI void elm_code_widget_fill_line_tokens(Evas_Textgrid_Cell *cells, unsigned int count, Elm_Code_Line *line);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
|
Loading…
Reference in New Issue