im = buf->priv.onebuf;
if (!im)
{
- data = evas_xlib_swapper_buffer_map(buf->priv.swapper, &bpl);
+ data = evas_xlib_swapper_buffer_map(buf->priv.swapper, &bpl,
+ &(buf->w), &(buf->h));
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
im = (RGBA_Image *)evas_cache2_image_data(evas_common_image_cache2_get(),
}
src_data = update->image.data;
if (!src_data) return;
- dst_data = evas_xlib_swapper_buffer_map(buf->priv.swapper, &bpl);
+ dst_data = evas_xlib_swapper_buffer_map(buf->priv.swapper, &bpl,
+ &(buf->w), &(buf->h));
if (!dst_data) return;
+ RECTS_CLIP_TO_RECT(r.x, r.y, r.w, r.h, 0, 0, buf->w, buf->h);
+ if ((r.w <= 0) || (r.h <= 0)) return;
bpp = d / 8;
if (bpp <= 0) return;
wid = bpl / bpp;
}
void *
-evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl)
+evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl, int *w, int *h)
{
swp->mapped = EINA_TRUE;
if (bpl) *bpl = swp->buf[swp->buf_cur].bpl;
+ if (w) *w = swp->w;
+ if (h) *h = swp->h;
return swp->buf[swp->buf_cur].data;
}
}
void *
-evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl)
+evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl, int *w, int *h)
{
unsigned int attach = DRI2BufferBackLeft;
int num;
}
swp->w = swp->buf_w;
swp->h = swp->buf_h;
+ if (w) *w = swp->w;
+ if (h) *h = swp->h;
return swp->buf_data;
}
{
DRI2BufferFlags *flags;
- if (!swp->mapped) evas_xlib_swapper_buffer_map(swp, NULL);
+ if (!swp->mapped) evas_xlib_swapper_buffer_map(swp, NULL, NULL, NULL);
if (!swp->mapped) return MODE_FULL;
flags = (DRI2BufferFlags *)(&(swp->buf->flags));
if (flags->data.idx_reuse != swp->last_count)
}
void *
-evas_xlib_swapper_buffer_map(X_Swapper *swp EINA_UNUSED, int *bpl EINA_UNUSED)
+evas_xlib_swapper_buffer_map(X_Swapper *swp EINA_UNUSED, int *bpl EINA_UNUSED, int *w EINA_UNUSED, int *h EINA_UNUSED)
{
return NULL;
}
X_Swapper *evas_xlib_swapper_new(Display *disp, Drawable draw, Visual *vis,
int depth, int w, int h);
void evas_xlib_swapper_free(X_Swapper *swp);
-void *evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl);
+void *evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl, int *w, int *h);
void evas_xlib_swapper_buffer_unmap(X_Swapper *swp);
void evas_xlib_swapper_swap(X_Swapper *swp, Eina_Rectangle *rects, int nrects);
int evas_xlib_swapper_buffer_state_get(X_Swapper *swp);