"size=32x32 href=emoticon");
}
-const char *_wrap_modes[4] = { "none", "char", "word", "mixed" };
-
static void
my_efl_ui_text_bt_6(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
- char style[128];
- Evas_Object *en = data;
- size_t idx = (size_t) efl_key_data_get(en, "wrap_idx");
- idx = (idx + 1) % 4;
- efl_key_data_set(en, "wrap_idx", (void *)idx);
-
- sprintf(style, "DEFAULT='font=Sans font_size=12 color=#fff wrap=%s'",
- _wrap_modes[idx]);
- efl_canvas_text_style_set(en, NULL, style);
- printf("wrap mode changed to '%s'\n", _wrap_modes[idx]);
-
+ Eo *text_obj = data;
+
+ Efl_Text_Format_Wrap wrap = efl_text_format_wrap_get(text_obj);
+
+ switch(wrap)
+ {
+ case EFL_TEXT_FORMAT_WRAP_NONE:
+ wrap = EFL_TEXT_FORMAT_WRAP_CHAR;
+ break;
+ case EFL_TEXT_FORMAT_WRAP_CHAR:
+ wrap = EFL_TEXT_FORMAT_WRAP_WORD;
+ break;
+ case EFL_TEXT_FORMAT_WRAP_WORD:
+ wrap = EFL_TEXT_FORMAT_WRAP_MIXED;
+ break;
+ case EFL_TEXT_FORMAT_WRAP_MIXED:
+ wrap = EFL_TEXT_FORMAT_WRAP_NONE;
+ break;
+ default:
+ break;
+ }
+ efl_text_format_wrap_set(text_obj, wrap);
}
static void
elm_win_resize_object_add(win, bx);
evas_object_show(bx);
- en = efl_add(EFL_UI_TEXT_CLASS, win);
+ en = efl_add(EFL_UI_TEXT_CLASS, win,
+ efl_text_format_multiline_set(efl_added, EINA_TRUE));
printf("Added Efl.Ui.Text object\n");
efl_key_data_set(en, "wrap_idx", 0);
Evas_Textblock_Cursor *preedit_start, *preedit_end;
Eina_List *seq;
char *selection;
- Eina_Bool multiline : 1;
Eina_Bool composing : 1;
Eina_Bool selecting : 1;
Eina_Bool have_selection : 1;
super = evas_key_modifier_is_set(ev->modifiers, "Super");
altgr = evas_key_modifier_is_set(ev->modifiers, "AltGr");
#endif
- multiline = en->multiline;
+ multiline = efl_text_format_multiline_get(obj);
/* Translate some keys to strings. */
if (!strcmp(ev->key, "Tab"))
Evas_Event_Mouse_Move *ev = event_info;
Evas_Coord x, y, w, h;
Evas_Textblock_Cursor *tc;
+ Eina_Bool multiline;
+
+ multiline = efl_text_format_multiline_get(obj);
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
cx = ev->cur.canvas.x - x;
cy = ev->cur.canvas.y - y;
- if (en->multiline)
+ if (multiline)
{
efl_canvas_text_cursor_coord_set(cur, cx, cy);
}
_efl_ui_internal_text_interactive_efl_object_constructor(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
{
en->select_allow = EINA_TRUE;
- en->multiline = EINA_TRUE;
en->editable = EINA_TRUE;
return efl_constructor(efl_super(obj, MY_CLASS));
}
ecore_imf_context_input_panel_language_set(en->imf_context, ECORE_IMF_INPUT_PANEL_LANG_ALPHABET);
#endif
- if (en->multiline)
+ if (efl_text_format_multiline_get(obj))
ecore_imf_context_input_hint_set(en->imf_context,
ecore_imf_context_input_hint_get(en->imf_context) | ECORE_IMF_INPUT_HINT_MULTILINE);
}
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_ui_text_interactive_multiline_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *pd, Eina_Bool enabled)
-{
- pd->multiline = enabled;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_internal_text_interactive_efl_ui_text_interactive_multiline_get(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *pd)
-{
- return pd->multiline;
-}
-
-EOLIAN static void
_efl_ui_internal_text_interactive_efl_ui_text_interactive_editable_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd, Eina_Bool editable)
{
sd->editable = editable;
const char *text;
const char *file;
Elm_Text_Format format;
- Evas_Coord last_w, ent_mw, ent_mh;
+ Evas_Coord ent_w, ent_h;
Evas_Coord downx, downy;
Evas_Coord ox, oy;
Eina_List *anchors;
_efl_ui_text_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Text_Data *sd)
{
Evas_Coord minw, minh, resw, resh;
+ Evas_Coord fw, fh;
+ Eo *sw;
+ Eina_Bool wrap;
evas_object_geometry_get(obj, NULL, NULL, &resw, &resh);
- if (!sd->changed && (sd->last_w == resw))
- {
- if (sd->scroll)
- {
- if (sd->text_obj)
- {
- Evas_Coord vw = 0, vh = 0, h = 0;
+ sw = edje_object_part_swallow_get(sd->entry_edje, "elm.text");
+ if (!sw) return;
- // Called for line wrapping + scrolling; use the viewport
- // width and the formatted height as proper constraints.
- elm_interface_scrollable_content_viewport_geometry_get
- (obj, NULL, NULL, &vw, &vh);
+ wrap = efl_text_format_wrap_get(sw);
- efl_canvas_text_size_formatted_get(sd->text_obj, NULL, &h);
- if (vh > h) h = vh;
+ if (!sd->changed && (resw == sd->ent_w) && (resh == sd->ent_h)) return;
+
+ sd->changed = EINA_FALSE;
+ sd->ent_w = resw;
+ sd->ent_h = resh;
- evas_object_resize(sd->entry_edje, vw, h);
- }
- }
- return;
- }
evas_event_freeze(evas_object_evas_get(obj));
- sd->changed = EINA_FALSE;
- sd->last_w = resw;
if (sd->scroll)
{
- Evas_Coord vw = 0, vh = 0, vmw = 0, vmh = 0, w = -1, h = -1;
+ Evas_Coord vw, vh;
+ Evas_Coord tw, th;
+ elm_interface_scrollable_content_viewport_geometry_get(obj, NULL, NULL, &vw, &vh);
+ efl_gfx_size_set(sd->entry_edje, vw, vh);
+ efl_gfx_size_get(sw, &tw, &th);
+ efl_canvas_text_size_formatted_get(sw, &fw, &fh);
+ evas_object_size_hint_min_set(sw, fw, fh);
+ edje_object_size_min_calc(sd->entry_edje, &minw, &minh);
+ evas_object_size_hint_min_set(sw, -1, -1);
- // XXX: no need for the following line. It's been commented out.
- // sd->scr_edje is the resize_object of this widget. It's already
- // resized when gfx_size_set was called on this widget.
- //evas_object_resize(sd->scr_edje, resw, resh);
+ if (vw > minw) minw = vw;
+ efl_gfx_size_set(sd->entry_edje, minw, minh);
- edje_object_size_min_calc(sd->scr_edje, &vmw, &vmh);
- elm_interface_scrollable_content_viewport_geometry_get
- (obj, NULL, NULL, &vw, &vh);
- edje_object_size_min_restricted_calc
- (sd->entry_edje, &minw, &minh, vw, 0);
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
-
- /* This is a hack to workaround the way min size hints
- * are treated. If the minimum width is smaller than the
- * restricted width, it means the minimum doesn't
- * matter. */
- if (minw <= vw)
+ if (!efl_text_format_multiline_get(sw))
{
- Evas_Coord ominw = -1;
-
- efl_gfx_size_hint_combined_min_get(sd->entry_edje, &ominw, NULL);
- minw = ominw;
+ evas_object_size_hint_min_set(obj, -1, minh);
}
- sd->ent_mw = minw;
- sd->ent_mh = minh;
-
- if ((minw > 0) && (vw < minw)) vw = minw;
- if (minh > vh) vh = minh;
-
- if (sd->single_line) h = vmh + minh;
- else h = vmh;
-
- evas_object_resize(sd->entry_edje, vw, vh);
- evas_object_size_hint_min_set(obj, w, h);
-
- if (sd->single_line)
- evas_object_size_hint_max_set(obj, -1, h);
- else
- evas_object_size_hint_max_set(obj, -1, -1);
}
else
{
- Evas_Coord ominw, ominh;
- Eo *sw = edje_object_part_swallow_get(sd->entry_edje, "elm.text");
- efl_canvas_text_size_native_get(sw, &resw, &resh);
- evas_object_size_hint_min_set(sw, resw, resh);
- edje_object_size_min_calc(sd->entry_edje, &ominw, &ominh);
- evas_object_size_hint_min_set(obj, ominw, ominh);
+ efl_canvas_text_size_formatted_get(sw, &fw, &fh);
+ evas_object_size_hint_min_set(sw, fw, fh);
+ edje_object_size_min_calc(sd->entry_edje, &minw, &minh);
+ evas_object_size_hint_min_set(sw, -1, -1);
+ if (wrap == EFL_TEXT_FORMAT_WRAP_NONE)
+ {
+ evas_object_size_hint_min_set(obj, minw, minh);
+ }
}
-
- _cursor_geometry_recalc(obj);
evas_event_thaw(evas_object_evas_get(obj));
evas_event_thaw_eval(evas_object_evas_get(obj));
+
+ _cursor_geometry_recalc(obj);
}
static void
{
Evas_Coord minh;
const char *text;
+ Eina_Bool single_line;
+ Eo *obj = data;
EFL_UI_TEXT_DATA_GET(data, sd);
+ single_line = !efl_text_format_multiline_get(obj);
+
evas_event_freeze(evas_object_evas_get(data));
sd->changed = EINA_TRUE;
/* Reset the size hints which are no more relevant. Keep the
evas_object_size_hint_min_get(data, NULL, &minh);
evas_object_size_hint_min_set(data, -1, minh);
+ if (sd->single_line != single_line)
+ {
+ sd->single_line = single_line;
+ elm_obj_widget_theme_apply(data);
+ }
+
elm_layout_sizing_eval(data);
ELM_SAFE_FREE(sd->text, eina_stringshare_del);
ELM_SAFE_FREE(sd->delay_write, ecore_timer_del);
elm_interface_scrollable_content_viewport_geometry_get
(obj, NULL, NULL, &vw, &vh);
- if (vw < sd->ent_mw) vw = sd->ent_mw;
- if (vh < sd->ent_mh) vh = sd->ent_mh;
evas_object_resize(sd->entry_edje, vw, vh);
}
priv->editable = EINA_TRUE;
priv->sel_allow = EINA_TRUE;
+ priv->single_line = !efl_text_format_multiline_get(text_obj);
+
priv->drop_format = ELM_SEL_FORMAT_MARKUP | ELM_SEL_FORMAT_IMAGE;
elm_drop_target_add(obj, priv->drop_format,
_dnd_enter_cb, NULL,
elm_widget_on_show_region_hook_set(obj, NULL, NULL);
}
- sd->last_w = -1;
_update_decorations(obj);
elm_obj_widget_theme_apply(obj);
}