void rdpPolyFillRect(DrawablePtr pDrawable, GCPtr pGC, int nrectFill, xRectangle *prectInit) { rdpPtr dev; RegionRec clip_reg; RegionPtr reg; int cd; LLOGLN(10, ("rdpPolyFillRect:")); dev = rdpGetDevFromScreen(pGC->pScreen); dev->counts.rdpPolyFillRectCallCount++; /* make a copy of rects */ reg = rdpRegionFromRects(nrectFill, prectInit, CT_NONE); rdpRegionTranslate(reg, pDrawable->x, pDrawable->y); rdpRegionInit(&clip_reg, NullBox, 0); cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC); LLOGLN(10, ("rdpPolyFillRect: cd %d", cd)); if (cd == XRDP_CD_CLIP) { rdpRegionIntersect(reg, &clip_reg, reg); } /* do original call */ rdpPolyFillRectOrg(pDrawable, pGC, nrectFill, prectInit); if (cd != XRDP_CD_NODRAW) { rdpClientConAddAllReg(dev, reg, pDrawable); } rdpRegionUninit(&clip_reg); rdpRegionDestroy(reg); }
int rdpDrawItemRemove(rdpPtr dev, rdpPixmapRec *priv, struct rdp_draw_item *di) { if (di->prev != NULL) { di->prev->next = di->next; } if (di->next != NULL) { di->next->prev = di->prev; } if (priv->draw_item_head == di) { priv->draw_item_head = di->next; } if (priv->draw_item_tail == di) { priv->draw_item_tail = di->prev; } if (di->type == RDI_LINE) { if (di->u.line.segs != NULL) { g_free(di->u.line.segs); } } if (di->type == RDI_TEXT) { rdpGlyphDeleteRdpText(di->u.text.rtext); } rdpRegionDestroy(di->reg); g_free(di); return 0; }
int rdpGlyphDeleteRdpText(struct rdp_text *rtext) { int index; if (rtext == NULL) { return 0; } for (index = 0; index < rtext->num_chars; index++) { if (rtext->chars[index] != NULL) { g_free(rtext->chars[index]->data); g_free(rtext->chars[index]); } } rdpRegionDestroy(rtext->reg); rdpGlyphDeleteRdpText(rtext->next); g_free(rtext); return 0; }