221 lines
6.8 KiB
C
221 lines
6.8 KiB
C
/*
|
|
* TODO:
|
|
* * Test different font loading mechanisms.
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
# include "config.h"
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <Eina.h>
|
|
#include <Evas.h>
|
|
#include <Ecore_Evas.h>
|
|
|
|
#include "evas_suite.h"
|
|
#include "evas_tests_helpers.h"
|
|
|
|
#define TEST_FONT_SOURCE TESTS_SRC_DIR "/fonts/TestFont.eet"
|
|
#define TEST_TEXTBLOCK_FONT "font=DejaVuSans font_source=" TEST_FONT_SOURCE
|
|
#define TEST_TEXTBLOCK_FONT_SIZE "14"
|
|
#define TEST_TEXT_FONT "DejaVuSans,UnDotum"
|
|
#define TEST_TEXT_FONT_SIZE 14
|
|
|
|
static const char *style_buf =
|
|
"DEFAULT='" TEST_TEXTBLOCK_FONT " font_size="TEST_TEXTBLOCK_FONT_SIZE" color=#000 text_class=entry'"
|
|
"newline='br'"
|
|
"b='+ font_weight=bold'";
|
|
|
|
#define START_EVAS_OBJECT_SMART_TEST() \
|
|
Evas *evas; \
|
|
Evas_Object *smart_obj; \
|
|
evas = EVAS_TEST_INIT_EVAS(); \
|
|
smart_obj = evas_object_box_add(evas); \
|
|
fail_if(!smart_obj); \
|
|
do \
|
|
{ \
|
|
} \
|
|
while (0)
|
|
|
|
#define END_EVAS_OBJECT_SMART_TEST() \
|
|
do \
|
|
{ \
|
|
evas_object_del(smart_obj); \
|
|
evas_free(evas); \
|
|
} \
|
|
while (0)
|
|
|
|
#define ADD_EVAS_TEXTBLOCK() \
|
|
Evas_Object *tb; \
|
|
Evas_Textblock_Style *st; \
|
|
Evas_Textblock_Cursor *cur; \
|
|
evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \
|
|
tb = evas_object_textblock_add(evas); \
|
|
fail_if(!tb); \
|
|
evas_object_textblock_legacy_newline_set(tb, EINA_FALSE); \
|
|
st = evas_textblock_style_new(); \
|
|
fail_if(!st); \
|
|
evas_textblock_style_set(st, style_buf); \
|
|
fail_if(strcmp(style_buf, evas_textblock_style_get(st))); \
|
|
evas_object_textblock_style_set(tb, st); \
|
|
cur = evas_object_textblock_cursor_new(tb); \
|
|
do \
|
|
{ \
|
|
} \
|
|
while (0)
|
|
|
|
#define ADD_EVAS_TEXT() \
|
|
Evas_Object *to; \
|
|
evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \
|
|
to = evas_object_text_add(evas); \
|
|
fail_if(!to); \
|
|
evas_object_text_font_source_set(to, TEST_FONT_SOURCE); \
|
|
evas_object_text_font_set(to, TEST_TEXT_FONT, TEST_TEXT_FONT_SIZE); \
|
|
do \
|
|
{ \
|
|
} \
|
|
while (0)
|
|
|
|
#define DELETE_EVAS_TEXTBLOCK() \
|
|
do \
|
|
{ \
|
|
evas_textblock_cursor_free(cur); \
|
|
evas_object_del(tb); \
|
|
evas_textblock_style_free(st); \
|
|
} \
|
|
while (0)
|
|
|
|
#define DELETE_EVAS_TEXT() \
|
|
do \
|
|
{ \
|
|
evas_object_del(to); \
|
|
} \
|
|
while (0)
|
|
|
|
EFL_START_TEST(evas_object_smart_paragraph_direction)
|
|
{
|
|
START_EVAS_OBJECT_SMART_TEST();
|
|
|
|
ADD_EVAS_TEXTBLOCK();
|
|
evas_object_resize(tb, 500, 500);
|
|
evas_object_textblock_text_markup_set(tb, "%^&");
|
|
fail_if(strcmp(evas_object_textblock_text_markup_get(tb), "%^&"));
|
|
evas_object_paragraph_direction_set(tb, EVAS_BIDI_DIRECTION_INHERIT);
|
|
|
|
ADD_EVAS_TEXT();
|
|
evas_object_text_text_set(to, "%^&");
|
|
fail_if(strcmp(evas_object_text_text_get(to), "%^&"));
|
|
evas_object_paragraph_direction_set(to, EVAS_BIDI_DIRECTION_INHERIT);
|
|
|
|
/* Test evas_object_paragraph_direction_set API with smart objects. */
|
|
Evas_Object *smart_child = evas_object_box_add(evas);
|
|
Evas_BiDi_Direction dir;
|
|
Evas_Coord x, y, w, h;
|
|
Evas_Coord xx, yy, ww, hh;
|
|
|
|
evas_object_smart_member_add(smart_child, smart_obj);
|
|
evas_object_smart_member_add(tb, smart_child);
|
|
evas_object_smart_member_add(to, smart_child);
|
|
|
|
dir = EVAS_BIDI_DIRECTION_RTL;
|
|
evas_textblock_cursor_geometry_get(cur, &x, &y, &w, &h, &dir,
|
|
EVAS_TEXTBLOCK_CURSOR_UNDER);
|
|
fail_if(dir == EVAS_BIDI_DIRECTION_RTL);
|
|
fail_if((Evas_BiDi_Direction)evas_object_text_direction_get(to) == EVAS_BIDI_DIRECTION_RTL);
|
|
|
|
/* Change paragraph direction of smart parent object */
|
|
evas_object_paragraph_direction_set(smart_obj, EVAS_BIDI_DIRECTION_RTL);
|
|
dir = EVAS_BIDI_DIRECTION_LTR;
|
|
evas_textblock_cursor_geometry_get(cur, &xx, &yy, &ww, &hh, &dir,
|
|
EVAS_TEXTBLOCK_CURSOR_UNDER);
|
|
fail_if(dir != EVAS_BIDI_DIRECTION_RTL);
|
|
fail_if((x >= xx) || (y != yy) || (w != ww) || (h != hh));
|
|
fail_if((Evas_BiDi_Direction)evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_RTL);
|
|
|
|
/* The paragraph direction of smart member object has to be reset
|
|
if smart member object is removed from smart parent. */
|
|
evas_object_smart_member_del(smart_child);
|
|
|
|
dir = EVAS_BIDI_DIRECTION_RTL;
|
|
evas_textblock_cursor_geometry_get(cur, &x, &y, &w, &h, &dir,
|
|
EVAS_TEXTBLOCK_CURSOR_UNDER);
|
|
fail_if(dir == EVAS_BIDI_DIRECTION_RTL);
|
|
fail_if((x >= xx) || (y != yy) || (w != ww) || (h != hh));
|
|
fail_if((Evas_BiDi_Direction)evas_object_text_direction_get(to) == EVAS_BIDI_DIRECTION_RTL);
|
|
|
|
/* The paragraph direction of smart member object has to be changed
|
|
if smart member object is appended to smart parent. */
|
|
evas_object_smart_member_add(smart_child, smart_obj);
|
|
|
|
dir = EVAS_BIDI_DIRECTION_LTR;
|
|
evas_textblock_cursor_geometry_get(cur, &xx, &yy, &ww, &hh, &dir,
|
|
EVAS_TEXTBLOCK_CURSOR_UNDER);
|
|
fail_if(dir != EVAS_BIDI_DIRECTION_RTL);
|
|
fail_if((x >= xx) || (y != yy) || (w != ww) || (h != hh));
|
|
fail_if((Evas_BiDi_Direction)evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_RTL);
|
|
|
|
/* Ignore smart parent's paragraph direction */
|
|
evas_object_paragraph_direction_set(tb, EVAS_BIDI_DIRECTION_NEUTRAL);
|
|
evas_object_paragraph_direction_set(to, EVAS_BIDI_DIRECTION_NEUTRAL);
|
|
dir = EVAS_BIDI_DIRECTION_RTL;
|
|
evas_textblock_cursor_geometry_get(cur, &x, &y, &w, &h, &dir,
|
|
EVAS_TEXTBLOCK_CURSOR_UNDER);
|
|
fail_if(dir == EVAS_BIDI_DIRECTION_RTL);
|
|
fail_if((x >= xx) || (y != yy) || (w != ww) || (h != hh));
|
|
fail_if((Evas_BiDi_Direction)evas_object_text_direction_get(to) == EVAS_BIDI_DIRECTION_RTL);
|
|
|
|
evas_object_smart_member_del(tb);
|
|
evas_object_smart_member_del(to);
|
|
evas_object_del(smart_child);
|
|
|
|
DELETE_EVAS_TEXTBLOCK();
|
|
DELETE_EVAS_TEXT();
|
|
END_EVAS_OBJECT_SMART_TEST();
|
|
}
|
|
EFL_END_TEST
|
|
|
|
|
|
void
|
|
_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
{
|
|
ck_abort_msg("This function should be not called");
|
|
}
|
|
|
|
EFL_START_TEST(evas_object_smart_clipped_smart_move)
|
|
{
|
|
Evas *evas;
|
|
Evas_Smart *smart;
|
|
Evas_Object *smart_obj, *smart_child;
|
|
|
|
evas = _setup_evas();
|
|
|
|
Evas_Smart_Class sc = EVAS_SMART_CLASS_INIT_NAME_VERSION("MyClass");
|
|
evas_object_smart_clipped_smart_set(&sc);
|
|
sc.move = NULL;
|
|
|
|
smart = evas_smart_class_new(&sc);
|
|
fail_if(!smart);
|
|
|
|
smart_obj = evas_object_smart_add(evas, smart);
|
|
fail_if(!smart_obj);
|
|
|
|
smart_child = evas_object_box_add(evas);
|
|
evas_object_smart_member_add(smart_child, smart_obj);
|
|
|
|
evas_object_event_callback_add(smart_child, EVAS_CALLBACK_MOVE, _move_cb, NULL);
|
|
evas_object_move(smart_obj, 100, 100);
|
|
|
|
evas_object_smart_member_del(smart_child);
|
|
evas_object_del(smart_child);
|
|
evas_object_del(smart_obj);
|
|
evas_free(evas);
|
|
}
|
|
EFL_END_TEST
|
|
|
|
void evas_test_object_smart(TCase *tc)
|
|
{
|
|
tcase_add_test(tc, evas_object_smart_paragraph_direction);
|
|
tcase_add_test(tc, evas_object_smart_clipped_smart_move);
|
|
}
|