コード例 #1
0
ファイル: widgets_list_4.c プロジェクト: Limsik/e17
/* setup */
static void _setup(void)
{
   int i;
   Evas_Object *o;
   for (i = 0; i < NUM; i++)
     {
	o = evas_object_image_filled_add(evas);
	o_images[i] = o;
        evas_object_image_border_set(o, 2, 2, 2, 2);
        evas_object_image_file_set(o, build_path("pan.png"), NULL);
	evas_object_resize(o, win_w, ICON_SIZE);
	evas_object_show(o);
        
	o = evas_object_image_filled_add(evas);
	o_icons[i] = o;
        evas_object_image_border_set(o, 2, 2, 2, 2);
        evas_object_image_file_set(o, build_path(icons[i % 13]), NULL);
	evas_object_resize(o, ICON_SIZE - 8, ICON_SIZE - 8);
	evas_object_show(o);
        
        o = evas_object_text_add(evas);
        o_texts[i] = o;
        evas_object_text_font_set(o, "Vera-Bold", 10);
        evas_object_text_text_set(o, labels[i % 26]);
        evas_object_color_set(o, 0, 0, 0, 255);
        evas_object_show(o);
     }
   done = 0;
}
コード例 #2
0
ファイル: Label.cpp プロジェクト: cryporchild/monitoRecast
        //---------------------------------------------------------------------
        //! @brief Constructor
        //---------------------------------------------------------------------
        Label::Label( Evas* _win )
            : x__( 0 )
            , y__( 0 )
            , width__( 0 )
            , height__( 0 )
            , text__()
            , label__( nullptr )
            , visibility__( Visibility::INVISIBLE )
        {
            label__ = evas_object_text_add( _win );
            evas_object_text_style_set( label__
                                      , EVAS_TEXT_STYLE_GLOW );
            evas_object_text_font_set( label__
                                     , FONT.c_str()
                                     , PageManager::getFontSize() );

            setColor( 255
                    , 255
                    , 255
                    , 255 );
            evas_object_text_glow_color_set( label__
                                           , 56
                                           , 0
                                           , 255
                                           , 255 );
        }
コード例 #3
0
EvasText::EvasText( EvasCanvas* canvas, const char* name )
{
    o = evas_object_text_add( canvas->obj() );
    init( name ? name : "text" );

    setFont( EvasFont() );
}
コード例 #4
0
ファイル: Text.cpp プロジェクト: Limsik/e17
Text::Text( Canvas &canvas, const std::string &text )
{
  o = evas_object_text_add( canvas.obj() );
  init();

  setText( text );
}
コード例 #5
0
ファイル: proxytest.c プロジェクト: nashidau/Proxy-Test
/**
 * Add a text object to the screen.
 */
Evas_Object *
label_add(Evas *e, int x, int y, const char *fmt, bool anim){
	Evas_Object *o;
	Ecore_Timer *timer;

	if (!e) return NULL;

	o = evas_object_text_add(e);
	evas_object_text_font_set(o, "Vera", 15);
	evas_object_text_style_set(o, EVAS_TEXT_STYLE_SOFT_OUTLINE);
	evas_object_color_set(o, 0,0,0,255);
	evas_object_text_outline_color_set(o,255,255,255,255);

	evas_object_layer_set(o, 1);
	evas_object_text_text_set(o,fmt);
	evas_object_move(o,x,y);
	if (visible) evas_object_show(o);

	labels = eina_list_append(labels, o);

	if (!anim) return o;

	timer = ecore_timer_add(0.1, label_move, o);

	return o;
}
コード例 #6
0
EvasText::EvasText( const char* font, int size, const char* text, EvasCanvas* canvas, const char* name )
{
    o = evas_object_text_add( canvas->obj() );
    init( name ? name : "text" );

    setFont( font, size );
    setText( text );
}
コード例 #7
0
ファイル: Text.cpp プロジェクト: Limsik/e17
Text::Text( Canvas &canvas, const std::string &font, Evas_Font_Size size, const std::string &text )
{
  o = evas_object_text_add( canvas.obj() );
  init();

  setFont( font, size );
  setText( text );
}
コード例 #8
0
EvasText::EvasText( int x, int y, const char* text, EvasCanvas* canvas, const char* name )
{
    o = evas_object_text_add( canvas->obj() );
    init( name ? name : "text" );;

    move( x, y );
    setFont( EvasFont() );
    setText( text );
}
コード例 #9
0
ファイル: panel.c プロジェクト: playya/Enlightenment
Panel_Button *panel_button(Evas *_e, char *_label, Eina_List *tests)
{
	Evas_Object *o;
	static int y = 200;

	/*
	 * Create the new panel button's information
	 */
	pbutton = malloc(sizeof(Panel_Button));
	pbutton->box = NULL;
	pbutton->label = NULL;

	/*
	 * Now initialize it's fields, create the appearance, and add it to
	 * the evas.
	 */
	o = evas_object_image_add(evas);
	evas_object_image_file_set(o, IM "panel_button1.png",
			IM "panel_button1.png");
	evas_object_image_border_set(o, 3, 3, 3, 3);
	evas_object_resize(o, 85, 30);
	evas_object_image_fill_set(o, 0, 0, 85, 30);
	evas_object_move(o, 10, y);
	evas_object_layer_set(o, 250);
	evas_object_show(o);
	pbutton->box = o;

	o = evas_object_text_add(_e);
	evas_object_text_font_set(o, "andover", 24);
	evas_object_text_text_set(o, _label);
	evas_object_color_set(o, 0, 0, 0, 160);
	evas_object_layer_set(o, 251);
	evas_object_move(o, 15, y + 5);
	evas_object_show(o);
	pbutton->label = o;

	/*
	 * Attach the buttons callbacks
	 */
	evas_object_event_callback_add(pbutton->label, EVAS_CALLBACK_MOUSE_IN,
			  button_mouse_in, NULL);
	evas_object_event_callback_add(pbutton->label, EVAS_CALLBACK_MOUSE_OUT,
			  button_mouse_out, NULL);

	evas_object_event_callback_add(pbutton->label, EVAS_CALLBACK_MOUSE_DOWN,
			  button_mouse_down, tests);

	y += 60;

	return pbutton;
}
コード例 #10
0
ファイル: Text.cpp プロジェクト: Limsik/e17
Text::Text( Canvas &canvas, Text &ao )
{
  Dout( dc::notice, *this << " Text::Text copy constructor" );
  o = evas_object_text_add( canvas.obj() );
  init();

  setGeometry( ao.getGeometry() );
  setLayer( ao.getLayer() );
  setText( ao.getText() );
  setClip( ao.getClip() );
  setFont( ao.getFontName(), getFontSize () );
  setColor( ao.getColor() );
  setVisible( ao.isVisible() );
}
コード例 #11
0
EvasText::EvasText( EvasText* ao, EvasCanvas* canvas )
{
    Dout( dc::notice, *this << " EvasText::EvasText copy constructor" );
    o = evas_object_text_add( canvas->obj() );
    init( "text" );

    setGeometry( ao->geometry() );
    setLayer( ao->layer() );
    setText( ao->text() );
    setClip( ao->clip() );
    setFont( ao->font() );
    setColor( ao->color() );
    setVisible( ao->isVisible() );
}
コード例 #12
0
static void 
e_entry_realize(E_Entry *entry)
{
   char *entries;
   char buf[4096];
   
   entries = e_config_get("entries");
   sprintf(buf, "%s/%s", entries, "base.bits.db");
   entry->obj_base = ebits_load(buf); 
   if (entry->obj_base) 
    {
	ebits_add_to_evas(entry->obj_base, entry->evas);
/*	ebits_set_color_class(entry->obj_base, "Base FG", 100, 200, 255, 255);*/
     }   
   sprintf(buf, "%s/%s", entries, "cursor.bits.db");
   entry->obj_cursor = ebits_load(buf); 
   if (entry->obj_cursor) 
    {
	ebits_add_to_evas(entry->obj_cursor, entry->evas);
/*	ebits_set_color_class(entry->obj_base, "Base FG", 100, 200, 255, 255);*/
     }   
   sprintf(buf, "%s/%s", entries, "selection.bits.db");
   entry->obj_selection = ebits_load(buf); 
   if (entry->obj_selection) 
    {
	ebits_add_to_evas(entry->obj_selection, entry->evas);
/*	ebits_set_color_class(entry->obj_base, "Base FG", 100, 200, 255, 255);*/
     }   
   
   entry->clip_box = evas_object_rectangle_add(entry->evas);
   entry->text = evas_object_text_add(entry->evas);
   evas_object_text_font_set(entry->text, "borzoib", 8);
   evas_object_text_text_set(entry->text, "");
   if (entry->obj_cursor) 
     ebits_set_clip(entry->obj_cursor, entry->clip_box);
   if (entry->obj_selection) 
     ebits_set_clip(entry->obj_selection, entry->clip_box);
   entry->event_box = evas_object_rectangle_add(entry->evas);
   evas_object_color_set(entry->clip_box, 255, 255, 255, 255);
   evas_object_color_set(entry->event_box, 0, 0, 0, 0);
   evas_object_color_set(entry->text, 0, 0, 0, 255);
   evas_object_clip_set(entry->text, entry->clip_box);
   evas_object_clip_set( entry->event_box, entry->clip_box);
   evas_object_event_callback_add(entry->event_box, EVAS_CALLBACK_MOUSE_DOWN, e_entry_down_cb, entry);
   evas_object_event_callback_add(entry->event_box, EVAS_CALLBACK_MOUSE_UP, e_entry_up_cb, entry);
   evas_object_event_callback_add(entry->event_box, EVAS_CALLBACK_MOUSE_MOVE, e_entry_move_cb, entry);
}
コード例 #13
0
/**
 * A utility function to get the average size of a character written inside
 * the editable object
 *
 * @param editable an editable object
 * @param w the location where to store the average width of a character
 * @param h the location where to store the average height of a character
 */
EAPI void
e_editable_char_size_get(Evas_Object *editable, int *w, int *h)
{
   int tw = 0, th = 0;
   Evas *evas;
   const Evas_Object *text_obj;
   Evas_Object *obj;
   E_Editable_Smart_Data *sd;
   char *text = "Tout est bon dans l'abricot sauf le noyau!"
                "Wakey wakey! Eggs and Bakey!";
   const char *font, *font_source;
   Evas_Text_Style_Type style;
   int font_size;

   if (w) *w = 0;
   if (h) *h = 0;
   if (evas_object_smart_smart_get(editable) != _e_editable_smart) SMARTERRNR();
   if ((!editable) || (!(evas = evas_object_evas_get(editable))))
     return;
   if (!(sd = evas_object_smart_data_get(editable))) return;
   if (!(text_obj = edje_object_part_object_get(sd->text_object, "e.text.text")))
     return;

   if ((sd->average_char_w <= 0) || (sd->average_char_h <= 0))
     {
        font_source = evas_object_text_font_source_get(text_obj);
        evas_object_text_font_get(text_obj, &font, &font_size);
        style = evas_object_text_style_get(text_obj);

        obj = evas_object_text_add(evas);
        evas_object_scale_set(obj, edje_scale_get());
        evas_object_text_font_source_set(obj, font_source);
        evas_object_text_font_set(obj, font, font_size);
        evas_object_text_style_set(obj, style);
        evas_object_text_text_set(obj, text);
        evas_object_geometry_get(obj, NULL, NULL, &tw, &th);
        evas_object_del(obj);
        sd->average_char_w = (tw / strlen(text));
        sd->average_char_h = th;
     }
   if (w) *w = sd->average_char_w;
   if (h) *h = sd->average_char_h;
}
コード例 #14
0
ファイル: image_mask_12.c プロジェクト: Limsik/e17
/* setup */
static void _setup(void)
{
   int i;
   Evas_Object *o;
   
   o = evas_object_text_add(evas);
   o_mask = o;
   evas_object_text_font_set(o, "Vera-Bold", 150);
   evas_object_show(o);
   
   for (i = 0; i < OBNUM; i++)
     {
	o = evas_object_image_add(evas);
	o_images[i] = o;
	evas_object_image_file_set(o, build_path("texture.png"), NULL);
	evas_object_image_fill_set(o, 0, 0, 500, 444);
	evas_object_resize(o, win_w * 4, win_h * 4);
//	evas_object_clip_set(o, o_mask);
	evas_object_show(o);
     }
   done = 0;
}
コード例 #15
0
ファイル: widgets_file_icons_3.c プロジェクト: Limsik/e17
/* setup */
static void _setup(void)
{
   int i;
   Evas_Object *o;
   for (i = 0; i < NUM; i++)
     {
	o = evas_object_image_add(evas);
	o_images[i] = o;
        evas_object_image_file_set(o, build_path(icons[i % 13]), NULL);
	evas_object_image_fill_set(o, 0, 0, ICON_SIZE, ICON_SIZE);
	evas_object_resize(o, ICON_SIZE, ICON_SIZE);
	evas_object_show(o);
        
        o = evas_object_text_add(evas);
        o_texts[i] = o;
        evas_object_text_font_set(o, "Vera-Bold", 10);
        evas_object_text_text_set(o, icons[i % 13]);
        evas_object_color_set(o, 0, 0, 0, 255);
        evas_object_show(o);
     }
   done = 0;
}
コード例 #16
0
/* setup */
static void _setup(void)
{
    int i,w,h;
    Evas_Object *o,*s;
    Evas_Text_Style_Type st;

    st = EVAS_TEXT_STYLE_SHADOW;
    for (i = 0; st <= EVAS_TEXT_STYLE_FAR_SOFT_SHADOW; i++)
    {
        o = evas_object_text_add(evas);
        o_texts[i] = o;
        evas_object_text_font_set(o, "Vera-Bold", 20);
        evas_object_text_text_set(o, "This is a test string");
        evas_object_text_style_set(o, st);
        evas_object_color_set(o, 255, 255, 255, 255);
        evas_object_text_shadow_color_set(o, 0, 0, 0, 24);
        evas_object_text_glow_color_set(o, 100, 80, 40, 100);
        evas_object_text_glow2_color_set(o, 50, 10, 5, 50);
        evas_object_text_outline_color_set(o, 0, 0, 0, 255);
        evas_object_show(o);
        st++;
    }

    for (  ; i < OBNUM ; i ++)
    {
        s = o_texts[i % st];
        o = evas_object_image_add(evas);
        o_texts[i] = o;
        evas_object_image_source_set(o, s);
        evas_object_geometry_get(s, NULL, NULL, &w, &h);
        evas_object_resize(o, w, h);
        evas_object_image_fill_set(o, 0, 0, w, h);
        evas_object_show(o);
    }

    done = 0;
}
コード例 #17
0
ファイル: panel.c プロジェクト: playya/Enlightenment
void setup_panel(Evas *_e)
{
	int w;
	Panel_Button *pbutton1, *pbutton2, *pbutton3;

	o_panel = evas_object_image_add(_e);
	evas_object_image_file_set(o_panel, IM "panel.png",
			IM "panel.png");

	evas_object_image_size_get(o_panel, &w, NULL);
	evas_object_move(o_panel, 0, 0);
	evas_object_resize(o_panel, w, win_h);
	evas_object_image_fill_set(o_panel, 0, 0, w, win_h);
	evas_object_layer_set(o_panel, 200);

	evas_object_show(o_panel);

	/* Panel title */
	o_txt_paneltitle = evas_object_text_add(_e);
	evas_object_text_font_set(o_txt_paneltitle, "sinon", 17);
	evas_object_text_text_set(o_txt_paneltitle, "Etox Test");
	evas_object_color_set(o_txt_paneltitle, 255, 255, 255, 255);
	evas_object_layer_set(o_txt_paneltitle, 250);
	evas_object_show(o_txt_paneltitle);

	/* Panel buttons */
	pbutton1 = panel_button(evas, "Basic", basic_tests());
	pbuttons = eina_list_append(pbuttons, pbutton1);

	pbutton2 = panel_button(evas, "Style", style_tests());
	pbuttons = eina_list_append(pbuttons, pbutton2);

	pbutton3 = panel_button(evas, "Callbacks", callback_tests());
	pbuttons = eina_list_append(pbuttons, pbutton3);

}
コード例 #18
0
ファイル: gui-list.c プロジェクト: martanne/qi-bootmenu
static void gui_list_draw_item(const char *text, const char *logo, void(*callback)(void*, Evas*, Evas_Object*, void *),
                               void *data, int x, int y) {

	Evas_Object *ebox, *elogo, *etext, *erect;

	elogo = evas_object_image_add(evas);
	evas_object_image_file_set(elogo, logo, NULL);
	evas_object_image_fill_set(elogo, 0, 0, LIST_LOGO_WIDTH, LIST_LOGO_HEIGHT);
	evas_object_resize(elogo, LIST_LOGO_WIDTH, LIST_LOGO_HEIGHT);
	evas_object_show(elogo);

	etext = evas_object_text_add(evas);
	evas_object_text_font_set(etext, FONT, FONT_SIZE);
	evas_object_text_text_set(etext, text);
	evas_object_color_set(etext, LIST_FONT_COLOR, 255);
	evas_object_show(etext);

	ebox = evas_object_box_add(evas);
	evas_object_box_align_set(ebox, 0, 0.5);
	evas_object_box_padding_set(ebox, 10, 10);
	evas_object_move(ebox, x, y);
	evas_object_resize(ebox, SCREEN_WIDTH, LIST_LOGO_HEIGHT);
	evas_object_box_append(ebox, elogo);
	evas_object_box_append(ebox, etext);

	/* this is just an invisible rect to catch all mouse down events in the area */
	erect = evas_object_rectangle_add(evas);
	evas_object_move(erect, x, y);
	evas_object_resize(erect, SCREEN_WIDTH, LIST_LOGO_HEIGHT);
	evas_object_color_set(erect, 0, 0, 0, 0);
	evas_object_event_callback_add(erect, EVAS_CALLBACK_MOUSE_DOWN, callback, data);
	evas_object_data_set(erect, "text", etext);

	evas_object_show(erect);
	evas_object_show(ebox);
}
コード例 #19
0
ファイル: gui-list.c プロジェクト: martanne/qi-bootmenu
static void gui_list_show_error(const char *errstr, va_list ap) {
	static Evas_Object *etext;
	char buf[128];

	if (!etext) {
		Evas_Object *ebox = evas_object_box_add(evas);
		evas_object_box_align_set(ebox, 0.5, 0.5);
		evas_object_box_padding_set(ebox, 10, 10);
		evas_object_move(ebox, 0, SCREEN_HEIGHT - LIST_LOGO_HEIGHT);
		evas_object_resize(ebox, SCREEN_WIDTH, LIST_LOGO_HEIGHT);

		etext = evas_object_text_add(evas);
		evas_object_text_font_set(etext, FONT, FONT_SIZE);
		evas_object_color_set(etext, LIST_FONT_COLOR, 255);

		evas_object_box_append(ebox, etext);
		evas_object_show(ebox);
	}

	vsnprintf(buf, sizeof buf, errstr, ap);

	evas_object_text_text_set(etext, buf);
	evas_object_show(etext);
}
コード例 #20
0
ファイル: Text.cpp プロジェクト: Limsik/e17
Text::Text( Canvas &canvas )
{
  o = evas_object_text_add( canvas.obj() );
  init();
}
コード例 #21
0
ファイル: etox_test.c プロジェクト: playya/Enlightenment
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);
}
コード例 #22
0
int
_edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *group, const char *parent, Eina_List *group_path)
{
   Edje *ed;
   Evas *tev;
   Edje_Real_Part *rp;
   Eina_List *textblocks = NULL;
   Eina_List *sources = NULL;
   Eina_List *externals = NULL;
   Eina_List *old_swallows;
   unsigned int n;
   Eina_List *parts = NULL;
   int group_path_started = 0;

   ed = _edje_fetch(obj);
   if (!ed) return 0;
   if (!file) file = "";
   if (!group) group = "";
   if (((ed->path) && (!strcmp(file, ed->path))) &&
       (ed->group) && (!strcmp(group, ed->group)))
     return 1;

   tev = evas_object_evas_get(obj);
   evas_event_freeze(tev);
   old_swallows = _edje_swallows_collect(ed);

   if (_edje_script_only(ed)) _edje_script_only_shutdown(ed);
   if (_edje_lua_script_only(ed)) _edje_lua_script_only_shutdown(ed);
   _edje_file_del(ed);

   eina_stringshare_replace(&ed->path, file);
   eina_stringshare_replace(&ed->group, group);

   ed->parent = eina_stringshare_add(parent);

   ed->load_error = EDJE_LOAD_ERROR_NONE;
   _edje_file_add(ed);
   ed->block_break = 0;

   if (ed->file && ed->file->external_dir)
     {
	unsigned int i;

	for (i = 0; i < ed->file->external_dir->entries_count; ++i)
	  edje_module_load(ed->file->external_dir->entries[i].entry);
     }

   _edje_textblock_styles_add(ed);
   _edje_textblock_style_all_update(ed);

   ed->has_entries = EINA_FALSE;

   if (ed->collection)
     {
	if (ed->collection->prop.orientation != EDJE_ORIENTATION_AUTO)
          ed->is_rtl = (ed->collection->prop.orientation ==
                        EDJE_ORIENTATION_RTL);

	if (ed->collection->script_only)
	  {
	     ed->load_error = EDJE_LOAD_ERROR_NONE;
	     _edje_script_only_init(ed);
	  }
	else if (ed->collection->lua_script_only)
	  {
	     ed->load_error = EDJE_LOAD_ERROR_NONE;
	     _edje_lua_script_only_init(ed);
	  }
	else
	  {
	     unsigned int i;

	     /* colorclass stuff */
	     for (i = 0; i < ed->collection->parts_count; ++i)
	       {
		  Edje_Part *ep;
		  unsigned int k;

		  ep = ed->collection->parts[i];

		  /* Register any color classes in this parts descriptions. */
		  if ((ep->default_desc) && (ep->default_desc->color_class))
		    _edje_color_class_member_add(ed, ep->default_desc->color_class);

		  for (k = 0; k < ep->other.desc_count; k++)
		    {
		       Edje_Part_Description_Common *desc;

		       desc = ep->other.desc[k];

		       if (desc->color_class)
			 _edje_color_class_member_add(ed, desc->color_class);
		    }
	       }
	     /* build real parts */
	     for (n = 0; n < ed->collection->parts_count; n++)
	       {
		  Edje_Part *ep;

		  ep = ed->collection->parts[n];
		  rp = eina_mempool_malloc(_edje_real_part_mp, sizeof(Edje_Real_Part));
		  if (!rp)
		    {
                       /* FIXME: destroy all allocated ressource, need to have a common exit point */
		       ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
                       evas_event_thaw(tev);
                       evas_event_thaw_eval(tev);
		       return 0;
		    }

		  memset(rp, 0, sizeof (Edje_Real_Part));

		  if ((ep->dragable.x != 0) || (ep->dragable.y != 0))
		    {
		       rp->drag = calloc(1, sizeof (Edje_Real_Part_Drag));
		       if (!rp->drag)
			 {
			    ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
			    eina_mempool_free(_edje_real_part_mp, rp);
                            evas_event_thaw(tev);
                            evas_event_thaw_eval(tev);
                            return 0;
			 }

		       rp->drag->step.x = FROM_INT(ep->dragable.step_x);
		       rp->drag->step.y = FROM_INT(ep->dragable.step_y);
		    }

		  rp->edje = ed;
		  _edje_ref(rp->edje);
		  rp->part = ep;
		  parts = eina_list_append(parts, rp);
		  rp->param1.description = 
                    _edje_part_description_find(ed, rp, "default", 0.0);
		  rp->chosen_description = rp->param1.description;
		  if (!rp->param1.description)
		    ERR("no default part description!");

		  switch (ep->type)
		    {
		     case EDJE_PART_TYPE_RECTANGLE:
			rp->object = evas_object_rectangle_add(ed->base.evas);
			break;
                     case EDJE_PART_TYPE_PROXY:
		     case EDJE_PART_TYPE_IMAGE:
			rp->object = evas_object_image_add(ed->base.evas);
			break;
		     case EDJE_PART_TYPE_TEXT:
			_edje_text_part_on_add(ed, rp);
			rp->object = evas_object_text_add(ed->base.evas);
			evas_object_text_font_source_set(rp->object, ed->path);
			break;
		     case EDJE_PART_TYPE_GROUP:
                        sources = eina_list_append(sources, rp);
		     case EDJE_PART_TYPE_SWALLOW:
		     case EDJE_PART_TYPE_EXTERNAL:
                        if (ep->type == EDJE_PART_TYPE_EXTERNAL)
                          externals = eina_list_append(externals, rp);
			rp->object = evas_object_rectangle_add(ed->base.evas);
			evas_object_color_set(rp->object, 0, 0, 0, 0);
			evas_object_pass_events_set(rp->object, 1);
			evas_object_pointer_mode_set(rp->object, EVAS_OBJECT_POINTER_MODE_NOGRAB);
			_edje_callbacks_focus_add(rp->object, ed, rp);
			break;
		     case EDJE_PART_TYPE_TEXTBLOCK:
			textblocks = eina_list_append(textblocks, rp);
			rp->object = evas_object_textblock_add(ed->base.evas);
			break;
		     case EDJE_PART_TYPE_BOX:
                        sources = eina_list_append(sources, rp);
			rp->object = evas_object_box_add(ed->base.evas);
                        rp->anim = _edje_box_layout_anim_new(rp->object);
			break;
		     case EDJE_PART_TYPE_TABLE:
                        sources = eina_list_append(sources, rp);
			rp->object = evas_object_table_add(ed->base.evas);
			break;
		     case EDJE_PART_TYPE_GRADIENT:
			ERR("SPANK ! SPANK ! SPANK ! YOU ARE USING GRADIENT IN PART %s FROM GROUP %s INSIDE FILE %s !! THEY ARE NOW REMOVED !",
			    ep->name, group, file);
		     default:
			ERR("wrong part type %i!", ep->type);
			break;
		    }

		  if (rp->object)
		    {
		       evas_object_smart_member_add(rp->object, ed->obj);
//		       evas_object_layer_set(rp->object, evas_object_layer_get(ed->obj));
		       if (ep->type != EDJE_PART_TYPE_SWALLOW && ep->type != EDJE_PART_TYPE_GROUP && ep->type != EDJE_PART_TYPE_EXTERNAL)
			 {
			    if (ep->mouse_events)
			      {
				 _edje_callbacks_add(rp->object, ed, rp);
				 if (ep->repeat_events)
				   evas_object_repeat_events_set(rp->object, 1);
				 
				 if (ep->pointer_mode != EVAS_OBJECT_POINTER_MODE_AUTOGRAB)
				   evas_object_pointer_mode_set(rp->object, ep->pointer_mode);
			      }
			    else
			      {
				 evas_object_pass_events_set(rp->object, 1);
				 evas_object_pointer_mode_set(rp->object, EVAS_OBJECT_POINTER_MODE_NOGRAB);
			      }
			    if (ep->precise_is_inside)
			      evas_object_precise_is_inside_set(rp->object, 1);
			 }
		       if (rp->part->clip_to_id < 0)
			 evas_object_clip_set(rp->object, ed->base.clipper);
		    }
	       }
	     if (n > 0)
	       {
		  Eina_List *l;

		  ed->table_parts = malloc(sizeof(Edje_Real_Part *) * n);
		  ed->table_parts_size = n;
		  /* FIXME: check malloc return */
		  n = 0;
		  EINA_LIST_FOREACH(parts, l, rp)
		    {
		       ed->table_parts[n] = rp;
		       n++;
		    }
		  eina_list_free(parts);
		  for (i = 0; i < ed->table_parts_size; i++)
		    {
		       rp = ed->table_parts[i];
		       if (rp->param1.description) /* FIXME: prevent rel to gone radient part to go wrong. You may
						      be able to remove this when all theme are correctly rewritten. */
			 {
			    if (rp->param1.description->rel1.id_x >= 0)
			      rp->param1.rel1_to_x = ed->table_parts[rp->param1.description->rel1.id_x % ed->table_parts_size];
			    if (rp->param1.description->rel1.id_y >= 0)
			      rp->param1.rel1_to_y = ed->table_parts[rp->param1.description->rel1.id_y % ed->table_parts_size];
			    if (rp->param1.description->rel2.id_x >= 0)
			      rp->param1.rel2_to_x = ed->table_parts[rp->param1.description->rel2.id_x % ed->table_parts_size];
			    if (rp->param1.description->rel2.id_y >= 0)
			      rp->param1.rel2_to_y = ed->table_parts[rp->param1.description->rel2.id_y % ed->table_parts_size];
			 }
		       if (rp->part->clip_to_id >= 0)
			 {
			    rp->clip_to = ed->table_parts[rp->part->clip_to_id % ed->table_parts_size];
			    if (rp->clip_to)
			      {
				 evas_object_pass_events_set(rp->clip_to->object, 1);
				 evas_object_pointer_mode_set(rp->clip_to->object, EVAS_OBJECT_POINTER_MODE_NOGRAB);
				 evas_object_clip_set(rp->object, rp->clip_to->object);
			      }
			 }
		       if (rp->drag)
			 {
			    if (rp->part->dragable.confine_id >= 0)
			      rp->drag->confine_to = ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size];
			 }

		       /* replay events for dragable */
		       if (rp->part->dragable.event_id >= 0)
			 {
			    rp->events_to =
			      ed->table_parts[rp->part->dragable.event_id % ed->table_parts_size];
			    /* events_to may be used only with dragable */
			    if (!rp->events_to->part->dragable.x &&
				!rp->events_to->part->dragable.y)
			      rp->events_to = NULL;
			 }

		       rp->swallow_params.min.w = 0;
		       rp->swallow_params.min.h = 0;
		       rp->swallow_params.max.w = -1;
		       rp->swallow_params.max.h = -1;

		       if (rp->part->type == EDJE_PART_TYPE_TEXT
			   || rp->part->type == EDJE_PART_TYPE_TEXTBLOCK)
			 {
			    Edje_Part_Description_Text *text;

			    text = (Edje_Part_Description_Text *) rp->param1.description;

			    if (ed->file->feature_ver < 1)
			      {
				 text->text.id_source = -1;
				 text->text.id_text_source = -1;
			      }

			    if (text->text.id_source >= 0)
			      rp->text.source = ed->table_parts[text->text.id_source % ed->table_parts_size];
			    if (text->text.id_text_source >= 0)
			      rp->text.text_source = ed->table_parts[text->text.id_text_source % ed->table_parts_size];
			    if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
			      {
				 _edje_entry_real_part_init(rp);
				 if (!ed->has_entries)
				   ed->has_entries = EINA_TRUE;
			      }
			 }
		    }
	       }
	     
	     _edje_programs_patterns_init(ed);

	     n = ed->collection->programs.fnmatch_count +
	       ed->collection->programs.strcmp_count +
	       ed->collection->programs.strncmp_count +
	       ed->collection->programs.strrncmp_count +
	       ed->collection->programs.nocmp_count;
	     if (n > 0)
	       {
		  Edje_Program *pr;

		  ed->table_programs = malloc(sizeof(Edje_Program *) * n);
		  if (ed->table_programs)
		    {
		       ed->table_programs_size = n;

#define EDJE_LOAD_BUILD_TABLE(Array, Ed, It, Tmp)	\
		       for (It = 0; It < Ed->collection->programs.Array##_count; ++It) \
			 {						\
			    Tmp = Ed->collection->programs.Array[It];	\
			    Ed->table_programs[Tmp->id] = Tmp;		\
			 }

		       EDJE_LOAD_BUILD_TABLE(fnmatch, ed, i, pr);
		       EDJE_LOAD_BUILD_TABLE(strcmp, ed, i, pr);
		       EDJE_LOAD_BUILD_TABLE(strncmp, ed, i, pr);
		       EDJE_LOAD_BUILD_TABLE(strrncmp, ed, i, pr);
		       EDJE_LOAD_BUILD_TABLE(nocmp, ed, i, pr);
		    }
	       }
	     _edje_ref(ed);
	     _edje_block(ed);
	     _edje_freeze(ed);
//	     if (ed->collection->script) _edje_embryo_script_init(ed);
	     _edje_var_init(ed);
	     for (i = 0; i < ed->table_parts_size; i++)
	       {
		  rp = ed->table_parts[i];
		  evas_object_show(rp->object);
		  if (_edje_block_break(ed)) break;
		  if (rp->drag)
		    {
		       if (rp->part->dragable.x < 0) rp->drag->val.x = FROM_DOUBLE(1.0);
		       if (rp->part->dragable.y < 0) rp->drag->val.x = FROM_DOUBLE(1.0);
		       _edje_dragable_pos_set(ed, rp, rp->drag->val.x, rp->drag->val.y);
		    }
	       }
             ed->recalc_call = 1;
	     ed->dirty = 1;
#ifdef EDJE_CALC_CACHE
	     ed->all_part_change = 1;
#endif
	     if ((evas_object_clipees_get(ed->base.clipper)) &&
		 (evas_object_visible_get(obj)))
	       evas_object_show(ed->base.clipper);

	     /* instantiate 'internal swallows' */
             EINA_LIST_FREE(externals, rp)
               {
                  Edje_Part_Description_External *external;
                  Evas_Object *child_obj;

                  external = (Edje_Part_Description_External *) rp->part->default_desc;
                  child_obj = _edje_external_type_add(rp->part->source,
                                                      evas_object_evas_get(ed->obj), ed->obj,
                                                      external->external_params, rp->part->name);
                  if (child_obj)
                    {
                       _edje_real_part_swallow(rp, child_obj, EINA_TRUE);
                       rp->param1.external_params = _edje_external_params_parse(child_obj,
                                                                                external->external_params);
                       _edje_external_recalc_apply(ed, rp, NULL, rp->chosen_description);
                    }
               }