static gboolean _egueb_video_ope_provider_render_cb(OPEPlayer * player, gpointer event, gpointer data) { Egueb_Video_Ope_Provider *thiz = data; OPEPlayerEventRender *ev = event; Enesim_Surface *surface; void *sw_data; size_t stride; if (ev->stream != thiz->stream) return EINA_TRUE; if (!thiz->width || !thiz->height) return EINA_TRUE; surface = enesim_surface_new(ENESIM_FORMAT_ARGB8888, thiz->width, thiz->height); enesim_surface_sw_data_get(surface, &sw_data, &stride); ope_stream_frame_rgb_get(ev->stream, OPE_STREAM_VIDEO_RGB_FORMAT_B8G8R8X8, thiz->width, thiz->height, sw_data, stride); /* lock the renderer */ enesim_renderer_lock(thiz->image); /* set the new surface */ enesim_renderer_image_source_surface_set(thiz->image, surface); /* unlock the renderer */ enesim_renderer_unlock(thiz->image); return TRUE; }
static void draw_ui(Escen_Viewer *thiz) { Ender_Element *e; Enesim_Surface *s; Enesim_Renderer *r; /* add a stack with the enders, make it scrollable */ e = eon_stack_new(); /* TODO make it scrollable */ eon_stack_orientation_set(e, EON_ORIENTATION_VERTICAL); eon_container_child_add(thiz->container, e); thiz->enders_stack = e; /* add another stack with the states of each escen */ /* TODO make it scrollable */ e = eon_stack_new(); eon_stack_orientation_set(e, EON_ORIENTATION_VERTICAL); eon_container_child_add(thiz->container, e); thiz->states_stack = e; /* the scene area */ e = eon_scrollview_new(); thiz->scene_area_scrollview = e; eon_container_child_add(thiz->container, e); eon_stack_child_weight_set(thiz->container, e, 1); e = eon_surface_new(); thiz->scene_area = e; /* TODO use the backend to create the surface */ s = enesim_surface_new(ENESIM_FORMAT_ARGB8888, 640, 480); thiz->s = s; eon_surface_source_set(e, s); eon_element_vertical_alignment_set(e, EON_VERTICAL_ALIGNMENT_TOP); eon_element_horizontal_alignment_set(e, EON_HORIZONTAL_ALIGNMENT_LEFT); eon_container_child_add(thiz->scene_area_scrollview, e); r = enesim_renderer_checker_new(); enesim_renderer_checker_even_color_set(r, 0xffcccccc); enesim_renderer_checker_odd_color_set(r, 0xffffffff); enesim_renderer_checker_width_set(r, 10); enesim_renderer_checker_height_set(r, 10); enesim_renderer_rop_set(r, ENESIM_FILL); thiz->checker = r; r = enesim_renderer_compound_new(); enesim_renderer_compound_layer_add(r, thiz->checker); enesim_renderer_rop_set(r, ENESIM_FILL); thiz->compound = r; /* set the default state */ thiz->current_escen_ender = escen_ender_nth_get(thiz->escen, 0); thiz->current_instance = escen_instance_new(thiz->current_escen_ender, EINA_TRUE); escen_instance_state_set(thiz->current_instance, escen_ender_state_get(thiz->current_escen_ender, "default")); thiz->current_ender = escen_instance_ender_get(thiz->current_instance); thiz->current_renderer = ender_element_object_get(thiz->current_ender); /* FIXME we should not set this */ enesim_renderer_rop_set(thiz->current_renderer, ENESIM_BLEND); enesim_renderer_compound_layer_add(thiz->compound, thiz->current_renderer); /* populate the radio buttons */ populate_enders(thiz, thiz->enders_stack, thiz->escen); populate_states(thiz, thiz->states_stack, thiz->current_escen_ender); }
int main(void) { Enesim_Renderer *r; Enesim_Surface *s; Enesim_Draw_Cache *cache; Enesim_Buffer_Sw_Data sw_data_cache; Eina_Rectangle area, geom; uint8_t *dst; uint8_t *src; size_t stride; int i; enesim_init(); r = enesim_renderer_circle_new(); enesim_renderer_circle_x_set(r, 128); enesim_renderer_circle_y_set(r, 128); enesim_renderer_circle_radius_set(r, 64); enesim_renderer_shape_fill_color_set(r, 0xffff0000); enesim_renderer_shape_draw_mode_set(r, ENESIM_RENDERER_SHAPE_DRAW_MODE_FILL); cache = enesim_draw_cache_new(); enesim_draw_cache_renderer_set(cache, r); /* try to map the area at 0, 0, 64, 64 */ eina_rectangle_coords_from(&area, 0, 0, 64, 64); if (!enesim_draw_cache_map_sw(cache, &area, &sw_data_cache, ENESIM_FORMAT_ARGB8888, NULL)) goto failed_mapping; /* try to map the area at 64, 64, 128, 128 */ eina_rectangle_coords_from(&area, 64, 64, 128, 128); if (!enesim_draw_cache_map_sw(cache, &area, &sw_data_cache, ENESIM_FORMAT_ARGB8888, NULL)) goto failed_mapping; /* now map again the first area, in theory we should not draw anymore */ eina_rectangle_coords_from(&area, 0, 0, 64, 64); if (!enesim_draw_cache_map_sw(cache, &area, &sw_data_cache, ENESIM_FORMAT_ARGB8888, NULL)) goto failed_mapping; src = sw_data_cache.argb8888.plane0; /* get the geometry */ enesim_draw_cache_geometry_get(cache, &geom); printf("creating a surface of size %d %d\n", geom.w, geom.h); s = enesim_surface_new(ENESIM_FORMAT_ARGB8888, geom.w, geom.h); enesim_surface_sw_data_get(s, (void **)&dst, &stride); for (i = 0; i < 128; i++) { memcpy(dst, src, stride); dst += stride; src += stride; } enesim_image_file_save("enesim_draw_cache01_0x0_64x64.png", s, NULL); enesim_surface_unref(s); failed_mapping: enesim_draw_cache_free(cache); enesim_shutdown(); return 0; }