EOLIAN static void _evas_3d_object_eo_base_constructor(Eo *obj, Evas_3D_Object_Data *pd) { Eo *e = NULL; eo_do_super(obj, MY_CLASS, eo_constructor()); eo_do(obj, e = eo_parent_get()); pd->evas = e; pd->type = EVAS_3D_OBJECT_TYPE_INVALID; memset(&pd->dirty[0], 0x00, sizeof(Eina_Bool) * EVAS_3D_STATE_MAX); }
static Eina_Bool _ector_renderer_software_gradient_radial_ector_renderer_generic_base_prepare(Eo *obj, Ector_Renderer_Software_Gradient_Data *pd) { if (!pd->surface) { Eo *parent; eo_do(obj, parent = eo_parent_get()); if (!parent) return EINA_FALSE; pd->surface = eo_data_xref(parent, ECTOR_SOFTWARE_SURFACE_CLASS, obj); } _update_radial_data(pd); return EINA_FALSE; }
EOLIAN static void _evas_out_view_set(Eo *eo_e, Evas_Out_Data *eo_dat, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) { Eo *eo_parent = NULL; Evas_Public_Data *e; eo_do(eo_e, eo_parent = eo_parent_get()); e = eo_data_scope_get(eo_parent, EVAS_CANVAS_CLASS); evas_canvas_async_block(e); eo_dat->x = x; eo_dat->y = y; eo_dat->w = w; eo_dat->h = h; // XXX: tell engine about any output size etc. changes // XXX: tell evas to add damage if viewport loc/size changed }
EOLIAN static void _evas_out_eo_base_destructor(Eo *eo_obj, Evas_Out_Data *eo_dat) { Eo *eo_parent = NULL; Evas_Public_Data *e; eo_do(eo_obj, eo_parent = eo_parent_get()); e = eo_data_scope_get(eo_parent, EVAS_CLASS); if (!e) return ; // XXX: need to free output and context one they get allocated one day // e->engine.func->context_free(eo_dat->output, eo_dat->context); // e->engine.func->output_free(eo_dat->output); e->engine.func->info_free(eo_parent, eo_dat->info); e->outputs = eina_list_remove(e->outputs, eo_obj); eo_do_super(eo_obj, MY_CLASS, eo_destructor()); }
static Eina_Bool _ector_renderer_cairo_gradient_radial_ector_renderer_generic_base_prepare(Eo *obj, Ector_Renderer_Cairo_Gradient_Radial_Data *pd) { Ector_Renderer_Generic_Gradient_Radial_Data *grd; Ector_Renderer_Generic_Gradient_Data *gd; unsigned int i; eo_do_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_RADIAL_CLASS, ector_renderer_prepare()); if (pd->pat) return EINA_FALSE; grd = eo_data_scope_get(obj, ECTOR_RENDERER_GENERIC_GRADIENT_RADIAL_MIXIN); gd = eo_data_scope_get(obj, ECTOR_RENDERER_GENERIC_GRADIENT_MIXIN); if (!grd || !gd) return EINA_FALSE; USE(obj, cairo_pattern_create_radial, EINA_FALSE); USE(obj, cairo_pattern_add_color_stop_rgba, EINA_FALSE); pd->pat = cairo_pattern_create_radial(grd->focal.x, grd->focal.y, 0, grd->radial.x, grd->radial.y, grd->radius); int r,g,b,a; for (i = 0; i < gd->colors_count; i++) { r = gd->colors[i].r; g = gd->colors[i].g; b = gd->colors[i].b; a = gd->colors[i].a; ector_color_argb_unpremul(a, &r, &g, &b); cairo_pattern_add_color_stop_rgba(pd->pat, gd->colors[i].offset, r/255.0, g/255.0, b/255.0, a/255.0); } USE(obj, cairo_pattern_set_extend, EINA_FALSE); cairo_pattern_set_extend(pd->pat, _ector_cairo_extent_get(gd->s)); if (!pd->parent) { Eo *parent; eo_do(obj, parent = eo_parent_get()); if (!parent) return EINA_FALSE; pd->parent = eo_data_xref(parent, ECTOR_CAIRO_SURFACE_CLASS, obj); } return EINA_FALSE; }
EOLIAN static void _evas_out_eo_base_constructor(Eo *eo_obj, Evas_Out_Data *eo_dat) { Eo *eo_parent = NULL; Evas_Public_Data *e; eo_do(eo_obj, eo_parent = eo_parent_get()); e = eo_data_scope_get(eo_parent, EVAS_CLASS); eo_do_super(eo_obj, MY_CLASS, eo_constructor()); if (!e) return; e->outputs = eina_list_append(e->outputs, eo_obj); if (e->engine.func->info) eo_dat->info = e->engine.func->info(eo_parent); // XXX: context and output are currently held in the core engine and are // allocated by engine specific internal code. this all needs a new engine // api to make it work }
static Eina_Bool _ector_renderer_software_shape_ector_renderer_generic_base_prepare(Eo *obj, Ector_Renderer_Software_Shape_Data *pd) { const Efl_Gfx_Path_Command *cmds = NULL; const double *pts = NULL; // FIXME: shouldn't that be part of the shape generic implementation ? if (pd->shape->fill) eo_do(pd->shape->fill, ector_renderer_prepare()); if (pd->shape->stroke.fill) eo_do(pd->shape->stroke.fill, ector_renderer_prepare()); if (pd->shape->stroke.marker) eo_do(pd->shape->stroke.marker, ector_renderer_prepare()); // shouldn't that be moved to the software base object if (!pd->surface) { Eo *parent; eo_do(obj, parent = eo_parent_get()); if (!parent) return EINA_FALSE; pd->surface = eo_data_xref(parent, ECTOR_SOFTWARE_SURFACE_CLASS, obj); if (!pd->surface) return EINA_FALSE; } eo_do(obj, efl_gfx_shape_path_get(&cmds, &pts)); if (!pd->shape_data && cmds) { Eina_Bool close_path = EINA_FALSE; Outline * outline = _outline_create(); for (; *cmds != EFL_GFX_PATH_COMMAND_TYPE_END; cmds++) { switch (*cmds) { case EFL_GFX_PATH_COMMAND_TYPE_MOVE_TO: _outline_move_to(outline, pts[0], pts[1]); pts += 2; break; case EFL_GFX_PATH_COMMAND_TYPE_LINE_TO: _outline_line_to(outline, pts[0], pts[1]); pts += 2; break; case EFL_GFX_PATH_COMMAND_TYPE_CUBIC_TO: // Be careful, we do have a different order than // cairo, first is destination point, followed by // the control point. The opposite of cairo. _outline_cubic_to(outline, pts[2], pts[3], pts[4], pts[5], // control points pts[0], pts[1]); // destination point pts += 6; break; case EFL_GFX_PATH_COMMAND_TYPE_CLOSE: close_path = _outline_close_path(outline); break; case EFL_GFX_PATH_COMMAND_TYPE_LAST: case EFL_GFX_PATH_COMMAND_TYPE_END: break; } } _outline_end(outline); _outline_transform(outline, pd->base->m); // generate the shape data. pd->shape_data = ector_software_rasterizer_generate_rle_data(pd->surface->software, &outline->ft_outline); if (!pd->outline_data) { ector_software_rasterizer_stroke_set(pd->surface->software, (pd->shape->stroke.width * pd->shape->stroke.scale), pd->shape->stroke.cap, pd->shape->stroke.join); pd->outline_data = ector_software_rasterizer_generate_stroke_rle_data(pd->surface->software, &outline->ft_outline, close_path); } _outline_destroy(outline); } return EINA_TRUE; }
MAGIC_CHECK_END(); Evas_Object *eo_obj = eo_add(EVAS_RECTANGLE_CLASS, e); return eo_obj; } EOLIAN static void _evas_rectangle_eo_base_constructor(Eo *eo_obj, Evas_Rectangle_Data *class_data EINA_UNUSED) { Eo *parent = NULL; eo_do_super(eo_obj, MY_CLASS, eo_constructor()); Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); evas_object_rectangle_init(eo_obj); eo_do(eo_obj, parent = eo_parent_get()); evas_object_inject(eo_obj, obj, evas_object_evas_get(parent)); } /* all nice and private */ static void evas_object_rectangle_init(Evas_Object *eo_obj) { Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); /* set up methods (compulsory) */ obj->func = &object_func; obj->private_data = eo_data_ref(eo_obj, MY_CLASS); obj->type = o_type; } static void