repaint_view(pepper_renderer_t *renderer, pepper_object_t *output, pepper_view_state_t *view_state,
const pixman_region32_t *global_damage) /* global coordinate */
{
- pixman_region32_t repaint;
- pixman_image_t *dest = ((pixman_render_target_t *)renderer->target)->image;
- pepper_object_t *view = view_state->view;
- pepper_object_t *view_surf = pepper_view_get_surface(view);
- pixman_surface_state_t *ps = get_surface_state(renderer, view_surf);
- const pixman_region32_t *visible = view_state->visible;
- const pepper_output_geometry_t *geometry;
- const pepper_mat4_t *transform = view_state->transform;
- int viewport_x, viewport_y, viewport_w, viewport_h;
-
- if (!ps->image || !dest)
+ pixman_render_target_t *target = (pixman_render_target_t*)renderer->target;
+ pixman_region32_t repaint;
+ pepper_object_t *view;
+ pepper_object_t *view_surf;
+ pixman_surface_state_t *ps;
+
+ view = view_state->view;
+ PEPPER_ASSERT(view);
+
+ view_surf = pepper_view_get_surface(view);
+ if (!view_surf)
+ return;
+
+ ps = get_surface_state(renderer, view_surf);
+ if (!ps || !ps->image)
return;
pixman_region32_init(&repaint);
- pixman_region32_intersect(&repaint, (pixman_region32_t*) visible,
+ pixman_region32_intersect(&repaint, (pixman_region32_t*) view_state->visible,
(pixman_region32_t*) global_damage);
if (pixman_region32_not_empty(&repaint))
{
- /* damage region global to output */
- geometry = pepper_output_get_geometry(output);
- pixman_region32_translate(&repaint, -geometry->x, -geometry->y);
- /* set clip on target destination */
- pixman_image_set_clip_region32(dest, &repaint);
- /* get viewport */
+ int x, y, w, h;
+ const pepper_mat4_t *transform = view_state->transform;
+
+ /* set clip on destination */
+ pixman_image_set_clip_region32(target->image, &repaint);
+
/* TODO: consider transform such as rotation */
- viewport_x = transform->m[3];
- viewport_y = transform->m[7];
- pepper_view_get_size(view, &viewport_w, &viewport_h);
+ x = transform->m[3];
+ y = transform->m[7];
+ pepper_view_get_size(view, &w, &h);
+
/* composite */
- pixman_image_composite32(PIXMAN_OP_SRC, ps->image, NULL, dest,
+ pixman_image_composite32(PIXMAN_OP_SRC, ps->image, NULL, target->image,
0, 0, /* src_x, src_y */
0, 0, /* mask_x, mask_y */
- viewport_x, viewport_y, /* dest_x, dest_y */
- viewport_w, viewport_h);
+ x, y, /* dest_x, dest_y */
+ w, h);
}
pixman_region32_fini(&repaint);
static void
pixman_renderer_repaint_output(pepper_renderer_t *renderer, pepper_object_t *output,
- const pepper_list_t *view_list, const pixman_region32_t *output_damage)
+ const pepper_list_t *view_list,
+ const pixman_region32_t *output_damage)
{
- const pixman_image_t *dst = ((pixman_render_target_t *)renderer->target)->image;
- const pepper_list_t *cur_list;
- pepper_view_state_t *view_state;
- const pepper_output_geometry_t *geometry;
- pixman_region32_t global_damage;
+ pixman_render_target_t *target = (pixman_render_target_t *)renderer->target;
- if (dst && pixman_region32_not_empty((pixman_region32_t*) output_damage))
+ if (target && pixman_region32_not_empty((pixman_region32_t*) output_damage))
{
+ const pepper_output_geometry_t *geometry;
+ pixman_region32_t global_damage;
+ pepper_list_t *cur_list;
+ pepper_view_state_t *view_state;
+
/* translate damage to global coordinate */
geometry = pepper_output_get_geometry(output);
pixman_region32_init(&global_damage);