Esempio n. 1
0
/* returns with and height for this part.
 *
 * depending on the value of the use_alternate_font_metrics flag, it will
 * either use evas_object_geometry_get() or the _advance_get() functions.
 *
 * The latter is useful if you want to make sure that width and height
 * are the same value for the same number of characters in the text.
 * This usually only makes sense for monospaced fonts.
 *
 * In future changes to this file, you probably should use this wrapper
 * function everywhere instead of calling evas_object_geometry_get()
 * directly.
 */
static inline void
part_get_geometry(Edje_Real_Part *rp, Evas_Coord *w, Evas_Coord *h)
{
    if (!rp->part->use_alternate_font_metrics)
        evas_object_geometry_get(rp->object, NULL, NULL, w, h);
    else
    {
        if (w) *w = evas_object_text_horiz_advance_get(rp->object);
        if (h) *h = evas_object_text_vert_advance_get(rp->object);
    }
}
Esempio n. 2
0
int EvasText::horizontalAdvance() const
{
    return evas_object_text_horiz_advance_get( o );
}
Esempio n. 3
0
END_TEST

/* Various text related geometries */
START_TEST(evas_text_geometries)
{
   START_TEXT_TEST();
   const char *buf = "Tests";
   const char *font = TEST_FONT_NAME;
   Evas_Font_Size size = 14;
   Evas_Coord prev;
   int i;
   Evas_Coord x, y, w, h, px;

   evas_object_text_text_set(to, buf);

   /* All should be 0 without a font set */
   fail_if(evas_object_text_ascent_get(to) != 0);
   fail_if(evas_object_text_descent_get(to) != 0);
   fail_if(evas_object_text_max_ascent_get(to) != 0);
   fail_if(evas_object_text_max_descent_get(to) != 0);
   fail_if(evas_object_text_horiz_advance_get(to) != 0);
   fail_if(evas_object_text_vert_advance_get(to) != 0);

   evas_object_text_font_set(to, font, size);

   /* Check that they are bigger than 0. */
   fail_if(evas_object_text_ascent_get(to) <= 0);
   fail_if(evas_object_text_descent_get(to) <= 0);
   fail_if(evas_object_text_max_ascent_get(to) <= 0);
   fail_if(evas_object_text_max_descent_get(to) <= 0);
   fail_if(evas_object_text_horiz_advance_get(to) <= 0);
   fail_if(evas_object_text_vert_advance_get(to) <= 0);

   /* Check that expanding the text does what we expect it */
   evas_object_text_text_set(to, "Test");
   prev = evas_object_text_ascent_get(to);
   evas_object_text_text_set(to, "Testing");
   fail_if(evas_object_text_ascent_get(to) != prev);

   evas_object_text_text_set(to, "Test");
   prev = evas_object_text_descent_get(to);
   evas_object_text_text_set(to, "Testing");
   fail_if(evas_object_text_descent_get(to) != prev);

   evas_object_text_text_set(to, "Test");
   prev = evas_object_text_max_ascent_get(to);
   evas_object_text_text_set(to, "Testing");
   fail_if(evas_object_text_max_ascent_get(to) != prev);

   evas_object_text_text_set(to, "Test");
   prev = evas_object_text_max_descent_get(to);
   evas_object_text_text_set(to, "Testing");
   fail_if(evas_object_text_max_descent_get(to) != prev);

   evas_object_text_text_set(to, "Test");
   prev = evas_object_text_horiz_advance_get(to);
   evas_object_text_text_set(to, "Testing");
   fail_if(evas_object_text_horiz_advance_get(to) <= prev);

   evas_object_text_text_set(to, "Test");
   prev = evas_object_text_vert_advance_get(to);
   evas_object_text_text_set(to, "Testing");
   fail_if(evas_object_text_vert_advance_get(to) != prev);

   /* Go through all the characters, making sure the geometries we get
    * are in a monotonically increasing order and that all sizes are
    * bigger than 0. */
   evas_object_text_text_set(to, "Testing...");
   x = 0;
   px = -100;
   for (i = 0 ; i < eina_unicode_utf8_get_len("Testing...") ; i++)
     {
        fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
        fail_if(x <= px);
        px = x;
        /* Get back the coords */
        fail_if(i != evas_object_text_char_coords_get(to, x + (w / 4),
                 y + (h / 2), NULL, NULL, NULL, NULL));
        /* Get back cursor position, if click on right half of char. */
        fail_if((i + 1) != evas_object_text_char_coords_get(to, x + ((3 * w) / 4),
                 y + (h / 2), &x, &y, &w, &h));
     }

   /* Last up to pos */
   Evas_Coord adv;
   int pos, prev_pos;
   evas_object_text_text_set(to, "Test - 유니코드");
   adv = evas_object_text_horiz_advance_get(to);
   pos = prev_pos = 0;
   for (x = 0 ; x <= (adv - 1) ; x++)
     {
        pos = evas_object_text_last_up_to_pos(to, x, 0);
        _ck_assert_int(pos, >=, prev_pos);
        prev_pos = pos;
     }
   pos = evas_object_text_last_up_to_pos(to, x, 0);
   ck_assert_int_eq(pos, -1);
   pos = evas_object_text_last_up_to_pos(to, -50, 0);
   ck_assert_int_eq(pos, -1);

   END_TEXT_TEST();
}
Esempio n. 4
0
END_TEST

#ifdef HAVE_FRIBIDI
START_TEST(evas_text_bidi)
{
   START_TEXT_TEST();
   const char *buf = "Test - בדיקה";
   int i;
   Evas_Coord x, y, w, h, px;
   const char *font = TEST_FONT_NAME;
   Evas_Font_Size size = 14;

   evas_object_text_font_set(to, font, size);

   evas_object_text_text_set(to, buf);
   fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_LTR);
   evas_object_text_text_set(to, "בדיקה");
   fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_RTL);

   /* With RTL text coords should be monotontically decreasing. */
   evas_object_text_text_set(to, "נסיון...");
   x = 0;
   px = 200;
   for (i = 0 ; i < eina_unicode_utf8_get_len("נסיון...") ; i++)
     {
        fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
        fail_if(x >= px);
        px = x;
        /* Get back the coords */
        fail_if(i != evas_object_text_char_coords_get(to, x + ((3 * w) / 4),
                 y + (h / 2), &x, &y, &w, &h));
     }

   /* Get back cursor position, if click on left half of char.  */
   evas_object_text_text_set(to, "שלום...");
   x = 0;
   px = 200;
   for (i = 0 ; i < eina_unicode_utf8_get_len("שלום...") ; i++)
     {
        fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
        fail_if(x >= px);
        px = x;
        fail_if((i + 1) != evas_object_text_char_coords_get(to, x + (w / 4),
                 y + (h / 2), &x, &y, &w, &h));
     }

   /* Bidi text is a bit more complex */
   evas_object_text_text_set(to, "Test - נסיון...");
   x = 0;
   px = -100;
   for (i = 0 ; i < eina_unicode_utf8_get_len("Test - ") ; i++)
     {
        fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
        fail_if(x <= px);
        px = x;
        /* Get back the coords */
        fail_if(i != evas_object_text_char_coords_get(to, x + (w / 4),
                 y + (h / 2), &x, &y, &w, &h));
     }

   /* First rtl char requires more specific handling */
   fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
   fail_if(x <= px);
   px = x;
   fail_if(i != evas_object_text_char_coords_get(to, x + ((3 * w) / 4),
            y + (h / 2), &x, &y, &w, &h));
   i++;
   for ( ; i < eina_unicode_utf8_get_len("Test - נסיון") ; i++)
     {
        fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
        fail_if(x >= px);
        px = x;
        /* Get back the coords */
        fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
                 y + (h / 2), &x, &y, &w, &h));
     }
   /* First ltr char requires more specific handling */
   fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
   fail_if(x <= px);
   px = x;
   i++;
   for ( ; i < eina_unicode_utf8_get_len("Test - נסיון...") ; i++)
     {
        fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
        fail_if(x <= px);
        px = x;
        /* Get back the coords */
        fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
                 y + (h / 2), &x, &y, &w, &h));
     }

   /* And with an rtl text */
   evas_object_text_text_set(to, "נסיון - test...");
   x = 0;
   px = 100;
   for (i = 0 ; i < eina_unicode_utf8_get_len("נסיון - ") ; i++)
     {
        fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
        fail_if(x >= px);
        px = x;
        /* Get back the coords */
        if (w == 0)
          {
             int cx;
             fail_if(!evas_object_text_char_pos_get(to, i - 1, &cx, NULL, NULL, NULL));
             w = cx - x;
          }
        fail_if(i != evas_object_text_char_coords_get(to, x + (3 * w /4),
                 y + (h / 2), &x, &y, &w, &h));
     }

   /* First ltr char requires more specific handling */
   fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
   fail_if(x >= px);
   px = x;
   fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
            y + (h / 2), &x, &y, &w, &h));
   i++;
   for ( ; i < eina_unicode_utf8_get_len("נסיון - test") ; i++)
     {
        fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
        fail_if(x <= px);
        px = x;
        /* Get back the coords */
        fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
                 y + (h / 2), &x, &y, &w, &h));
     }
   /* First rtl char requires more specific handling */
   fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
   fail_if(x >= px);
   px = x;
   i++;
   for ( ; i < eina_unicode_utf8_get_len("נסיון - test...") ; i++)
     {
        fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
        fail_if(x >= px);
        px = x;
        /* Get back the coords */
        fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
                 y + (h / 2), &x, &y, &w, &h));
     }

   /* And some last up to pos tests */
   Evas_Coord adv;
   int pos, prev_pos;
   evas_object_text_text_set(to, "Test - נסיון...");
   adv = evas_object_text_horiz_advance_get(to);
   pos = prev_pos = 0;
   for (x = 0 ; x <= (adv - 1) ; x++)
     {
        pos = evas_object_text_last_up_to_pos(to, x, 0);
        _ck_assert_int(pos, >=, prev_pos);
        prev_pos = pos;
     }
   pos = evas_object_text_last_up_to_pos(to, x, 0);
   fail_if(pos != -1);
   pos = evas_object_text_last_up_to_pos(to, -50, 0);
   fail_if(pos != -1);

   END_TEXT_TEST();
}
Esempio n. 5
0
void setup(void)
{
	Evas_Coord pw;
	int ex, ey, ew, eh;
	Evas_Coord width, height;
	char msg[] =
	    "The Etox Test utility consists in a series "
	    "of test suites designed to exercise all of "
	    "the etox functions.\n"
	    "Informational messages will be displayed here, "
	    "the test text will be presented in the colored "
	    "rectangle below.\n"
	    "To start a test suite, select it from the "
	    "navigation panel on the left.\n";

	/* Create interface */

	/* Background */
	o_bg = evas_object_image_add(evas);
	evas_object_image_file_set(o_bg, IM "bg.png", IM "bg.png");
	evas_object_resize(o_bg, win_w, win_h);
	evas_object_image_fill_set(o_bg, 0, 0, win_w, win_h);
	evas_object_move(o_bg, 0, 0);
	evas_object_layer_set(o_bg, 0);
	evas_object_show(o_bg);

	/* Panel */
	setup_panel(evas);

	evas_object_geometry_get(o_panel, NULL, NULL, &pw, NULL);

	ey = win_h / 2;
	ew = win_w - pw - 20;
	eh = ey - 10;
	ex = pw + 10;
	ey += 10;

	/* Create message etox */
	e_msg = etox_new_all(evas, ex, 10, ew, eh , 255, ETOX_ALIGN_LEFT);
	etox_context_set_align(etox_get_context(e_msg), ETOX_ALIGN_LEFT);
	etox_context_set_font(etox_get_context(e_msg), "sinon", 14);
	etox_context_set_style(etox_get_context(e_msg), "shadow");
	etox_context_set_color(etox_get_context(e_msg), 225, 225, 225, 255);
	etox_set_soft_wrap(e_msg, 1);
	etox_set_text(e_msg, msg);
	etox_set_alpha(e_msg, 255);
	evas_object_layer_set(e_msg, 1000);
	evas_object_show(e_msg);

	/* Setup test etox */
	/* Setup test etox background */
	o_bg_etox = evas_object_rectangle_add(evas);
	evas_object_move(o_bg_etox, ex, ey);
	evas_object_resize(o_bg_etox, ew, eh);
	evas_object_color_set(o_bg_etox, 0, 100, 100, 100);
	evas_object_layer_set(o_bg_etox, 100);
	evas_object_show(o_bg_etox);

	/* Clip rectangle for bounding where the test text is drawn */
	clip_test = evas_object_rectangle_add(evas);
	evas_object_move(clip_test, ex, ey);
	evas_object_resize(clip_test, ew, eh);
	evas_object_show(clip_test);

	/* Create test etox */
	e_test = etox_new_all(evas, ex, ey, ew, eh, 255, ETOX_ALIGN_CENTER);
	etox_context_set_font(etox_get_context(e_test), "sinon", 14);
	etox_context_set_style(etox_get_context(e_test), "plain");
	etox_context_set_color(etox_get_context(e_test), 225, 225, 225, 255);
	etox_set_text(e_test, "");
	evas_object_clip_set(e_test, clip_test);
	etox_set_alpha(e_test, 255);
	evas_object_layer_set(e_test, 1000);

	/*
	 * Create the next test button
	 */
	o_next_box = evas_object_image_add(evas);
	evas_object_image_file_set(o_next_box,
			IM "panel_button1.png",
			IM "panel_button1.png");
	evas_object_image_border_set(o_next_box, 3, 3, 3, 3);
	evas_object_layer_set(o_next_box, 1000);
	evas_object_hide(o_next_box);

	o_txt_next_box = evas_object_text_add(evas);
	evas_object_text_font_set(o_txt_next_box, "andover", 24);
       	evas_object_text_text_set(o_txt_next_box, "Next");
	evas_object_color_set(o_txt_next_box, 0, 0, 0, 160);
	evas_object_layer_set(o_txt_next_box, 1000);
	evas_object_move(o_next_box, 516, 150);
	evas_object_move(o_txt_next_box, 519, 152);

	width = evas_object_text_horiz_advance_get(o_txt_next_box);
	height = evas_object_text_vert_advance_get(o_txt_next_box);

	width += 10;
	height += 5;

	evas_object_resize(o_next_box, width, height);
	evas_object_image_fill_set(o_next_box, 0, 0, width, height);
	evas_object_hide(o_txt_next_box);
	evas_object_event_callback_add(o_txt_next_box, EVAS_CALLBACK_MOUSE_DOWN,
			  next_test, NULL);

	/*
	 * Create the previous test button
	 */
	o_prev_box = evas_object_image_add(evas);
	evas_object_image_file_set(o_prev_box,
			IM "panel_button1.png",
			IM "panel_button1.png");
	evas_object_image_border_set(o_prev_box, 3, 3, 3, 3);
	evas_object_layer_set(o_prev_box, 1000);
	evas_object_hide(o_prev_box);

	o_txt_prev_box = evas_object_text_add(evas);
	evas_object_text_font_set(o_txt_prev_box, "andover", 24);
	evas_object_text_text_set(o_txt_prev_box, "Previous");
	evas_object_color_set(o_txt_prev_box, 0, 0, 0, 160);
	evas_object_layer_set(o_txt_prev_box, 1000);
	evas_object_move(o_prev_box, 416, 150);
	evas_object_move(o_txt_prev_box, 419, 152);

	width = evas_object_text_horiz_advance_get(o_txt_prev_box);
	height = evas_object_text_vert_advance_get(o_txt_prev_box);

	width += 10;
	height += 5;

	evas_object_resize(o_prev_box, width, height);
	evas_object_image_fill_set(o_prev_box, 0, 0, width, height);
	evas_object_hide(o_txt_prev_box);
	evas_object_event_callback_add(o_txt_prev_box, EVAS_CALLBACK_MOUSE_DOWN,
			  prev_test, NULL);
}