Re: [cairo-compmgr] Re: magnifier plugin prove of concept |
[ Thread Index | Date Index | More lists.tuxfamily.org/cairo-compmgr Archives ]
hi, carlos Very good job, you are in the right way. Only some points : first instead create a window (which is redirected by compositing), use cairo surface that you can create from root window surface or cow surface in screen paint implementation like this: if (!self->priv->surface) { CCMWindow* root = ccm_screen_get_root_window(screen); cairo_surface_t* surface = ccm_drawable_get_surface(CCM_DRAWABLE(root)); self->priv->surface = cairo_surface_create_similar(surface, w , h); cairo_surface_destroy(surface); } After in window paint implementation create a context from this surface and paint window on it, like you do, but don't forget the magnifier offset in screen: .... cairo_t* ctx = cairo_create(self->priv->surface); // Translate to -x,-y offset of magnifier to have same coords of screen cairo_translate(ctx, -x_offset, -y_offset); // Magnifier scale cairo_scale(ctx, scale_x, scale_y); // Set clip zone to size of magnifier to don't draw outsite the magnifier surface cairo_rectangle(ctx, 0, 0, width, height); cairo_clip(ctx); // Paint the window ret = ccm_window_plugin_paint (CCM_WINDOW_PLUGIN_PARENT(plugin), window, ctx, surface); .... You can also in this point, test if window is visible in magnifier with ccm_region_rect_in to don't draw it when is outside magnifier. To finish, i think we need a new function in screen which get cow context like this : cairo_t* ccm_screen_get_context(CCMScreen* self) { if (!self->priv->ctx) { self->priv->ctx = ccm_drawable_create_context(CCM_DRAWABLE(self->priv->cow)); } return self->priv->ctx; } or add this context at parameters of ccm_screen_plugin_paint. and after in end of screen paint, we can paint the magnifier like this: cairo_t* context = ccm_screen_get_context(screen); cairo_set_source_surface(context, self->priv->surface, x_pos, y_pos); cairo_paint(context); I write this code very quickly, and it can contains some mistakes ;) Nicolas -- gandalfn <gandalfn@xxxxxxxxxxxxxxxx>
Attachment:
signature.asc
Description: Ceci est une partie de message =?ISO-8859-1?Q?num=E9riquement?= =?ISO-8859-1?Q?_sign=E9e?=
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |