/** * Gets the cursor position at the coords ( @a x, @a y ). It's used to know * where to place the cursor or the selection bound on mouse evevents. * * @param editable an editable object * @param x the x coord, relative to the editable object * @param y the y coord, relative to the editable object * @return Returns the position where to place the cursor according to the * given coords */ EAPI int e_editable_pos_get_from_coords(Evas_Object *editable, Evas_Coord x, Evas_Coord y) { E_Editable_Smart_Data *sd; const Evas_Object *text_obj; Evas_Coord ox, oy; Evas_Coord tx, ty, tw, th; Evas_Coord cx, cw; Evas_Coord canvas_x, canvas_y; int index, pos, i, j; const char *text; if (evas_object_smart_smart_get(editable) != _e_editable_smart) SMARTERR(0); if ((!editable) || (!(sd = evas_object_smart_data_get(editable)))) return 0; if (!(text_obj = edje_object_part_object_get(sd->text_object, "e.text.text"))) return 0; evas_object_geometry_get(editable, &ox, &oy, NULL, NULL); evas_object_geometry_get(text_obj, &tx, &ty, &tw, &th); canvas_x = ox + x; canvas_y = oy + y; if ((canvas_y < ty) || (canvas_x < tx)) pos = 0; else if ((canvas_y > (ty + th)) || (canvas_x > (tx + tw))) pos = sd->unicode_length; else { index = evas_object_text_char_coords_get(text_obj, canvas_x - tx, canvas_y - ty, &cx, NULL, &cw, NULL); text = evas_object_text_text_get(text_obj); if ((index >= 0) && (text)) { if ((canvas_x - tx) > (cx + (cw / 2))) index++; i = 0; j = -1; pos = 0; while ((i < index) && (j != i)) { pos++; j = i; i = evas_string_char_next_get(text, i, NULL); } if (pos > sd->unicode_length) pos = sd->unicode_length; } else pos = 0; } return pos; }
END_TEST START_TEST(evas_text_style) { Evas_Coord l, r, t, b; START_TEXT_TEST(); const char *buf = "Test"; evas_object_text_text_set(to, buf); evas_object_text_style_set(to, EVAS_TEXT_STYLE_PLAIN); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 0) || (r != 0) || (t != 0) || (b != 0)); evas_object_text_style_set(to, EVAS_TEXT_STYLE_SHADOW); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 0) || (r != 1) || (t != 0) || (b != 1)); evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 1) || (r != 1) || (t != 1) || (b != 1)); evas_object_text_style_set(to, EVAS_TEXT_STYLE_SOFT_OUTLINE); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2)); evas_object_text_style_set(to, EVAS_TEXT_STYLE_GLOW); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2)); evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE_SHADOW); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2)); evas_object_text_style_set(to, EVAS_TEXT_STYLE_FAR_SHADOW); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2)); evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3)); evas_object_text_style_set(to, EVAS_TEXT_STYLE_SOFT_SHADOW); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3)); evas_object_text_style_set(to, EVAS_TEXT_STYLE_FAR_SOFT_SHADOW); evas_object_text_style_pad_get(to, &l, &r, &t, &b); fail_if((l != 0) || (r != 4) || (t != 0) || (b != 4)); fail_if(strcmp(evas_object_text_text_get(to), buf)); END_TEXT_TEST(); }
/* Animate the string in a label */ static Eina_Bool label_move(void *ov){ char *str,t; int len; str = strdup(evas_object_text_text_get(ov)); t = *str; len = strlen(str); memmove(str,str+1,len - 1); str[len - 1] = t; evas_object_text_text_set(ov, str); free(str); return true; }
/* Gets the geometry of the char according to its utf-8 pos */ static int _e_editable_char_geometry_get_from_pos(Evas_Object *editable, int utf_pos, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) { E_Editable_Smart_Data *sd; const Evas_Object *text_obj; const char *text; Evas_Coord x, w; int index = 0, i, last_pos, ret; if (cx) *cx = 0; if (cy) *cy = 0; if (cw) *cw = 0; if (ch) *ch = 0; if ((!editable) || (!(sd = evas_object_smart_data_get(editable)))) return 0; if (!(text_obj = edje_object_part_object_get(sd->text_object, "e.text.text"))) return 0; text = evas_object_text_text_get(text_obj); if ((!text) || (sd->unicode_length <= 0) || (utf_pos <= 0)) { e_editable_char_size_get(editable, cw, ch); return 1; } else { if (utf_pos >= sd->unicode_length) { utf_pos = sd->unicode_length - 1; last_pos = 1; } else last_pos = 0; for (i = 0; i < utf_pos; i++) index = evas_string_char_next_get(text, index, NULL); ret = evas_object_text_char_pos_get(text_obj, index, &x, cy, &w, ch); if (cx) *cx = x - 1 + (last_pos ? w : 0); if (cw) *cw = last_pos ? 1 : w; return ret; } }
const char* EvasText::text() const { return evas_object_text_text_get( o ); }
END_TEST #define _CHECK_SET_GET(x) \ do \ { \ Evas_Coord r, g, b, a; \ evas_object_text_##x##_set(to, 100, 150, 125, 12); \ evas_object_text_##x##_get(to, &r, &g, &b, &a); \ fail_if((r != 100) || (g != 150) || (b != 125) || (a != 12)); \ /* Set to the same value */ \ evas_object_text_##x##_set(to, 100, 150, 125, 12); \ evas_object_text_##x##_get(to, &r, &g, &b, &a); \ fail_if((r != 100) || (g != 150) || (b != 125) || (a != 12)); \ } \ while (0) START_TEST(evas_text_set_get) { START_TEXT_TEST(); const char *buf = "Test - בדיקה"; /* Text */ evas_object_text_text_set(to, buf); fail_if(strcmp(evas_object_text_text_get(to), buf)); /* Colors */ _CHECK_SET_GET(shadow_color); _CHECK_SET_GET(glow_color); _CHECK_SET_GET(glow2_color); _CHECK_SET_GET(outline_color); /* Font and size */ const char *font = TEST_FONT_NAME; Evas_Font_Size size = 14; evas_object_text_font_set(to, font, size); font = NULL; size = 0; evas_object_text_font_get(to, &font, &size); fail_if(strcmp(font, TEST_FONT_NAME)); fail_if(size != 14); evas_object_text_font_set(to, font, size); font = NULL; size = 0; evas_object_text_font_get(to, &font, &size); fail_if(strcmp(font, TEST_FONT_NAME)); fail_if(size != 14); font = "NON-EXISTING-FONT"; size = 14; evas_object_text_font_set(to, font, size); font = NULL; size = 0; evas_object_text_font_get(to, &font, &size); fail_if(strcmp(font, "NON-EXISTING-FONT")); font = "Serif"; size = 2; evas_object_text_font_set(to, font, size); font = NULL; size = 0; evas_object_text_font_get(to, &font, &size); fail_if(strcmp(font, "Serif")); fail_if(size != 2); evas_object_text_font_source_set(to, "/usr/share/fonts/Sans.ttf"); font = evas_object_text_font_source_get(to); fail_if(strcmp(font, "/usr/share/fonts/Sans.ttf")); evas_object_text_font_source_set(to, "/usr/share/fonts/Sans.ttf"); font = evas_object_text_font_source_get(to); fail_if(strcmp(font, "/usr/share/fonts/Sans.ttf")); /* BiDi Delimiters */ evas_object_text_bidi_delimiters_set(to, ",.|"); fail_if(strcmp(evas_object_text_bidi_delimiters_get(to), ",.|")); evas_object_text_bidi_delimiters_set(to, ",|"); fail_if(strcmp(evas_object_text_bidi_delimiters_get(to), ",|")); evas_object_text_bidi_delimiters_set(to, NULL); fail_if(evas_object_text_bidi_delimiters_get(to)); evas_object_text_bidi_delimiters_set(to, ",|"); fail_if(strcmp(evas_object_text_bidi_delimiters_get(to), ",|")); /* Style */ evas_object_text_text_set(to, ""); evas_object_text_style_set(to, EVAS_TEXT_STYLE_SHADOW); fail_if(evas_object_text_style_get(to) != EVAS_TEXT_STYLE_SHADOW); evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE); fail_if(evas_object_text_style_get(to) != EVAS_TEXT_STYLE_OUTLINE); /* Rehinting */ evas_object_text_text_set(to, "Bla"); evas_font_hinting_set(evas, EVAS_FONT_HINTING_NONE); evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); evas_font_hinting_set(evas, EVAS_FONT_HINTING_BYTECODE); /* Direction of an empty text should be NEUTRAL */ evas_object_text_text_set(to, ""); fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_NEUTRAL); /* LTR paragraphs */ evas_object_text_text_set(to, "Test נסיון"); fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_LTR); /* RTL paragraphs */ evas_object_text_text_set(to, "נסיון test"); #ifdef HAVE_FRIBIDI fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_RTL); #else fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_LTR); #endif END_TEXT_TEST(); }
const std::string Text::getText() const { return evas_object_text_text_get( o ); }