"blur { 6, ox = 1, oy = 1, src = a, color = '#004' }"
"blur { 3, ox = 1, oy = 1, color = 'black' }"
"blend { color = 'lime' }";
- Eina_Strbuf *buf;
o = code = efl_add(EFL_UI_TEXT_EDITABLE_CLASS, win,
efl_gfx_size_hint_weight_set(efl_added, 1.0, 1.0),
efl_event_callback_add(o, EFL_UI_TEXT_EVENT_CHANGED_USER, _code_changed, win);
// Insert filter code inside style string: DEFAULT='blah blah <here>'
- buf = eina_strbuf_new();
- eina_strbuf_append(buf, efl_canvas_text_style_get(o, NULL));
- eina_strbuf_insert(buf, " gfx_filter=code", eina_strbuf_length_get(buf) - 1);
efl_gfx_filter_program_set(o, code_filter, "code");
- efl_canvas_text_style_set(o, NULL, eina_strbuf_string_get(buf));
- eina_strbuf_free(buf);
+ efl_text_style_gfx_filter_set(o, "code");
// FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME
// Efl.Ui.Text doesn't seem to trigger the proper events during edit
Eina_Stringshare *font_source;
Eina_Stringshare *font_fallbacks;
Eina_Stringshare *font_lang;
+ Eina_Stringshare *gfx_filter_name;
unsigned int font_weight;
unsigned int font_slant;
unsigned int font_width;
static const char *underline_dash_widthstr = NULL;
static const char *underline_dash_gapstr = NULL;
static const char *underline_heightstr = NULL;
-static const char *gfx_filter = NULL;
+static const char *gfx_filterstr = NULL;
/**
* @page evas_textblock_style_page Evas Textblock Style Options
underline_dash_widthstr = eina_stringshare_add("underline_dash_width");
underline_dash_gapstr = eina_stringshare_add("underline_dash_gap");
underline_heightstr = eina_stringshare_add("underline_height");
- gfx_filter = eina_stringshare_add("gfx_filter"); // FIXME: bg, fg filters
+ gfx_filterstr = eina_stringshare_add("gfx_filter"); // FIXME: bg, fg filters
}
format_refcount++;
}
eina_stringshare_del(underline_dash_widthstr);
eina_stringshare_del(underline_dash_gapstr);
eina_stringshare_del(underline_heightstr);
- eina_stringshare_del(gfx_filter);
+ eina_stringshare_del(gfx_filterstr);
}
/**
fmt->underline_height = atof(param);
if (fmt->underline_height <= 0.0) fmt->underline_height = 1.0;
}
- else if (cmd == gfx_filter)
+ else if (cmd == gfx_filterstr)
{
/**
* @page evas_textblock_style_page Evas Textblock Style Options
fmt->font.font = evas_font_load(evas_obj->layer->evas->evas, fmt->font.fdesc,
fmt->font.source, (int)(((double) _FMT_INFO(size)) * evas_obj->cur->scale));
}
+ if (_FMT_INFO(gfx_filter_name))
+ {
+ if (!fmt->gfx_filter)
+ {
+ fmt->gfx_filter = calloc(1, sizeof(Efl_Canvas_Text_Filter));
+ eina_stringshare_replace(&fmt->gfx_filter->name,
+ _FMT_INFO(gfx_filter_name));
+ }
+ }
}
return fmt;
}
static void
+_efl_canvas_text_efl_text_style_gfx_filter_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED,
+ const char *gfx_filter_name)
+{
+ Eina_Stringshare *ngfx_filter_name;
+
+ if (_FMT_INFO(gfx_filter_name) != gfx_filter_name)
+ {
+ ngfx_filter_name = eina_stringshare_add(gfx_filter_name);
+ if (_FMT_INFO(gfx_filter_name) == ngfx_filter_name)
+ {
+ /* Already stringshared here, unref */
+ eina_stringshare_del(ngfx_filter_name);
+ }
+ else
+ {
+ // Set immediately, load style_gfx_filter_name later
+ _FMT_INFO(gfx_filter_name) = ngfx_filter_name;
+ _canvas_text_format_changed(obj, o);
+ }
+ }
+}
+
+static const char *
+_efl_canvas_text_efl_text_style_gfx_filter_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
+{
+ return _FMT(gfx_filter->name);
+}
+
+static void
_efl_canvas_text_efl_text_format_format_ellipsis_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, double value EINA_UNUSED)
{
_FMT_SET(ellipsis, value);